項目地址:https://github.com/jrainlau/wallpaper-downloader
前言
好久沒有寫文章了,因為最近都在適應新的崗位,以及利用閑暇時間學習python。這篇文章是最近的一個python學習階段性總結,開發了一個爬蟲批量下載某壁紙網站的高清壁紙。
注意:本文所屬項目僅用于python學習,嚴禁作為其他用途使用!
初始化項目
項目使用了virtualenv來創建一個虛擬環境,避免污染全局。使用pip3直接下載即可:
pip3 install virtualenv
然后在合適的地方新建一個wallpaper-downloader目錄,使用virtualenv創建名為venv的虛擬環境:
virtualenv venv. venv/bin/activate
接下來創建依賴目錄:
echo bs4 lxml requests > requirements.txt
最后yun下載安裝依賴即可:
pip3 install -r requirements.txt
分析爬蟲工作步驟
為了簡單起見,我們直接進入分類為“aero”的壁紙列表頁:http://wallpaperswide.com/aer...。

可以看到,這一頁里面一共有10張可供下載的壁紙。但是由于這里顯示的都是縮略圖,作為壁紙來說清晰度是遠遠不夠的,所以我們需要進入壁紙詳情頁,去找到高清的下載鏈接。從第一張壁紙點進去,可以看到一個新的頁面:

因為我機器是Retina屏幕,所以我打算直接下載體積最大的那個以保證高清(紅圈所示體積)。
了解了具體的步驟以后,就是通過開發者工具找到對應的dom節點,提取相應的url即可,這個過程就不再展開了,讀者自行嘗試即可,下面進入編碼部分。
訪問頁面
新建一個download.py文件,然后引入兩個庫:
from bs4 import BeautifulSoupimport requests
接下來,編寫一個專門用于訪問url,然后返回頁面html的函數:
def visit_page(url): headers = {  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36' } r = requests.get(url, headers = headers) r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'lxml') return soup為了防止被網站反爬機制擊中,所以我們需要通過在header添加UA把爬蟲偽裝成正常的瀏覽器,然后指定utf-8編碼,最后返回字符串格式的html。
提取鏈接
在獲取了頁面的html以后,就需要提取這個頁面壁紙列表所對應的url了:
def get_paper_link(page): links = page.select('#content > div > ul > li > div > div a') collect = [] for link in links:  collect.append(link.get('href')) return collect            
新聞熱點
疑難解答