网页爬虫抓取百度图片(用python访问直接Fobbiden!真小气qwq最后还是乖乖去爬zol上的壁纸)
优采云 发布时间: 2021-09-17 12:14网页爬虫抓取百度图片(用python访问直接Fobbiden!真小气qwq最后还是乖乖去爬zol上的壁纸)
根据老师的指导,我昨天开始自学爬虫入门
虽然我意识到了一个相对简单的小爬虫,但我还是很兴奋。我真的很高兴第一次意识到这一点
起初,我想爬上pexel的墙纸,但我发现对方的网页不知道设置了什么。无论如何,有一个反爬虫机制,我使用Python直接访问fobbiden!多么小气的qwq
最后,我爬上了ZOL的墙纸
之前:
当设计一个爬虫项目时,我们应该首先阐明手动浏览页面以获取大脑中图片的步骤
一般来说,当我们批量在线打开壁纸时,一般操作如下:
1、打开墙纸页
2、单击墙纸贴图(打开指定墙纸的页面)
3、选择分辨率(我们想下载高清图片)
4、save图片
在实际操作中,我们实现了以下步骤来访问网页地址:打开网页的壁纸→ 单击墙纸贴图打开指定页面→ 选择分辨率,单击打开最终保存的目标图像的网页→ 保存图像
在抓取过程中,我们尝试通过模拟浏览器的操作来打开网页,一步一步地获取并访问网页,最后获取目标图像的下载地址,将图像下载并保存到指定路径
*为了在这些中间过程中构建网页的某些特定过滤条件,有必要打开指定页面的源代码,观察并找到收录有目的链接的标记
具体实施项目和说明
这里我只是想得到一些指定的图片,所以我首先搜索了“昌门有喜”的网页,打开了一个搜索结果页面,发现这个页面上还收录了其他相同类型的壁纸链接,所以我从一开始就将我第一次访问的目的地地址设置为这个搜索结果页面
目标结果页面的屏幕截图:
图中的下标为“1/29”和“2/29”是相同类型的其他目标壁纸。通过单击这些图片,我们可以打开一个新的目标下载图片页面
这里我们看一下网页的源代码
图的*敏*感*词*底部是这些类似墙纸的目标地址(访问时需要添加前缀“”)
现在我们可以尝试实现构建爬虫程序:
打开指定的页面→ 过滤并获取所有昌门优喜壁纸的目标下载页面链接
代码如下:
1 from urllib import request,error
2 import re
3
4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
5
6 try:
7 response = request.urlopen(url)# 打开页面
8 html = response.read() #此时是byte类型
9 html = str(html) # 转换成字符串
10
11 pattern = re.compile(r'.*?</a>')
12 imglist = re.findall(pattern,html) # 匹配<a>标签中的href地址
13 truelist = []
14 for item in imglist:
15 if re.match(r'^\/bizhi\/561_',item): # 观察到所有目的地址下载页面前缀都是/bizhi/561_,通过match函数进行筛选
16 truelist.append(item)# 筛选掉其他无关的页面(把真的目标页面加到truelist列表中)
17 except error.HTTPError as e:
18 print(e.reason)
19 except error.URLError as e:
20 print(e.reason)
21 except:
22 pass
在获得地址后,我们可以获得地址→ 打开指定的页面→ 选择分辨率→ 获取目标下载地址→ 保存到本地指定路径
在测试期间,我输出了在信任列表的前一步中保存的内容
您可以看到只保存了一个后缀。我们需要在访问时添加指定的前缀
实施代码(见***代码):
<p> 1 # 对于每一张地址,抓取其地址并且下载到本地
2 x=0
3 for wallpaperpage in truelist:
4 try:
5 # print(wallpaperpage)
6 url1 = "http://desk.zol.com.cn" + wallpaperpage
7 response1 = request.urlopen(url1) # 打开壁纸的页面,相当于在浏览器中单击壁纸名
8 html1 = response1.read()
9 html1 = str(html1)
10 pattern1 = re.compile(r'.*</a>')
11 urllist = re.findall(pattern1,html1) #匹配<a>标签中的id为1920 * 1080的地址,相当于在浏览器中选择1920*1080分辨率
12 html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打开网页
13
14 pattern2 = re.compile(r'