Python爬蟲教你獲取4K超清桌布圖片,手把手教你跟我一起爬!
阿新 • • 發佈:2020-12-14
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理
以下文章來源於騰訊雲 作者:Python進階者
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )
/1 前言/
想要電腦換個桌布時都特別苦惱,因為百度搜到那些桌布也就是解析度達到了桌布的水準。可是裡面圖片的質量嘛,實在是不忍直視…。而有些4K高清的桌布大多是有版權的 ,這就使我們想要獲取高清的圖片,變得非常的困難。
wallhaven 網站是無版權的4K桌布 ,而且主題豐富(創意、攝影、人物、動漫、繪畫、視覺),今天教大家如何去批量的去下載wallhaven4K原圖。
/2 專案目標/
獲取對應的4K桌布,並批量下載儲存在資料夾。
/3 涉及的庫和網站/
軟體:PyCharm
需要用到的庫:requests、lxml、fake_useragent、time
先列出網址,如下所示:
https://wallhaven.cc/search?q=id%3A65348&page={}
網址city=%E5%B9%BF%E5%B7%9E指的是廣州這個城市、pn指的是頁數。
/4 專案分析/
滑動滑鼠觀察下一頁的網址的變化:
https://wallhaven.cc/search?q=id%3A65348&page=1 https://wallhaven.cc/search?q=id%3A65348&page=2 https://wallhaven.cc/search?q=id%3A65348&page=3
滑動下一頁時,每增加一頁page自增加1,用{}代替變換的變數,再用for迴圈遍歷這網址,實現多個網址請求。
/5 具體實現/
1、定義一個class類繼承object,定義init方法繼承self,主函式main繼承self。匯入需要的庫和網址。
import requests from lxml import etree from fake_useragent import UserAgentimport time class wallhaven(object): def __init__(self): self.url = "https://wallhaven.cc/search?q=id%3A65348&page={}" def main(self): pass if __name__ == '__main__': imageSpider = wallhaven() imageSpider.main()
2、fake_useragent模組實現隨機產生UserAgent。
ua = UserAgent(verify_ssl=False) for i in range(1, 50): self.headers = { 'User-Agent': ua.random, }
3、for迴圈實現多網址訪問。
startPage = int(input("起始頁:")) endPage = int(input("終止頁:")) for page in range(startPage, endPage + 1): url = self.url.format(page)
4、傳送請求 獲取響應。
'''傳送請求 獲取響應''' def get_page(self, url): res = requests.get(url=url, headers=self.headers) html = res.content.decode("utf-8") return html
5、解析一級頁面,得到二級頁面的 href 地址。
def parse_page(self, html): parse_html = etree.HTML(html) image_src_list = parse_html.xpath('//figure//a/@href')
6、遍歷二級頁面網址,發生請求、解析資料。找到相對於的圖片地址。
html1 = self.get_page(i) # 二級頁面發生請求 parse_html1 = etree.HTML(html1) # print(parse_html1) filename = parse_html1.xpath('//div[@class="scrollbox"]//img/@src') # print(filename)
7、獲取到的圖片地址,發生請求,儲存。
# 圖片地址發生請求 for img in filename: dirname = "./圖/" + img[32:] '''可修改圖片儲存的地址''' print(dirname) html2 = requests.get(url=img, headers=self.headers).content with open(dirname, 'wb') as f: f.write(html2) print("%s下載成功" % filename)
8、呼叫方法,實現功能。
html = self.get_page(url) self.parse_page(html) 優化:設定延時。(防止ip被封)。 time.sleep(1.4) """時間延時"""