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
投稿

猜你喜欢

  • 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
  • asp之家 网络编程 m.aspxhome.com