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操作摄像头截图实现远程监控的例子
Mar 25 Python
Python中的index()方法使用教程
May 18 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
使用Tkinter制作信息提示框
Feb 18 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
python属于解释型语言么
Jun 15 Python
python OpenCV学习笔记
Mar 31 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
德劲1104的电路分析与改良
2021/03/01 无线电
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
Python中DJANGO简单测试实例
2015/05/11 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python实现拼图小游戏
2020/02/22 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
会议接待欢迎词
2014/01/12 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
关于感谢信的范文
2015/01/23 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang