目录
一、前端结构
为get请求,携带参数如下:
随page参数变化网页变化
需要在整张页面中进入:
//section[@class="thumb-listing-page"]//li/figure/a/@href
进入后获取图片src:
//section[@class="fit"]/div[@class="scrollbox"]/img/@src
共92页
二、代码
#爬取wallhaven 4k类的所有图片
import requests
import chardet
from lxml import etree
url='https://wallhaven.cc/search?'
headers={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47'
}
total_img_url_list=[]
for pageNum in range(1,3):#爬取两页作为示例
params={
'q': 'id:65348',
'sorting': 'random',
'ref': 'fp',
'seed': 'dHtqFi',
'page': pageNum,
}
resp=requests.get(url=url,headers=headers,params=params)
encoding=chardet.detect(resp.content)['encoding']
#print(encoding)
resp.encoding=encoding
page_text1=resp.text
tree1=etree.HTML(page_text1)
img_url_list=tree1.xpath('//section[@class="thumb-listing-page"]//li/figure/a/@href')
total_img_url_list+=img_url_list
#print(src_list)
for img_src_url in total_img_url_list:
resp=requests.get(url=img_src_url,headers=headers)
encoding=chardet.detect(resp.content)['encoding']
resp.encoding=encoding
page_text2=resp.text
tree2=etree.HTML(page_text2)
img_url=tree2.xpath('//section[@class="fit"]/div[@class="scrollbox"]/img/@src')
img_name = img_url[0].split('/')[-1]
with open (
'D:\\Programming\\Microsoft VS Code Data\\WebCrawler\\data\\img_wallhaven\\'+img_name,
'wb'
) as fp:
img=requests.get(url=img_url[0],headers=headers)
fp.write(img.content)
print(img_url,'爬取成功!')
print('爬取结束!!!')
可加快爬取速度的方式:
使用多线程或异步请求:可以考虑使用多线程或异步请求库,如
concurrent.futures
、asyncio
、aiohttp
等,同时发送多个请求,从而加快爬取速度。并行下载图片:可以考虑将图片下载的部分放入异步任务中,实现并行下载多张图片,提高下载速度。
但是还不会