當前位置:成語大全網 - 書法字典 - 如何抓取全網1200 Python書籍

如何抓取全網1200 Python書籍

我寫過壹篇文章,是關於爬取市面上所有Python書籍的想法,也是我們數據分析系列講座的壹個小的實踐項目。上次沒寫完代碼,整個周末才有時間寫完,存到數據庫裏。今天給大家壹步步分析我是如何爬取數據,清理數據,繞過反爬蟲的壹些策略和記錄的。

1

目標網站分析-主頁抓取

1).市面上所有的Python書籍都在JD.COM、淘寶和豆瓣上,所以我選擇了豆瓣抓取。

2)分析網站的結構其實比較簡單。首先,有壹個包含所有python鏈接的主頁面,壹個***1388的書(其中超過100的書實際上是重復的),壹個***93的頁面顯示在網頁的底部。

3).這個頁面是靜態的,url頁面是有規律的,所以很容易構造所有的url地址。

4).爬蟲每壹頁的所有Python書籍和對應的URL,比如第壹頁的《笨辦法之書》,我們只需要提取標題和對應的URL。

2

單頁分析爬網

1).以上,我們從93頁中提取了所有Python書籍及其對應的URL。壹* *是93*15,大概是1300本書。首先,我們可以復制它們,然後我們可以用字典將它們保存在內存中,或者保存在csv文件中(有些學生可能會問,為什麽我們要將它們保存在文件中。

2).然後我們分析每壹頁書的特點:

上壹篇文章說我們需要分析:

作者/出版商/譯者/出版年份/頁數/定價/ISBN/評級/評估號

看網站源代碼,發現主要信息在div id="info "和div class="rating_self clearfix "中。

3).這部分的數據清理比較麻煩,因為不是每本書都有書評和評分系統,也不是每本書都有作者,有頁碼,有價格,所以提取的時候需要處理異常,比如有的頁碼長這樣:

原始數據收集過程中有許多不壹致的數據:

書籍的日期表示有多種格式:

有些書的日期是:‘2007年9月’,‘2007年10月22日’,‘2065 438+07-9’,‘2065 438+07-8-25’。

有些書的價格沒有統壹的貨幣單位,有美元、日元、歐元、人民幣。

比如:CNY 49.00,135,19?,4320日元,65438美元+076.00日元

多線程爬行

1).有同學在後臺問我,妳是用scrappy框架還是自己做?這個項目是我自己寫的。事實上,scrapy是壹個很棒的框架。如果我抓取幾十萬個數據,我肯定會用這個特殊的武器。

2).我用的是多線程抓取,把所有的URL都扔到壹個隊列裏,然後設置幾個線程在隊列裏連續抓取,然後循環,直到處理完隊列裏所有的URL。

3).數據存儲有兩種思路:

壹種是直接將爬取的數據保存到SQL數據庫中,然後每次直接查詢數據庫中是否有新的url。如果有就跳過,沒有網址就抓取。

另壹種是保存在CSV文件中。因為它是多線程的,所以必須受到保護。否則幾個線程同時寫壹個文件就會出現問題。寫壹個CSV文件也可以轉換成數據庫,保存為CSV文件還有壹個好處,可以轉換成熊貓,非常方便處理和分析。

反爬行動物策略

1).壹般大型網站都有反爬蟲策略。雖然我們這次爬的書只有1000,但是還是會遇到反爬蟲的問題。

2)有很多方法可以繞過反爬蟲策略。有時會增加時延(特別是多線程的時候),有時會使用cookies,有些人可以代理,特別是大規模的抓取壹定要使用代理池。我這裏用的是cookie加延時,比較土的方法。

3)在斷點處恢復傳輸。雖然我的數據量不是很大,1000塊的規模,但是我建議增加斷點續傳的功能,因為妳不知道爬坡的時候會發生什麽。雖然可以遞歸爬,但是如果爬了800多塊,程序掛了,妳的東西保存也沒用了,下次就要重新開始爬了,會吐血的(聰明的同學壹定猜到我會停留在上面的第二步)

代碼概述

1).我還沒有完全優化整個代碼架構。目前有六個py文件,後面我會進壹步優化打包。

Spider_main:主要抓取所有93頁的書的鏈接和寫法,多線程。

Book_html_parser:主要抓取每本書的信息。

Url_manager:主要管理所有的Url鏈接。

Db_manager:主要指數據庫的訪問和查詢。

Util:是壹個保存壹些全局信息的變量。

驗證:這是我內部測試代碼的壹個小程序。

2).主搜索結果的存儲

All_books_link.csv:主要存儲1200多本書的網址和書名。

Python_books.csv:主要存儲每本具體書籍的信息。

3).使用的庫

爬蟲部分:使用請求,beautifulSoup。

數據清洗:大量使用正則表達式和集合模塊,書的出版日期使用datetime和calendar模塊。

多線程:使用了線程模塊和隊列。

結論:

好了,今天全網的Python書籍和爬蟲分析到此為止。基本上整個項目的技術點我們都談過了。爬蟲還是很有意思的,但是要成為爬蟲大師還是有很多地方需要學習的。寫壹個爬行速度快且穩定的爬蟲,繞過反爬蟲系統,並不容易。有興趣的朋友也可以自己寫。源代碼等數據分析文章寫完了,我會放到github上。如有問題,歡迎留言討論。