歡迎光臨
每天分享高質量文章

爬蟲實戰一:爬取噹噹網所有 Python 書籍

我們已經學習 urllib、re、BeautifulSoup 這三個庫的用法。但只是停留在理論層面上,還需實踐來檢驗學習成果。因此,本文主要講解如何利用我們剛纔的幾個庫去實戰。

1 確定爬取標的

任何網站皆可爬取,就看你要不要爬取而已。本次選取的爬取標的是噹噹網,爬取內容是 以 Python 為關鍵字搜索出來的頁面中所有書籍的信息。具體如下圖所示:

本次爬取結果有三項:

  • 圖書的封面圖片

  • 圖書的書名

  • 圖書的鏈接頁面

最後把這三項內容儲存到 csv 檔案中。

2 爬取過程

總所周知,每個站點的頁面 DOM 樹是不一樣的。所以我們需要先對爬取頁面進行分析,再確定自己要獲取的內容,再定義程式爬取內容的規則。

2.1 確定 URL 地址

我們可以通過利用瀏覽器來確定URL 地址,為 urllib 發起請求提供入口地址。接下來,我們就一步步來確定請求地址。

搜索結果頁面為 1 時,URL 地址如下:

搜索結果頁面為 3 時,URL 地址如下:

索結果頁面為 21 時,即最後一頁,URL 地址如下:

從上面的圖片中,我們發現 URL 地址的差異就在於 page_index 的值,所以 URL 地址最終為 http://search.dangdang.com/?key=python&act;=input&show;=big&page;_index=。而 page_index  的值,我們可以通過迴圈依次在地址後面添加。因此, urllib 請求代碼可以這樣寫:

2.2 確定爬取節點

有了 URL 地址,就能使用 urllib 獲取到頁面的 html 內容。到了這步,我們就需要找到爬取的節點的規則,以便於 BeautifulSoup 地解析。為了搞定這個問題,就要祭出大招 —— Chrome 瀏覽器的開發者功能(按下 F12 鍵就能啟動)。我們按下 F12 鍵盤,依次對每本書進行元素檢查(在頁面使用滑鼠右鍵,點擊“檢查”即可),具體結果如下:

從上圖可以得知解析規則:每本書的節點是一個 a 標簽,a 標簽具有 title,href,子標簽 img 的 src 三個屬性,這三者分別對應書名、書的鏈接頁面、書的封圖。看到這裡也需你不會小激動,感嘆這不就是我們要感興趣的內容嗎?得到解析規則,編寫BeautifulSoup 解析代碼就有了思路,具體代碼如下:

運行結果如下:

這證明剛纔制定規則是正確爬取我們所需的內容。

2.3 儲存爬取信息

我寫爬蟲程式有個習慣,就是每次都會爬取內容持久化到檔案中。這樣方便以後查看使用。如果爬取資料量比較大,我們可以用其做資料分析。我這裡為了方便,就將資料儲存到 csv 檔案中。用 Python 將資料寫到檔案中,我們經常中文亂碼問題所煩惱。如果單純使用 csv 庫,可能擺脫不了這煩惱。所以我們將 csv 和 codecs 結合一起使用。在寫資料到 csv 檔案的時候,我們可以通過指定檔案編碼。這樣中文亂碼問題就迎刃而解。具體代碼如下:

看到這裡,你可能會問為什麼不把編碼指定為 gb2312 呢,這樣用 ecxel 打開就不會亂碼了?原因是當書名全部為英文單詞時,使用 gb2312 編碼,writer.writerow()會出現編碼錯誤的問題。

如果你要用 excel 打開 PythonBook.csv檔案, 你則需多執行下麵幾步:

  1. 打開 Excel

  2. 執行“資料”->“自文本”

  3. 選擇 CSV 檔案,出現文本匯入嚮導

  4. 選擇“分隔符號”,下一步

  5. 勾選“逗號”,去掉“ Tab 鍵”,下一步,完成

  6. 在“匯入資料”對話框里,直接點確定

3 爬取結果

最後,我們將上面代碼整合起來即可。這裡就不把代碼貼出來了,具體閱讀原文即可查看原始碼。我就把爬取結果截下圖:

4 寫在最後

這次實戰算是結束了,但是我們不能簡單地滿足,看下程式是否有優化的地方。我把該程式不足的地方寫出來。

  • 該程式是單執行緒,沒有使用多執行緒,執行效率不夠高。

  • 沒有應用面向物件編程思想,程式的可擴展性不高。

  • 沒有使用隨機 User-Agent 和 代理,容易被封 IP。

作者:猴哥Yuri
來源:http://www.jianshu.com/p/dd17437053e5


————廣告時間————


馬哥教育2018年Python自動化運維開發實戰面授班2018年3月5號開班,馬哥聯合BAT、豆瓣等一線互聯網Python開發達人,根據目前企業需求的Python開發人才進行了深度定製,加入了大量一線互聯網公司:大眾點評、餓了麽、騰訊等生產環境真是專案,課程由淺入深,從Python基礎到Python高級,讓你融匯貫通Python基礎理論,手把手教學讓你具備Python自動化開發需要的前端界面開發、Web框架、大監控系統、CMDB系統、認證堡壘機、自動化流程平臺六大實戰能力,讓你從0開始蛻變成Hold住年薪20萬的Python自動化開發人才

掃描二維碼領取學習資料

更多Python好文請點擊【閱讀原文】哦

↓↓↓

赞(0)

分享創造快樂