/1 前言/
上篇文章 手把手教你爬取天堂網1920*1080大圖片(批量下載)——理論篇我們談及了天堂網站圖片抓取的理論,這篇文章將針對上篇文章的未盡事宜進行完善,完成圖片的批量抓取。
/2 圖片網址解析/
1. 我們首先來分析一下這個圖片的地址在哪里。我們選擇圖片,然后右擊網頁檢查,可以看到圖片的路徑,如下圖所示。
2. 將其單獨放出來,如下圖所示。
3. 可以看到<a href>
就是圖片的鏈接,而src就圖片的地址,所以我們可以找它的上一級標簽<ul>
。如果再找不到那就再找上一級以此類推(找到越詳細內容更准確)。使用選擇器xpath,獲取到src的值(網址后綴)之后,將后綴加上“https前綴”就可以得到每一個網址,如下圖所示:
4. 之后嘗試運行,如下圖所示,可以獲取到具體的網址。
5. 我們再對這個網址進行請求(參考一個請求的方法)分析數據。
6. 我們以這個魚的圖片為例,點擊它來到二級頁面。
7. 右鍵檢查 可以看到我們要獲取的是src的地址,如下圖所示。
8. 獲取圖片的源碼,如下圖所示。
9. Xpath 獲取到路徑,為了方便區分圖片的名字,如下圖所示。
/3 下載圖片/
1. 為方便儲存,新建一個filename來作為保存的路徑,如下圖所示。
2. 也就是說你需要在Python代碼的同級目錄,提前新建一個文件夾,名叫“天堂網爬的圖片”,如果沒有這個文件夾的話,將會報下圖的錯。
3. 使用with函數進行文件的打開和寫入,下方代碼的含義是創建一個文件,代碼框里邊有具體的注釋。
"wb" # 意思是以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
"as f" # 意思是寫入一個叫f的文件。
"f.wirite(html)" # 意思是說把html的內容寫入f這個文件。
4. 下面是各個編碼代表的含義,可以學習一下。
5. 基於以上代碼,基本上就可實現批量下載。接下來,我們繼續優化一下。我們導入一個叫fake_useragent的庫 fake_useragent第三方庫,來實現隨機請求頭的設置。
fromfake_useragent import UserAgent
ua =UserAgent()
print(ua.ie) #隨機打印ie瀏覽器任意版本
print(ua.firefox)#隨機打印firefox瀏覽器任意版本
print(ua.chrome) #隨機打印chrome瀏覽器任意版本
print(ua.random) #隨機打印任意廠家的瀏覽器
6. 我們可以再初始化init方法,添加ua.random,讓它隨機的產生;其中UserAgent代碼如圖:(這里設置隨機產生50個挑選其中一個進行請求)
7. 最終實現的效果圖,終端顯示如下圖所示。
8. 將圖片自動下載到本地后的效果圖,高清的噢~
9. 至此,針對解析出來的圖片地址予以批量下載的任務已經完成,接下來自己可以開心的去瀏覽圖片啦。
10. 不建議大家爬取太多數據,這樣會給服務器增大負載,淺嘗輒止即可。
/4 小結/
本文基於理論篇,通過Python 中的爬蟲庫 requests 、lxml、fake_useragent,帶大家進行網頁結構的分析以及網頁圖片地址數據的提取,並且針對解析出來的圖片地址予以批量下載,方法行之有效,歡迎大家積極嘗試。
如果需要本文源碼的話,請在公眾號【Python爬蟲與數據挖掘】后台回復“高清圖片”四個字進行獲取,覺得不錯,記得給個star噢。
往期精彩文章推薦:
想學習更多Python網絡爬蟲與數據挖掘知識,可前往專業網站:http://pdcfighting.com/