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进阶教程之模块(module)介绍
Aug 30 Python
Python实现抓取网页并且解析的实例
Sep 20 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
Django开发RESTful API实现增删改查(入门级)
May 10 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP实现微信退款功能
2018/10/02 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
js获取url传值的方法
2015/12/18 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
Python 文件重命名工具代码
2009/07/26 Python
python删除文件示例分享
2014/01/28 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Tensorflow卷积神经网络实例
2018/05/24 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python 实现简单的FTP程序
2019/12/27 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
python中pop()函数的语法与实例
2020/12/01 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
安全宣传标语口号
2014/06/06 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis