python 实现一个贴吧图片爬虫的示例

作者:贝克田庄 时间:2023-03-01 08:43:28 

今天没事回家写了个贴吧图片下载程序,工具用的是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 实现一个贴吧图片爬虫的示例

来源:http://www.cnblogs.com/clovejava/archive/2017/10/11/7653284.html

标签:python,贴吧,图片,爬虫
0
投稿

猜你喜欢

  • 如何拒绝同一张表单被多次提交?

    2009-12-16 18:46:00
  • javascript实现瀑布流自适应遇到的问题及解决方案

    2024-04-16 10:35:23
  • 详解duck typing鸭子类型程序设计与Python的实现示例

    2022-12-26 07:12:19
  • django 环境变量配置过程详解

    2021-11-19 03:07:52
  • 只截取ip前6位的asp代码

    2009-05-29 18:30:00
  • 用Python爬取QQ音乐评论并制成词云图的实例

    2022-04-04 04:08:59
  • 浅析go中的map数据结构字典

    2024-05-22 10:13:05
  • Oracle数据库密码文件的使用与维护

    2010-07-28 13:27:00
  • MyEclipse连接MySQL数据库报错解决办法

    2024-01-18 03:31:37
  • 如何保持Oracle数据库的优良性能

    2009-02-26 10:39:00
  • CentOS7环境下源码安装MySQL5.7的方法

    2024-01-26 04:38:56
  • asp三天学好ADO对象之第二天

    2008-10-09 12:49:00
  • 详解Python遍历列表时删除元素的正确做法

    2023-04-06 18:42:53
  • python 安全地删除列表元素的方法

    2022-11-20 16:21:35
  • Python中json.load()和json.loads()有哪些区别

    2022-11-09 09:24:05
  • 使用vue打包时gzip压缩的两种方案

    2024-05-21 10:29:45
  • python数据类型相关知识扩展

    2021-12-21 10:20:07
  • 在python3环境下的Django中使用MySQL数据库的实例

    2021-09-11 13:03:37
  • .Net行为型设计模式之访问者模式(Visitor)

    2024-05-13 09:18:14
  • mysql的数据压缩性能对比详情

    2024-01-19 13:02:43
  • asp之家 网络编程 m.aspxhome.com