天天看點

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
python爬蟲分類和robots協定 | python爬蟲實戰之一
python爬蟲分類和robots協定 | python爬蟲實戰之一
python爬蟲分類和robots協定 | python爬蟲實戰之一
python爬蟲分類和robots協定 | python爬蟲實戰之一

User-agent

在網站中是非常重要的,可以對使用者類别的分析,浏覽器的分析等,對于爬蟲來講,需要告知是什麼類型的爬蟲,例如:

Baiduspider

則必須要遵守下面所描述的約定。允許爬取什麼内容,不允許爬取什麼内容,需要去遵守。

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

對于

Googlebot

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

Bingbot

允許搜尋的内容和

Googlebot

一樣。

Yahoo

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

User-Agent

是其他的意思,其他搜尋引擎是不允許爬取的。

我們再來看一下馬蜂窩的robots協定:

馬蜂窩:

http://www.mafengwo.cn/robots.txt
python爬蟲分類和robots協定 | python爬蟲實戰之一
python爬蟲分類和robots協定 | python爬蟲實戰之一
python爬蟲分類和robots協定 | python爬蟲實戰之一

User-agent:*

代表通用。也就是說所有的搜尋引擎都必須遵守下列的協定。

馬蜂窩上面所列都不允許去爬取。

其它爬蟲,不允許爬取

User-Agent:*
Disallow:/           

如果需要知道網站的内容資訊,需要去

Sitemap

檢視。

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

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

這個協定為了讓搜尋引擎更有效率搜尋自己内容, 提供了如Sitemap這樣的檔案。這個檔案禁止抓取的往往又是可能我們感興趣的内容,它反而洩露了這些位址。

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站