開發與維運

python爬蟲分類和robots協議 | python爬蟲實戰之一

python概述

爬蟲一直是跟大數據關係比較密切的,大數據就是對海量數據處理的一些方式,包含對海量數據如何採集。以前對於數據的採集是通過日誌的方式來進行。而在現在的移動互聯時代,面對大量數據,我們如何去拿到我們想要的內容。靈感就來自於爬蟲。爬蟲在我們身邊一直存在,搜索引擎本身就屬於爬蟲。最早的搜索引擎就是數據庫關係建立的,隨著數據規模越來越大,發現僅依靠數據庫是不行的,搜索引擎誕生之後,發現數據太多了,而且為了迎合大眾,必須去不斷的收集這些信息。而實際上,最早遇到大數據難題的就是搜索引擎(雅虎、谷歌、百度等)。搜索引擎為了大量的自動化的去採集數據,所以編寫了爬蟲。

爬蟲,應該稱為網絡爬蟲,也叫網頁蜘蛛、網絡機器人、網絡螞蟻等。

搜索引擎,就是最早的網絡爬蟲的應用者。大多數網站提供的數據必須自動採集,大多數網站提供的內容也必須自動更新,這是它的主要工作內容。那對於爬出來的數據如何處理,存放在傳統的數據庫中是否合適,是否可以放在日誌中處理,存放多大的空間,在早期的時候處理海量數據是搜索引擎的難題。爬蟲只是解決了數據採集的難題,而數據如何存儲,數據如何處理,數據如何查詢這才是真正需要考慮的東西。

為什麼到了今天,反而這個詞彙被頻繁的提起呢?有搜索引擎不就夠了嗎?實際上,大數據時代的到了,所有的企業都希望通過海量數據發現其中的價值。所以,需要爬取對特定網站、特定類別的數據,而搜索引擎不能提供這樣的功能,因此,需要自己開發爬蟲來解決。

爬蟲分類

通用爬蟲

常見就是搜索引擎,無差別的收集數據、存儲,提取關鍵字,構建索引庫,給用戶提供搜索接口。
爬取一般流程
1、初始一批URL, 將這些URL放到待爬取隊列

2、從隊列取出這些URL, 通過DNS解析IP, 對IP對應的站點下載HTML頁面, 保存到本地服務器中, 爬取完的URL放到已爬取隊列。

在搜索引擎中有文字必須全部爬取,然後對這些文字進行處理,即建立索引,我們一般稱為倒排索引,其實就是通過索引來找文檔。我們對爬取的內容是什麼樣的形式並不關心,但是需要注意,中文與拉丁字母是不一樣的,中文中除了標點符號這些斷字斷句之外,語義上是不間斷的,與英文不一樣,不間斷即為一個單詞。中文必須要進行分詞處理。然後我們就可以下載這個html頁面了,即在瀏覽器中把拓撲樹解析了,所有的文本內容迭代出來,然後獲取得到。爬取的內容需要保存到本地服務器當中, 爬取完的URL放到已爬取隊列。

3、分析這些網頁內容, 找出網頁裡面的其他關心的URL鏈接, 繼續執行第2步, 直到爬取條件結束。

在URL裡面將鏈接提取出來之後,然後就能確定這個鏈接是指向哪個域名或者IP的,之後就可以進一步的將域名或者IP加入到待爬取隊列當中。待爬取隊列數據是在不斷增加的,對於爬蟲而言,則會不斷地去迭代待爬取隊列,對URL所對應的的內容進行提取,之後對內容進行存儲、歸檔、分析,判斷是否有新的URL鏈接,然後周而復始。

搜索引擎如何獲取一個新網站的URL

  • 新網站主動提交給搜索引擎
  • 通過其它網站頁面中設置的外鏈
  • 搜索引擎和DNS服務商合作, 獲取最新收錄的網站

聚焦爬蟲

有針對性的編寫特定領域數據的爬取程序,針對某些類別數據採集的爬蟲,是面向主題的爬蟲(爬取體育版的內容,娛樂版的內容)。

聚焦爬蟲的爬取流程跟通用爬蟲的爬取流程是一樣的。

Robots協議

指定一個robots.txt文件, 告訴爬蟲引擎什麼可以爬取。
我們以下面為例,截取部分做說明。
淘寶 http://www.taobao.com/robots.txt

image.png
image.png
image.png
image.png

User-agent在網站中是非常重要的,可以對用戶類別的分析,瀏覽器的分析等,對於爬蟲來講,需要告知是什麼類型的爬蟲,例如:Baiduspider則必須要遵守下面所描述的約定。允許爬取什麼內容,不允許爬取什麼內容,需要去遵守。

淘寶首頁所帶的搜索框是沒有爬蟲的搜索引擎,而是把所有商品的類目用來建立一個索引庫。

對於Googlebot相對可以爬取的內容就比較多一點。對於某些網站來講,是歡迎搜索引擎的。

Bingbot允許搜索的內容和Googlebot一樣。

Yahoo中可以爬取的內容相較於上面兩個而言,是比較少一點的。

User-Agent是其他的意思,其他搜索引擎是不允許爬取的。

我們再來看一下馬蜂窩的robots協議:
馬蜂窩:http://www.mafengwo.cn/robots.txt

image.png
image.png
image.png

User-agent:*代表通用。也就是說所有的搜索引擎都必須遵守下列的協議。
馬蜂窩上面所列都不允許去爬取。
其它爬蟲,不允許爬取

User-Agent:*
Disallow:/

如果需要知道網站的內容信息,需要去Sitemap查看。

在網站提供了友好的訪問方式的情況下,我們實際上是可以不去爬取那些不被允許爬取的內容的,但是如果站點信息並沒有提供,那麼我們可以根據robots來知道關鍵數據在哪(一般不建議)。

robots協議是一個君子協定,“爬亦有道”。

這個協議為了讓搜索引擎更有效率搜索自己內容, 提供瞭如Sitemap這樣的文件。這個文件禁止抓取的往往又是可能我們感興趣的內容,它反而洩露了這些地址。

配套視頻課程,點擊這裡查看

獲取更多資源請訂閱Python學習站

Leave a Reply

Your email address will not be published. Required fields are marked *