1. 程式人生 > 實用技巧 >urllib.request模組(4):分析Robots協議

urllib.request模組(4):分析Robots協議

1.Robots協議

robots協議_百度百科 (baidu.com)

User-agent描述了搜尋爬蟲的名稱,將其設定為*則代表該協議對任何爬蟲都有效。

Disallow指定了不允許抓取的目錄。Allow一般和Disallow一起使用,用來排除某些限制。

#禁止所有爬蟲訪問任何目錄
User-agent:*
Disallow:/

#允許所有爬蟲訪問任何目錄
User-agent:*
Disallow:
#也可以把robots.txt留空

#禁止所有爬蟲訪問網站某些目錄的程式碼
User-agent:*
Disallow:/private/
Disallow:/tmp/

#只允許某一個爬蟲訪問
User-agent:WebCrawler Disallow: User-agent:* Disallow:/

2.robotparser模組

用法只需要在構造方法裡面傳入robots.txt的連結。

宣告:

urllib.robotparser.RobotFileParser(url='')

也可以在宣告時不傳入,預設為空。

這個類的常用方法:

set_url():用來設定robots.txt檔案的連結。

read():讀取robots.txt檔案進行分析,執行一個讀取和分析的操作。如果不呼叫這個方法,接下來的判斷都會為False。

parse():用來解析robots.txt檔案,傳入的引數是robots.txt的某些行的內容,它會按照robots.txt的語法規則分析這些內容。

can_fetch():傳入兩個引數,User-agent和要抓取的URL,它將會判斷該搜尋引擎能否抓取這個URL,返回False或True。

mtime():返回上次抓取和分析robots.txt的時間。定期檢查抓取最新的robots.txt。

modified():將當前時間設定為上次抓取和分析robots.txt的時間。

使用read()方法。

程式碼:

from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url("http://www.python.org/robots.txt")
#或者直接在宣告時設定 #rp = RobotFileParser("http://www.python.org/robots.txt") rp.read() print(rp.can_fetch("*", "http://www.python.org/downloads/")) print(rp.can_fetch("*", "http://www.python.org/webstats/"))

執行結果:輸出

True

False

使用parse()方法進行讀取和分析。

程式碼:

from urllib.robotparser import RobotFileParser
from urllib.request import urlopen

rp = RobotFileParser()
rp.parse(urlopen('http://www.python.org/robots.txt').read().decode('utf-8').split('\n'))
print(rp.can_fetch("*", "http://www.python.org/downloads/"))
print(rp.can_fetch("*", "http://www.python.org/webstats/"))

執行結果:同上

參考用書《python3網路爬蟲開發實戰》