python 实现一个贴吧图片爬虫的示例
作者:贝克田庄 时间:2023-03-01 08:43:28
今天没事回家写了个贴吧图片下载程序,工具用的是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
标签:python,贴吧,图片,爬虫
0
投稿
猜你喜欢
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2022-02-02 11:08:01
asp实现在线人数统计代码
2008-08-10 18:35:00
ASP连接access和mssql数据库的全能代码
2008-10-12 13:17:00
使用游标进行PHP SQLSRV查询的方法与注意事项
2023-05-22 10:51:10
Django框架首页和登录页分离操作示例
2022-10-06 02:16:42
新手常见6种的python报错及解决方法
2022-10-10 09:03:22
Python脚本利用adb进行手机控制的方法
2023-01-31 20:49:47
统计热门文章的算法
2008-03-16 15:40:00
python标准日志模块logging的使用方法
2022-10-29 19:08:16
Python+OpenCV实现阈值分割的方法详解
2023-08-13 02:24:00
SQL Server中通过reverse取某个最后一次出现的符号后面的内容(字符串反转)
2012-07-11 15:59:36
菜鸟课堂:MySQL权限的详细解答
2009-09-03 11:43:00
最新idea2021最新激活超详细教程
2023-08-08 01:50:17
python实现自动重启本程序的方法
2022-07-18 14:16:19
瞬间的设计(四)【碳酸饮料会】
2009-12-23 13:56:00
python 写的一个爬虫程序源码
2022-08-10 16:00:47
MAC下Anaconda+Pyspark安装配置详细步骤
2021-02-11 18:15:51
python通过安装itchat包实现微信自动回复收到的春节祝福
2022-07-09 20:36:26
Python实现从多表格中随机抽取数据
2022-07-01 01:58:18
Python 3 使用Pillow生成漂亮的分形树图片
2022-05-03 14:53:23