业余时用python写的百度贴吧爬虫程序,算是对学习python程序得一个练习。

本程序可以针对给定的贴吧链接,把帖子楼主的发言或者图片爬取出来,目前主要功能为下载所有楼主发的图片。爬取楼主发言的功能仅支持屏幕输出,没有保存到本地文件,有兴趣的朋友可以进行补充。仅供学习,转载请标明出处。

tieba_spider.py

#coding:utf-8
import urllib2,re,time,threading
import DownQueueuser_agent='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36' #模拟浏览器访问
url='http://tieba.baidu.com/p/3271638607?see_lz=1&pn=' #贴吧地址,只看楼主
header={'User-Agent' : user_agent}g_worker=DownQueue.down() #下载器class Tieba_Spider(threading.Thread):def __init__(self,url,type):threading.Thread.__init__(self)self.url=urlself.type=typeself.num=0def run(self):self.start_spider()def get_info(self):try:req=urllib2.Request(self.url,headers=header)response=urllib2.urlopen(req)htm=response.read().decode('gbk')self.num=self.get_page_num(htm)print 'It has %d page' % self.numself.title=self.get_title(htm)print 'It\'s title is %s'%self.titleexcept urllib2.URLError,e:if hasattr(e,'code'):print 'Error code :',e.code              if hasattr(e,'reason'):print 'Reason :',e.reasondef start_spider(self):global g_workerself.get_info()for i in range(1,self.num+1,1):print 'start : ',itry:req=urllib2.Request(self.url+str(i),headers=header)response=urllib2.urlopen(req)htm=response.read().decode('gbk')if self.type==0:self.page_deal(htm)elif self.type==1:self.down_pic(htm)except urllib2.URLError,e:if hasattr(e,'code'):print 'Error code :',e.code              if hasattr(e,'reason'):print 'Reason :',e.reasong_worker.set_flag(True)def get_page_num(self,htm):match=re.search(r'<span class="red">(\d*)</span>',htm)if match:return int(match.group(1))else:return 0def get_title(self,htm):match=re.search(r'class="core_title_txt(\s+)"(\s+)title="(.*?)"',htm)if match:return match.group(3)else:print 'no match title'return ''def page_deal(self,htm):match=re.findall(r'id="post_content_(.*?)">(.*?)</div>',htm)if match:for it in match:print it[1],'\n'else:print 'no deal'def down_pic(self,htm):global g_workermatch=re.findall(r'<img class="BDE_Image" pic_type=(.*?)src="(.*?)"',htm)if match:for it in match:print 'picture url :',it[1],'\n'g_worker.push(it[1])else:print 'no deal'        if __name__=='__main__':spider=Tieba_Spider(url,1)#参数1为下载图片。默认为0,功能为抓取楼主的发言在屏幕上显示spider.start()g_worker.start()

DownQueue.py

#coding:utf-8
import threading,Queue,re,time
import urllib2class down(threading.Thread):def __init__(self):threading.Thread.__init__(self)self.queue=Queue.Queue(1000)self.semaphore=threading.Semaphore(0)self.flag=False #是否停止def push(self,obj):self.queue.put(obj)self.semaphore.release()def set_flag(self,f):self.flag=fdef run(self):while True:if self.semaphore.acquire():obj=self.queue.get()data=urllib2.urlopen(obj).read()pic=re.search(r'.*/(.*)',obj)print 'dowing ',pic.group(1)fd=open('./spider_pic/%s'%pic.group(1),'wb')fd.write(data)fd.close()if self.queue.empty() and self.flag:    #线程结束条件,队列为空并且退出标志为真break

Tieba_Spider 类为爬虫类,负责爬出楼主发言中的图片链接,并将其推入down类的队列中。down类的工作为下载图片。两个类均继承自threading.Thread。仅供学习,转载请标明出处。

python 百度贴吧爬虫(下载图片)相关推荐

  1. src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html ...

  2. 利用爬虫从一个百度贴吧页面下载图片

    1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html中图片的html标签特征,用正则解析出所有的图片url链接列表: ...

  3. mac用python爬虫下载图片_使用Python爬虫实现自动下载图片

    python爬虫支持模块多.代码简洁.开发效率高 ,是我们进行网络爬虫可以选取的好工具.对于一个个的爬取下载,势必会消耗我们大量的时间,使用Python爬虫就可以解决这个问题,即可以实现自动下载.本文 ...

  4. 用python画写轮眼_Python爬虫入门-图片下载(写轮眼--Lyon)

    Python小白最近入了爬虫的坑,但是一直到前天为止我会的只会简单的爬取网页上的文本信息,比如什么 豆瓣上的书评 ,知乎上红人的关注者 --一些很简单的爬虫.就在昨天我无聊闲暇在逛知乎偶然发现Lyon ...

  5. python requests html格式图片打不开_爬虫下载图片打不开是什么原因,最新简易爬虫教程...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. (本文来自www.777n.com) 作者: GitPython (原文来 ...

  6. Python 爬虫下载图片两种方法

    """ 下载图片 """url = "图片链接"filename = "图片存储的路径" # 记得加 ...

  7. python百度搜索url爬取 图片

    这里以百度搜索为案例,搜索并下载图片 import requests # python HTTP客户端库,编写爬虫和测试服务器响应数据会用到的类库 import re # 导入正则表达式模块 impo ...

  8. Day3-scrapy爬虫下载图片自定义名称

    学习Scrapy过程中发现用Scrapy下载图片时,总是以他们的URL的SHA1 hash值为文件名,如: 图片URL:http://www.example.com/image.jpg 它的SHA1 ...

  9. 利用python3爬虫下载图片、pdf文档

    环境 语言环境:python3.6 操作系统:Win10 第三方库 requests 互联网上的资源大都是以二进制形式存储和运输的,如图片.pdf.音频.视频等,像.dat..ts等这些不常用的文件也 ...

最新文章

  1. 一个JS对话框,可以显示其它页面,
  2. Json返回时间中出现乱码问题的两种解决方法
  3. 不错的linux下通用的java程序启动脚本(转载)
  4. 创建dynamics CRM client-side (四) - Namespace Notation in JS
  5. 【Java萌新】MyBatis-Plus案例
  6. (C#)Winform修改DateTimePicker控件的背景色和边框色
  7. 兄弟连 企业shell笔试题 16-31
  8. js基本函数和基本方法
  9. VB如何判断文件正被占用/已被打开
  10. 惠普cq40无线网卡驱动_网友问题解答:雷哥我惠普的电脑搜索不到自己的手机热点啊?...
  11. [转载] java构造函数初始化与执行顺序问题
  12. 单片机外文参考文献期刊_单片机-英文参考文献
  13. 从官网下载 Google Chrome 离线安装包 谷歌浏览器 最新版
  14. w7设置双显示器_win7系统设置双显示器多屏幕模式的操作方法
  15. mysql 死锁分析_【mysql】MySQL知识整理-死锁分析-性能优化等
  16. PHP+AJAX开发幸运大转盘抽奖
  17. 空指针异常可能出现的原因
  18. 安卓手机主题软件_安卓手机赚钱软件
  19. Windows还原系统后分区合并为一个分区恢复方法
  20. OVR模式和sklearn模型评价标准学习

热门文章

  1. 图解时间复杂度O(n)
  2. U-Boot启动第二阶段代码分析
  3. 计算机在法学专业的应用,计算机如何服务于法学-西安交通大学教师个人主页.PDF...
  4. win10磁盘100官方解释(win10磁盘占用100%)
  5. python使用numba加速
  6. 写给AI实践者的九条建议—科大讯飞副总裁讯飞研究院联席院长李世鹏
  7. 北京市家庭居室装饰装修工程施工合同
  8. 坚持#第394天~佳能打印机IP7280开不了机的十多天的折腾终于有希望了
  9. linux内核链表移植到windows平台
  10. MVC分层+JDBC+数据库+Servlet实现JSP文件上传和显示+模糊查询+分页