robots 協議也稱作爬蟲協議、機械人協議,它的全名叫作網路爬蟲排除標準( robots exclusion
protocol ),用來告訴爬蟲和搜尋引擎哪些頁面可以抓取,哪些不可以抓取。它通常是乙個叫作robots .txt
的文字檔案,一般放在**的根目錄下。
當搜尋』爬蟲訪問乙個站點時,它首先會檢查這個站點根目錄下是否存在rob ots.txt 檔案,如果存在,
搜尋爬蟲會根據其中定義的爬取範圍來爬取。如果沒有找到這個檔案,搜尋爬蟲便會訪問所有可直接
訪問的頁面。
下面我們看乙個robots.txt 的樣例:
user-agent: *
disallow: /
allow: /public/
了解robots 協議之後,我們就可以使用ro bot parser 模組來解析robots.txt 了。該模組提供了乙個
類robotfileparser ,它可以根據某**的robots.txt 檔案來判斷乙個爬取爬蟲是否有許可權來爬取這個
網頁。該類用起來非常簡單,只需要在構造方法裡傳人robots.txt 的鏈結即可。首先看一下它的宣告:
urllib.robotparser.robotfileparser(url =』 』)
當然,也可以在宣告時不傳人,預設為空,最後再使用set_url ()方法設定一下也可。
下面列刷了這個類常用的幾個方法。
口set_url (): 用來設定ro bots . txt 檔案的鏈結。如果在建立robotfileparser 物件時傳入了鏈
接,那麼就不需要再使用這個方法設定了。
口read (): 讀取robots .txt 檔案並進行分析。注意,這個方法執行乙個讀取和分析操作,如果不
呼叫這個方法, 接下來的判斷都會為false ,所以一定記得呼叫這個方法。這個方法不會返
回任何內容,但是執行了讀取操作。
口parse (): 用來解析ro bot s. txt 檔案,傳人的引數是robots . txt 某些行的內容,它會按照robots . txt
的語法規則來分析這些內容。
口can_fetch (): 該方法傳人兩個引數, 第乙個是use r-age nt ,第二個是要抓取的url 。返回的
內容是該搜尋引擎是否可以抓取這個url ,返回結果是true 或false a
口mtime (): 返回的是上次抓取和分析robots.txt 的時間,這對於長時間分析和抓取的搜尋爬蟲是
很有必要的,你可能需要定期檢查來抓取最新的robots.txt 。
口modified () :它同樣對長時間分析和抓取的搜尋爬蟲很有幫助,將當前時間設定為上次抓取
和分析robots.txt 的時間。這裡同樣可以使用parse ()方法執行讀取和分析,示例如下:
from urllib.robotpar ser impor t robotfileparser
from urllib.request import urlopen
rp = robotf i leparser()
rp . parse(u 巾p en ( 』 http://www . jia n s h u . com/robots . txt 』 ) . read() . decode (』 utf-8').split (』陽』))
print (rp. can_ fetc h ( ' 本』 ,' h ttp: u .com / p /b6755402sd7d 』))
print(rp . can_fetch ('*' , 咱ttp://www . jia 「1shu. com/search 問= python&page=l&type=collections '』))
執行結果一樣:
true
false
本節介紹了rob otpar ser 模組的基本用法和例項,利用它,我們可以方便地判斷哪些頁面可以抓
取,哪些頁面不可以抓取。
urllib模組的使用
urllib.request.urlopen url,data none,timeout,cafile none,capath none,cadefault false,context none 直接用urllib.request模組的urlopen 獲取頁面,page的資料資料格式為bytes型別...
urllib模組的使用
url 需要開啟的 data post提交的資料 timeout 設定 的訪問超時時間 直接用urllib.request模組的urlopen 獲取頁面,page的資料格式為bytes型別,需要decode 解碼,轉換成str型別。1 from urllib import request 2 res...
Urllib的使用(一)
1,使用urllib爬取網頁眉先需要匯入對應的模組 import urllib.requestfile urllib.request.urlopean 3,讀取網頁內容 data file.read 讀取檔案的全部內容,與readlines不同的是,read會把讀取到的內容賦給乙個字串變數 data...