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中动态创建类实例的方法
Mar 24 Python
python爬虫实例详解
Jun 19 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
解决python3捕获cx_oracle抛出的异常错误问题
Oct 18 Python
Python交互式图形编程的实现
Jul 25 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
python实现猜拳游戏
Mar 04 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
Python如何避免文件同名产生覆盖
Jun 09 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
Python复制文件操作实例详解
2015/11/10 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python模块文件结构代码详解
2018/02/03 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
python如何删除文件中重复的字段
2019/07/16 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
keras输出预测值和真实值方式
2020/06/27 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
小学生暑假感言
2014/02/06 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
超市创业计划书
2014/09/15 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
个人廉洁自律总结
2015/03/06 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Python 绘制多因子柱状图
2022/05/11 Python