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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
python+os根据文件名自动生成文本
Mar 21 Python
基于python的ini配置文件操作工具类
Apr 24 Python
python使用turtle绘制国际象棋棋盘
May 23 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
Python 中Django安装和使用教程详解
Jul 03 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
python文件编写好后如何实践
Jul 07 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 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
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php实现通过ftp上传文件
2015/06/19 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
成教自我鉴定
2013/10/27 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
中秋联欢会主持词
2015/07/04 职场文书
思想工作总结范文
2015/08/12 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis