python简易爬虫获取壁纸
记录一下只用re,request,os编写的简易爬虫
需要爬取的页面:https://wallhaven.cc/latest
页面分析,获取壁纸详情页的链接
使用浏览器自带的控制台(快捷键F12)对页面元素进行分析,找到壁纸详情页的链接,如图中红框。

编写相关的正则表达式,
# 第一次正则匹配,获取图片部分的全部html代码(记得转成str类型)
detailed_context = str(re.findall('<section class="thumb-listing-page">(.*?)</section>', detailed_html, re.S))
# 第二次匹配,获取图片url的具体html代码
detailed_html = str(re.findall('<li>(.*?)</li>', detailed_context, re.S))
# 第三次匹配,提示图片详情的url
detailed_list = re.findall('<a class="preview" href="(.*?)" target="_blank" ></a>', detailed_html, re.S)
因为只用了“re”用来提取URL,所以为了方便展示用了3次正则匹配来提示壁纸详情的URL。
PS:编写的正则表达式可以用在线正则表达式测试进行验证
获取壁纸的下载地址
用https://wallhaven.cc/w/xlmgjo举例。
使用控制台进行元素定位之后,可以看到有一个后缀位.jpg的链接(也有可能是.png),这个就是我们要的链接。

img_url = re.search('<img id="wallpaper" src="(.*?)"', html, re.S).group(1)
完整代码如下:
import requests, os, re
headers = {
"Host": "wallhaven.cc",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
}
start_url = 'https://wallhaven.cc/latest'
detailed_html = requests.get(start_url,headers=headers).text
# 第一次正则匹配,获取图片部分的全部html代码(记得转成str类型)
detailed_context = str(re.findall('<section class="thumb-listing-page">(.*?)</section>', detailed_html, re.S))
# 第二次匹配,获取图片url的具体html代码
detailed_html = str(re.findall('<li>(.*?)</li>', detailed_context, re.S))
# 第三次匹配,提示图片详情的url
detailed_list = re.findall('<a class="preview" href="(.*?)" target="_blank" ></a>', detailed_html, re.S)
for i in detailed_list:
html = requests.get(i, headers=headers).text
img_url = re.search('<img id="wallpaper" src="(.*?)"', html, re.S).group(1)
img_name = img_url.split('/')[-1]
os.makedirs('F:\img', exist_ok=True)
r = requests.get(img_url, stream=True)
with open('F:\img\%s' % img_name, 'wb') as f:
for chunk in r.iter_content(chunk_size=3072):
f.write(chunk)
print('Saved %s' % img_name)

浙公网安备 33010602011771号