码迷,mamicode.com
首页 > 其他好文 > 详细

百度贴吧图片抓取工具

时间:2016-08-21 18:23:34      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

本着周末逛贴吧看图片,发现电脑运行内存太小,网页加载太慢,一怒之下写个爬虫把图片都下载到本地慢慢看

得到结果如下:

技术分享

千张内涵图随意浏览

程序第一个选项:

技术分享

对应的贴吧是:

技术分享

第二个选项:

技术分享

对应的贴吧是

技术分享

抓取的对象为楼主所发的图片:

技术分享

好的,开搞:

下面是基于python3写的

通过观察,得到爬虫思路为:

思路
1、搜索什么贴吧kw
2、贴吧内的什么贴qw
3、进入贴吧href="/p/
4、图片<img src="
5、页数pn=

第一步思路是构造网址,观察看到贴吧网址为:

技术分享

代码为

# 输入的文字转码
kw = input("请输入贴吧:")
qw = input("请输入进入的贴:")
qw = urllib.parse.quote(qw.encode(gbk))
kw = urllib.parse.quote(kw.encode(gbk))
# 抓取的页数
page = input("你要抓取的页数(每页10个贴):")
# 构造一级网址
url_1 = "http://tieba.baidu.com/f/search/res?isnew=1&kw=" + str(kw) + "&qw=" + str(qw) + "%ED&rn=10&un=&only_thread=1&sm=1&sd=&ed=&pn=" + str(page)

第二观察解析的网址

每个网址的子贴吧都包含href="/p/

技术分享

就写个正则:

1 # 第一次网址匹配        
2 def reg_1(html_1):
3     reg = r(href="/p/)(.+?)(pid)
4     all = re.compile(reg);
5     alllist = re.findall(all, html_1)
6     return alllist

得到全部的搜索吧的网址了

那么就解析getHtml()

解析后观察发现楼主的图片都有<img src="

再写个正则:

1 # 第二次网址匹配        
2 def reg_2(html_2):
3     reg = r(<img src=")(.+?g)(" width=)
4     all = re.compile(reg);
5     alllist = re.findall(all, html_2)
6     return alllist

页数的正则也包含:共有....页

那么写个正则:

1 # 贴的页数匹配        
2 def reg_page(html_page):
3     reg = r(共有.+?)(\d+)(.+?页)
4     all = re.compile(reg);
5     alllist = re.findall(all, html_page)
6     return alllist

思路搞定

 爬虫步骤为:

1、先进去得到每一张图片的网址
2、楼主的图片末尾有pic_type,其他人发的没有
3、得到全部图片保存之
4、最后再一起下载

 将所有图片的网址保存到一个txt

保存完后再一起下载

这里可以开个线程池

太麻烦不搞了

就直接保存下载

1 # 将image网址写入txt
2 for x in range(0,len(infoarr_2)):
3 save_path = "../imageurl.txt"
4 file_path = open(save_path, w)
5 txt = str(txt) + \n + str(infoarr_2[x])
6 if txt:
7     file_path.write(txt)
8     file_path.close()

我保存在imageurl里面

数组是infoarr_2

注意每一次写入都会清空txt,所以我写成:

txt = str(txt) + ‘\n‘ + str(infoarr_2[x])

最后最后下载

 1 file = open(../imageurl.txt, r)
 2 data = file.read().split(\n)
 3 imaurl = []
 4 num = 0
 5 for y in range(0, len(data)):
 6     imaurl.append(data[y])
 7 for imgPath in imaurl:
 8     try:
 9         # 将图片写入ima文件夹
10         filess = open("../img/" + str(num) + ".jpg", wb)
11         filess.write(urllib.request.urlopen(imgPath).read())
12         filess.close()
13 
14         print("正在下载" + imgPath)
15         num = num + 1
16     except Exception as err:
17         print(err)
18         pass

完美解决

看图去

软件已经打包到github

自行下载

https://github.com/TTyb/

百度贴吧图片抓取工具

标签:

原文地址:http://www.cnblogs.com/TTyb/p/5793059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!