偶然發現https://wallhaven.cc/這個壁紙站的壁紙還不錯,尤其是更新比較頻繁,用python寫個腳本爬取
點latest,按照更新先後排序,獲得新地址,發現地址是分頁展示的,每一頁24張
本案例使用xpath爬蟲爬取數據,先分析網頁,使用瀏覽器查看元素工具,快速定位到圖片元素所在位置,且存在規律性
首先爬取一級頁面獲取圖片頁面地址(點了上圖箭頭的地址會打開圖片詳細頁,並非圖片真實地址),xpath提取數據的代碼如下
html = requests.get(url=url1, headers=headers, timeout=5.0).text data = etree.HTML(html) li_list = data.xpath('.//div[@id="thumbs"]//@href')
執行後爬取出一連串的地址信息
對裏面包含“latest”的地址進行剔除,這個地址非圖片地址,然後再循環請求圖片地址,獲取真實圖片地址
for li in li_list: if 'latest' in li: continue else: html_li = requests.get(url=li, headers=headers, timeout=5.0).text data = etree.HTML(html_li) li_add = data.xpath('//*[@id="wallpaper"]//@src') li_add = li_add[0] print(li_add)
執行後輸出真實圖片地址
把這些地址寫到一個txt文本內,然後通過迅雷去下載,效率會高一些,當然也可以爬取後執行使用python下載,單線程下蠻久的。先上保存到txt內的全部代碼
# -*- codeing = utf-8 -*- import requests from lxml import etree import time import random import time def getBZ(): url='https://wallhaven.cc/latest?page={}' # 翻頁10頁 for page in range(1, 10): headers = { # 'referer': 'https://wallhaven.cc/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36', } print(time.strftime("%H:%M:%S")) print("第{}頁".format(page)) url1 = url.format(page) print(url1) # 一級頁面請求 html = requests.get(url=url1, headers=headers).text data = etree.HTML(html) li_list = data.xpath('.//div[@id="thumbs"]//@href') for li in li_list: if 'latest' in li or 'top'in li: continue else: print(li) html_li = requests.get(url=li, headers=headers) print(html_li.status_code) if html_li.status_code == 404 or html_li.status_code == 429:#判斷,如果響應失敗跳過這次數據抓取 continue else: data = etree.HTML(html_li.text) li_add = data.xpath('//*[@id="wallpaper"]//@src') li_add = li_add[0] with open('1538.txt', 'a',encoding='utf-8') as w: w.write(li_add+'\n') w.close() b = random.randint(1,2)#隨機從1到2內取一個整數值 print("等待"+str(b)+"秒") time.sleep(b)#把隨機取出的整數值傳到等待函數中 getBZ()