python 实现一个贴吧图片爬虫的示例


Posted in Python onOctober 12, 2017

今天没事回家写了个贴吧图片下载程序,工具用的是PyCharm,这个工具很实用,开始用的Eclipse,但是再使用类库或者其它方便并不实用,所以最后下了个专业开发python程序的工具,开发环境是Python2,因为大学时自学的是python2

第一步:就是打开cmd命令,输入pip install lxml

如图

python 实现一个贴吧图片爬虫的示例

第二步:下载一个chrome插件:专门用来将html文件转为xml用xpth技术定位

python 实现一个贴吧图片爬虫的示例

在页面按下Ctrl+Shift+X即可打开插件进行页面分析

如下图

python 实现一个贴吧图片爬虫的示例

图中的黑色方框左边填写xpth,右边会返回对应的结果,可以看到当前页面的帖子全部抓取到了。xpth具体怎么写要根据右边的检查元素来具体分析,寻找规律,每个网站的方式不一样,但是细心寻找可以找到相同的规律。

找到规律并能匹配上开始写代码了:go

至于代码我对于每行尽量标上注释,方便大家理解

# -*- coding:utf-8 -*-

import urllib
import urllib2
from lxml import etree


def loadPage(url):
 """
  作用:根据url发送请求,获取服务器响应文件
  url: 需要爬取的url地址
 """
 #print url
 #美女
 # headers = {"User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"}

 request = urllib2.Request(url)
 html = urllib2.urlopen(request).read()
 # 解析HTML文档为HTML DOM模型
 content = etree.HTML(html)
 #print content
 # 返回所有匹配成功的列表集合
 link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')

 #link_list = content.xpath('//a[@class="j_th_tit"]/@href')
 for link in link_list:
  fulllink = "http://tieba.baidu.com" + link
  # 组合为每个帖子的链接
  #print link
  loadImage(fulllink)


# 取出每个帖子里的每个图片连接
def loadImage(link):
 headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 request = urllib2.Request(link, headers = headers)
 html = urllib2.urlopen(request).read()
 # 解析
 content = etree.HTML(html)
 # 取出帖子里每层层主发送的图片连接集合
 #link_list = content.xpath('//img[@class="BDE_Image"]/@src')
 #link_list = content.xpath('//div[@class="post_bubble_middle"]')
 link_list = content.xpath('//img[@class="BDE_Image"]/@src')
 # 取出每个图片的连接
 for link in link_list:
  print link
  writeImage(link)


def writeImage(link):
 """
  作用:将html内容写入到本地
  link:图片连接
 """
 #print "正在保存 " + filename
 headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 # 文件写入
 request = urllib2.Request(link, headers = headers)
 # 图片原始数据
 image = urllib2.urlopen(request).read()
 # 取出连接后10位做为文件名
 filename = link[-10:]
 # 写入到本地磁盘文件内
 with open("d:\image\\"+filename, "wb") as f:
  f.write(image)
 print "已经成功下载 "+ filename

def tiebaSpider(url, beginPage, endPage):
 """
  作用:贴吧爬虫调度器,负责组合处理每个页面的url
  url : 贴吧url的前部分
  beginPage : 起始页
  endPage : 结束页
 """
 for page in range(beginPage, endPage + 1):
  pn = (page - 1) * 50
  filename = "第" + str(page) + "页.html"
  fullurl = url + "&pn=" + str(pn)
  print fullurl
  loadPage(fullurl)
  #print html

  print "谢谢使用"

if __name__ == "__main__":
 kw = raw_input("请输入需要爬取的贴吧名:")
 beginPage = int(raw_input("请输入起始页:"))
 endPage = int(raw_input("请输入结束页:"))

 url = "http://tieba.baidu.com/f?"
 key = urllib.urlencode({"kw": kw})
 fullurl = url + key
 tiebaSpider(fullurl, beginPage, endPage)

运行:

python 实现一个贴吧图片爬虫的示例

python 实现一个贴吧图片爬虫的示例

可以看到程序成功运行了,当然我自己的过程并不是一帆风顺,代码仅供参考

python 实现一个贴吧图片爬虫的示例

以上这篇python 实现一个贴吧图片爬虫的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python实现的检测网站挂马程序
Nov 30 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
python中return的返回和执行实例
Dec 24 Python
pytorch标签转onehot形式实例
Jan 02 Python
Python模拟伯努利试验和二项分布代码实例
May 27 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 Python
Python实现曲线点抽稀算法的示例
Oct 12 #Python
python去除字符串中的换行符
Oct 11 #Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 #Python
Windows系统下多版本pip的共存问题详解
Oct 10 #Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 #Python
遗传算法之Python实现代码
Oct 10 #Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 #Python
You might like
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
Python对列表排序的方法实例分析
2015/05/16 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
另类冲刺标语
2014/06/24 职场文书
jquery插件实现图片悬浮
2021/04/16 jQuery
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
python通过函数名调用函数的几种方法总结
2021/06/07 Python
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript