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)
posted @ 2025-09-29 16:01  LauTianen  阅读(31)  评论(0)    收藏  举报