天天看點

手把手教你爬取天堂網1920*1080大圖檔(批量下載下傳)——實戰篇

/1 前言/

上篇文章我們談及了天堂網站圖檔抓取的理論,這篇文章将針對上篇文章的未盡事宜進行完善,完成圖檔的批量抓取。
           

/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,帶大家進行網頁結構的分析以及網頁圖檔位址資料的提取,并且針對解析出來的圖檔位址予以批量下載下傳,方法行之有效,歡迎大家積極嘗試。

如果需要本文源碼的話,請在公衆号背景回複“高清圖檔”四個字進行擷取,覺得不錯,記得給個star噢。
           

------------------- End -------------------

往期精彩文章推薦:

手把手用Python教你如何發現隐藏wifi

手把手教你用Python做個可視化的“剪刀石頭布”小遊戲

手把手教你使用Python批量建立複工證明