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在Windows8下获取本机ip地址的方法
Mar 14 Python
python实现的简单文本类游戏实例
Apr 28 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
python实现list由于numpy array的转换
Apr 04 Python
Python 找到列表中满足某些条件的元素方法
Jun 26 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
Django学习之文件上传与下载
Oct 06 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
Python爬取网页信息的示例
Sep 24 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
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
php 随机生成10位字符代码
2009/03/26 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP自定义多进制的方法
2016/11/03 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
动态样式类封装JS代码
2009/09/02 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
python gdal安装与简单使用
2019/08/01 Python
django中间键重定向实例方法
2019/11/10 Python
python函数定义和调用过程详解
2020/02/09 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
《童年的发现》教学反思
2014/02/14 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
2014年医务科工作总结
2014/12/18 职场文书
教师读书笔记
2015/06/29 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android