目录
为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
等,同时发送多个请求,从而加快爬取速度。并行下载图片:可以考虑将图片下载的部分放入异步任务中,实现并行下载多张图片,提高下载速度。
但是还不会