大家好我是前端少年汪!痴迷技术,对programming有着极大的兴趣和爱好。 从明天起,做一个新思维的人 继承,多态,层层封装 从明天起,不再关心内存管理 让每一条数据,自动放到合适的位子上 从明天起,我将为每一个对象 取一个温暖的名字 它们用驼峰命名,优雅,大方 陌生人,我也祝福你哈 愿你不再为系统级bug烦恼 愿你在平台之间肆意游荡 愿你不再关心溢出与异常
爬取的目标网站:wallhaven.cc/
使用到的库:
- requests
- Xpath
分析目标网站的DOM结构
我们可以看到这个网站总共分为六个大的模块:Latest,Hot,Toplist,Random,Upload,Forums 我爬取的主要是latest,hot,toplist,random这四个模块的图片. 这四个模块对应的url网址分别为:
- wallhaven.cc/latest
- wallhaven.cc/hot
- wallhaven.cc/toplist
- wallhaven.cc/random
图片的预览页面
这里可以看到page=2的页面总共🈶️24张图片,这个只是缩略图,点击单个item项就可以进入到图片的详情页,可以看到对应的图片的详情页面的url在section>ul>li>figure>a标签的href属性中。
图片的详情页
可以看到真正的图片的url是存在于img标签的src属性,只要我们拿到这个图片的地址就可以下载图片到本地了。
梳理一下逻辑:
- 请求latest,hot,toplist,random四个模块中的任意一个页面获取到缩略图的a标签里面的url,保存到一个列表里面
- 遍历缩略图列表,获取详情页img标签的src图片地址
- 请求图片地址,下载保存到本地
大概的逻辑就是这么简单
代码实现
导入相关包,定义全局变量
import os
import threading
import requests
from lxml import etree
"""
爬取网站:https://wallhaven.cc/
"""
# 伪装浏览器请求
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'