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 相关文章推荐
python 动态获取当前运行的类名和函数名的方法
Apr 15 Python
Python中的两个内置模块介绍
Apr 05 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
关于python写入文件自动换行的问题
Jun 23 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
python创建与遍历List二维列表的方法
Aug 16 Python
Python的条件锁与事件共享详解
Sep 12 Python
Python-jenkins 获取job构建信息方式
May 12 Python
分享一个python的aes加密代码
Dec 22 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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
解析ajax事件的调用顺序
2013/06/17 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
jQuery Ajax async=>false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
vue.js实现双击放大预览功能
2020/06/23 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
python实现同时给多个变量赋值的方法
2015/04/30 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
python中的yield from语法快速学习
2020/11/06 Python
python3实现简单飞机大战
2020/11/29 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
Shell编程面试题
2012/05/30 面试题
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
Python基础 括号()[]{}的详解
2021/11/07 Python
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS
MySQL 语句执行顺序举例解析
2022/06/05 MySQL