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采集博客中上传的QQ截图文件
Jul 18 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
python实现简单ftp客户端的方法
Jun 28 Python
用Python设计一个经典小游戏
May 15 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
面向对象学习之pygame坦克大战
Sep 11 Python
Python散点图与折线图绘制过程解析
Nov 30 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
Python为何不支持switch语句原理详解
Oct 21 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
第九节--绑定
2006/11/16 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
js 颜色选择插件
2017/01/23 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
Python  Django 母版和继承解析
2019/08/09 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
超实用的 30 段 Python 案例
2019/10/10 Python
python判断是空的实例分享
2020/07/06 Python
python如何支持并发方法详解
2020/07/25 Python
Python实现自动装机功能案例分析
2020/10/22 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
环境工程专业自荐信范文
2014/06/24 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
导游词之神仙居景区
2019/11/15 职场文书
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle
索尼ICF-36收音机评测
2022/04/30 无线电