1. 程式人生 > 實用技巧 >Python爬取優質高清桌布網站:彼岸

Python爬取優質高清桌布網站:彼岸


基本開發環境

·Python 3.6

·Pycharm


模組使用

網頁分析

1.檢視桌布詳情頁內容 開啟開發者工具就可以看到桌布的地址以及桌布的名字了

複製桌布地址

詳情頁中的圖片地址就是高清圖片地址了

2.獲取每張桌布頁的url

如上圖所示,所有的桌布詳情頁地址都包含在li標籤中。

綜上所述:

1、請求列表頁,解析網頁資料獲取每張桌布的詳情頁url,拼接url地址;

2、請求詳情頁,解析網頁資料獲取每張桌布的圖片url地址以及標題

3、請求圖片url地址,儲存桌布

儲存資料的時候會有一個坑:

在請求圖片url地址的時候們要加上圖片cokkie,如果你不加cookie,儲存下來的圖片是破損的,所以需要兩個headers,一個是獲取url地址的嗎,一個是儲存圖片資料的。

程式碼如下:

import requests
import threding
import concurrent.futures

headers = {
    'Cookie': '__cfduid=d06f453df5c4252eb0aac3e9280e5b0b01606983134; Hm_lvt_14b14198b6e26157b7eba06b390ab763=1606983135; xygkqecookieinforecord=%2C12-23053%2C; Hm_lpvt_14b14198b6e26157b7eba06b390ab763=1606984094',
    'Host': 'www.netbian.com
', 'Referer': 'http://www.netbian.com/1920x1080/index.htm', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36', } headers1 = { 'Cookie': 'Hm_lvt_14b14198b6e26157b7eba06b390ab763=1590498708; __cfduid=d7b17b08368a78ab8d8d6a42d580c62f01606985472
', 'Host': 'img.netbian.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400', } def get_response(html_url): """ 獲取網頁原始碼 :param html_url: :return: """ response = requests.get(url=html_url, headers=headers) return response def get_response1(html_url): """ 獲取網頁原始碼 (儲存桌布) :param html_url: :return: """ response = requests.get(url=html_url, headers=headers1) return response def get_parsing(html_data): """ 解析函式 :param html_data: :return: """ selector = parsel.Selector(html_data) return selector def save(img_url, name): """ 儲存資料 :param img_url: :param name: :return: """ filename = 'img\\' + name + '.jpg' img_content = get_response1(img_url).content with open(filename, mode='wb') as f: f.write(img_content) print('正在儲存:', name) print(img_url) def get_img_url(page_url): """ 獲取圖片地址 以及 標題 :param page_url: :return: """ response = get_response(page_url) response.encoding = response.apparent_encoding selector = get_parsing(response.text) img_url = selector.css('.pic a img::attr(src)').get() name = selector.css('.pic a img::attr(title)').get() save(img_url, name) def main(url): """ 主函式 :param url: :return: """ response = get_response(url) response.encoding = response.apparent_encoding selector = get_parsing(response.text) lis = selector.css('.list ul li a::attr(href)').getall() lis.pop(2) lis.pop(2) for li in lis: page_url = 'http://www.netbian.com' + li get_img_url(page_url) if __name__ == '__main__': executor = concurrent.futures.ThreadPoolExecutor(max_workers=5) for page in range(2, 50): url = 'http://www.netbian.com/1920x1080/index_{}.htm'.format(page) executor.submit(main, url) executor.shutdown()