第二章 爬蟲的基本常識
2.1 爬蟲的合法性問題
目前還處於不明確的蠻荒階段,“允許哪些行為”這種基本秩序還處於建設中。
至少目前來看,如果抓取的數據為個人所用,則不存在問題;如果數據用於轉載,那麼
抓取數據的類型就很重要了:一般來說,當抓取的數據是實現生活中的真實數據(比如,營業地址,電話清單)時,是允許轉載的,但是,如果是原創數據(比如,意見或評論),通常就會受到版權限制,而不能轉載。
討論:百度爬蟲抓取數據行為的合法性問題。
**注意:不管怎麼樣,作為一個訪客,應當約束自己的抓取行為,這就是說要求下載請求的速度需要限定在一個合理值之內,並且還需要設定一個專屬的用戶代理來標識自己。
2.2 爬蟲的準備工作:網站的背景調研
網站的背景調研對聚焦的網絡爬蟲而言至關重要,正所謂:知己知彼,百戰不殆。
2.2.1 robots協議
Robots協議(也稱為爬蟲協議、機器人協議等)的全稱是“網絡爬蟲排除標準”(Robots Exclusion Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。
比如:
淘寶網:https://www.taobao.com/robots.txt
騰訊網:http://www.qq.com/robots.txt
再比如:
https://www.douban.com/robots.txt
http://www.mafengwo.cn/robots.txt
搜索引擎和DNS解析服務商(如DNSPod等)合作,新網站域名將被迅速抓取。但是搜索引擎蜘蛛的爬行是被輸入了一定的規則的,它需要遵從一些命令或文件的內容,如標註為nofollow的鏈接,或者是Robots協議。另外一種則是,通過網站的站長主動對搜索引擎提交網站的網址,搜索引擎則會在接下來派出“蜘蛛”,對該網站進行爬取。
2.2.2 網站地圖sitemap
sitemap是一個網站所有鏈接的容器。很多網站的連接層次比較深,蜘蛛很難抓取到,網站地圖可以方便搜索引擎蜘蛛抓取網站頁面,通過抓取網站頁面,清晰瞭解網站的架構,網站地圖一般存放在根目錄下並命名為sitemap,為搜索引擎蜘蛛指路,增加網站重要內容頁面的收錄。網站地圖就是根據網站的結構、框架、內容,生成的導航網頁文件。大多數人都知道網站地圖對於提高用戶體驗有好處:它們為網站訪問者指明方向,並幫助迷失的訪問者找到他們想看的頁面。
\t例子:http://www.mafengwo.cn/sitemapIndex.xml
\t
網站地圖sitemap有兩種形式:
A.HTML:稱為HTML版本的網站地圖,英文是sitemap,特質HTML版網站地圖,這個版本的網站地圖就是用戶可以在網站上看到的,列出網站上所有主要頁面的鏈接的頁面。對小網站來說,甚至可以列出整個網站的所有頁面,對於具有規模的網站來說,一個網站地圖不可能羅列所有的頁面鏈接,可以採取兩種辦法,一種辦法是網站地圖只列出網站最主要的鏈接,如一級分類,二級分類,第二種辦法是將網站地圖分成幾個文件,主網站地圖列出通往次級網站的鏈接,次級網站地圖在列出一部分頁面鏈接。
B.XML:XML版本的網站地圖是由Google首先提出的,怎麼區分了,上面所說的HTML版本的s是小寫的,而XML版本的S則是大寫的,XML版本的網站地圖是由XML標籤組成的,文件本身必須是utf8編碼,網站地圖文件實際上就是列出網站需要被收錄的頁面的URL,最簡單的網站地圖可以是一個純文本件,文件只要列出頁面的URL,一行列一個URL,搜索引擎就能抓取並理解文件內容。
可以使用這個網站工具來生成某網站的sitemap: www.sitemap-xml.org
2.2.3 估算網站的大小
可以使用搜索引擎來做,比如在百度中使用site:
說明:這裡只是通過百度搜索引擎大致來估算網站的大小,受到網站本身對搜索引擎爬蟲的限制,及搜索引擎本身爬取數據技術的限制,所以這只是一個經驗值,可以作為估算網站體量量級的一個經驗值。
注:百度只能做一級頁面的統計,Google可以做二級頁面的統計。
2.2.4 識別網站用了何種技術
為了更好的瞭解網站,抓取該網站的信息,我們可以先了解一下該網站大致所使用的技術架構。
安裝builtwith :
Windows: pip install bulitwith
Linux: sudo pip install builtwith
使用:在Python交互環境下,輸入:
import builtwith
builtwith.parse("http://www.sina.com.cn")
2.2.5 尋找網站的所有者
有時候,我們需要知道網站的所有者是誰,這裡在技術上有個簡單的方法可以參考。
安裝python-whois :
Windows: pip install python-whois
使用:在Python交互環境下,輸入:
import whois
whois.whois("http://www.sina.com.cn")
閱讀更多 小悅 的文章