起因: 因爲要做和圖像識別有關的東西,需要很多的圖片,但我這個人很懶,又不想自己動手找。於是乎,我就打起了爬蟲的主意。我開始找網上的各種爬蟲教程和一些經典案例,但是我沒有找到一個即簡單又完整的爬蟲程序。沒辦法,我只有自己動手啦。如果你和我一樣,想快速學會爬蟲,編寫出易於理解、完整且簡單的小爬,你可以繼續往下看看。
準備工作:
1、爬取的網站:wallhaven:https://wallhaven.cc/ 【該網站的圖片高清幽美、令人讚歎,兩個字"極好"】
類似於下面這張圖,是不是還不錯?
2、涉及到的學習內容
編寫語言:python 【附上官網教程】
python包:
(1)BeautifulSoup:BeautifulSoup4和 lxml 一樣,Beautiful Soup 也是一個HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 數據。
(2)requests:作爲用戶角色,請求頁面。
分析爬取內容:
1、分析主頁面
主界面可以使用搜索,若想篩選出有霧的圖像,可直接在搜索框中查找"FOG"
跳轉頁面後觀察規律,url = https://wallhaven.cc/search?q=FOG&page=%s"%(i)是這樣的。q是查詢的參數,page表示第幾頁。
2、分析源代碼的形式
目的很明確,需要高清的圖片,因此,需要點擊對應的圖片,跳轉到高清的圖片頁面中,然後再提取高清圖片。
3、獲取代理對象
User-Agent:通過Headers找到。
下面通過具體的代碼,來解釋整個流程。
from bs4 import BeautifulSoup
import requests
#用戶代理,作爲用戶的角色訪問網站
gHeads = {
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36"
}
#整個for循環用於控制圖片展示頁面(第幾頁)
for i in range(5,20):
url = "https://wallhaven.cc/search?q=FOG&page=%s"%(i)
print(url)
html = requests.get(url,headers=gHeads)#請求頁面
html = html.content#獲取源碼
soup = BeautifulSoup(html, 'lxml')#對界面進行解析
href_all = soup.find_all( 'a',{"class": "preview"})#找到對應的a,且其class=preview
for href in href_all:#打開高清圖片的新頁面
href_url = href['href']#找到對應的href屬性值
#重複上述的源碼獲取和頁面解析
html4 = requests.get(href_url,headers=gHeads).content
soup4 = BeautifulSoup(html4, 'lxml')
img4 = soup4.find( 'img',{"id": "wallpaper"})#找到img標籤,且id = wallpaper
urlimg = img4['data-cfsrc'] #獲取屬性值
#將圖片下載到本地
r = requests.get(urlimg, stream=True)
image_name = urlimg.split('/')[-1]#獲取圖片名
with open('F:/Image/%s' % image_name, 'wb') as f:#Image文件必須存在
for chunk in r.iter_content(chunk_size=128):
f.write(chunk)
print('Saved %s' % image_name)
print("end.....................")
部分結果展示:
上面的過程較爲簡單,建議小夥伴們先測試一下,看效果,然後一步一步來理解。
若是有不理解的地方,可以在下方留言,我看到後會及時回覆的。有問題咱一起解決,共同進步。