urllib.request模組(4):分析Robots協議
阿新 • • 發佈:2020-12-05
1.Robots協議
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網路爬蟲開發實戰》