python 实现一个贴吧图片爬虫的示例
作者:贝克田庄 发布时间:2023-03-01 08:43:28
标签:python,贴吧,图片,爬虫
今天没事回家写了个贴吧图片下载程序,工具用的是PyCharm,这个工具很实用,开始用的Eclipse,但是再使用类库或者其它方便并不实用,所以最后下了个专业开发python程序的工具,开发环境是Python2,因为大学时自学的是python2
第一步:就是打开cmd命令,输入pip install lxml
如图
第二步:下载一个chrome插件:专门用来将html文件转为xml用xpth技术定位
在页面按下Ctrl+Shift+X即可打开插件进行页面分析
如下图
图中的黑色方框左边填写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)
运行:
可以看到程序成功运行了,当然我自己的过程并不是一帆风顺,代码仅供参考
来源:http://www.cnblogs.com/clovejava/archive/2017/10/11/7653284.html


猜你喜欢
- 之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片。最近做项目,打算换个方法上传图片。Android发展到现在,Okhttp
- 在程序中定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。根据定义变量的位置,变量分为两种:局部变量:在函数中定义的变
- 本文实例讲述了Python表示矩阵的方法。分享给大家供大家参考,具体如下:在c语言中,表示个“整型3行4列”的矩阵,可以这样声明:int&n
- 字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表
- 近期在开发一个地方O2O租书项目,使用ASP.NET MVC技术,其中在图书详情页,用户可以输入借阅的数量,这里使用了js来控制数量的增减和
- 数组都是从0开始。javascript是arrayname[i],而vbscript是arrayname(i) javascript的字符串
- 本文实例讲述了Python使用try except处理程序异常的三种常用方法。分享给大家供大家参考,具体如下:如果你在写python程序时遇
- 之前用pymysql连接数据库的方法太繁杂了,用django自带的orm进行数据库的创建修改。1、首先在终端打开数据库mysql -u ro
- 使用全局路由守卫实现前端定义好路由,并且在路由上标记相应的权限信息const routerMap = [ { path: '/per
- PNG格式以支持透明和无损,且相对大小适中,已成为现在网页中图片运用的主流。有些时候我们在制作网页时使用PNG格式图片,用IE浏览器查看却无
- <script type="text/javascript"> var params&n
- JS是一段一段执行的(以<script>标签来分割),执行每一段之前,都有一个“预编译”,预编译干的活是:声明所有var变量(初
- 目录假想场景基本思路pywinauto方案win32gui方案更一般的方案利用Python进行Excel自动化操作的过程中,尤其是涉及VBA
- #!/usr/bin/env pythonimport sockets = socket.socket(socket.AF_PACKET,
- 首先下载源tar包可利用linux自带下载工具wget下载,如下所示:wget http://www.python.org/ftp/pyth
- 本文实例讲述了Zend Framework动作助手Redirector用法。分享给大家供大家参考,具体如下:Redirector 提供另一种
- 1.下载与安装Anaconda3首先去官网Anaconda下载网址下载Anaconda3,我安装的版本是Anaconda3 2019.03(
- 前言本文主要给大家介绍了关于python中用Future对象异步返回结果的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的
- 一、前言嗨,大家好,我是新发。最近需要做个小工具,可以通过python来读写Excel,实现增删改查操作。以前用的是xlrd和xlwt这两个
- 1.建立项目,进入项目文件夹2.初始化ssh key 参见官网指南.(本机生成一对key,public key传到官网sshkey下面)ht