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中cPickle用法例子分享
Jan 03 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python字符串格式化
Jun 15 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 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
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP反射学习入门示例
2019/06/14 PHP
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
Django中处理出错页面的方法
2015/07/15 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python的unittest测试类代码实例
2017/12/07 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
linux面试题参考答案(7)
2014/07/24 面试题
什么是Remote Module
2016/06/10 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
自荐信的格式
2014/03/10 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
退休欢送会致辞
2015/07/31 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
解决python存数据库速度太慢的问题
2021/04/23 Python
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技