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 相关文章推荐
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
python调用API实现智能回复机器人
Apr 10 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
手写一个python迭代器过程详解
Aug 27 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python生成器传参数及返回值原理解析
Jul 22 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
canvas的神奇用法
2017/02/03 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
给Python初学者的一些编程技巧
2015/04/03 Python
简单实现python进度条脚本
2017/12/18 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
党员个人党性分析材料
2014/12/18 职场文书
同意离婚答辩状
2015/05/22 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书