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上。如有問題,歡迎留言討論。