爬取热榜2k图片,爬虫入门即可
时间:2022-11-18 12:00:00
一、作品预览
二、图片示例
三:知己知彼(分析网页并保存在本地)
1.我们的目标网站是一个非常好的2k图片网站:https://wallhaven.cc/
2.我们的目标是它的热图:## 3.点击其中一张图片,发现它会跳转到其详细信息页面。详细信息页面的地址如下:
详情页如下及2k图片源地址如下:
4.知道如何获得一张图片,看看如何获得所有的图片。右键单击查看开发人员工具,发现每个页面都是一个section。section下有很多li每个图片详情页面的地址都存储在标签中。
5.点击小倒三角,收缩代码块,右键copy将代码复制到本地。
5.新建记事本,粘贴代码,将后缀名改为.html。
四、代码实操
1.导入相关库
import requests from lxml import etree import os
2.为存储图片的详细页面创建新列表
img_url_list=[]##存储图片详情页的地址
3.用lxml里的etree本地对象实例化
tree=etree.parse('./1.html',etree.HTMLParser())图片最后一次更新时间2022.03.25/wallhaven/toplist
4.获取页面列表
pag_list=tree.xpath('//*[@id="thumbs"]/section')#xpath定位到页面标签section,获取到section组成的列表
5.查看复制的页面总数
print(len(page_list))#section的个数,即刚才复制的页面的数量,显示60,说明共60页
6.定义count,记录已经下载的图片数量
count=1
7.分别对每一页的每张图片的详情页地址请求,获取详情页的代码,xpath提取图片真实url,并保存。(re正则表达提取也很简单,好兄弟们可以试试哦。)
for page in range(1,3):
li_list=page_list[page].xpath('./ul/li')
for li in li_list:
#分别对图片详情页请求之后实例化对象并且提取图片源地址
tree=etree.HTML(requests.get(url=li.xpath('./figure/a/@href')[0],headers=headers).text)
img_url=tree.xpath('//*[@id="wallpaper"]/@src')
#如果爬取到图片源地址
if img_url:
img_url=img_url[0]
img_url_list.append(tree.xpath('//*[@id="wallpaper"]/@src')[0])
#对源地址请求获取图片二进制形式
file=requests.get(img_url).content
file_name=img_url.split('-')[-1]
#文件夹不存在则新建
if 'wallhaven_toplist_2' not in os.listdir('./'):
os.makedirs('wallhaven_toplist_2')
#持久化存储
with open('./wallhaven_toplist_2/'+file_name,'wb') as f:
f.write(file)
print(f'第{
count}张图片下载完成'+img_url.split('-')[-1],'下载完成...')
count+=1