13161216443

您所在位置: 首頁> 學習課程> 河南python培訓班 | 小白 Python爬蟲:urllib 基礎使用(五)

河南python培訓班 | 小白 Python爬蟲:urllib 基礎使用(五)

發布百知教育 來源:學習課程 2019-12-06

前面幾篇 urllib 的基礎介紹,分別介紹了 urllib 的處理 URL 的模塊,還剩最后一個 robotparser 模塊未做介紹,本篇文章來簡單的聊聊 robotparser 。

Robotparser 從命名上來看,好像是說機器人,實際上這里的機器人指的是爬蟲。

在說 Robotparser 之前,我們先介紹一個概念:Robots協議。

Robots 協議

Robots 協議也稱作爬蟲協議、機器人協議,它的全名叫作網絡爬蟲排除標準(Robots Exclusion Protocol)。

Robots 協議通常會保存在一個叫做 robots.txt 的文本文件中,該文件一般位于網站的跟目錄中。

這個文件中記載了該網站哪些目錄允許爬取,哪些目錄不允許爬取。

雖然這個文件并不是強制生效的,但是各位同學最好可以遵循此文件定義的爬取規則。

最近很多搞爬蟲的公司都進去了,各位同學一定引以為戒,做一位知法守法的好公民。

我們來看一下淘寶的 Robots 協議,一起了解下 Robots 協議的語法規則:

以下 robots.txt 內容來源:https://www.taobao.com/robots.txt ,由于內容過多,僅截取部分內容。

User-agent:  Baiduspider
Allow:  /article
Allow:  /oshtml
Allow:  /ershou
Allow: /$
Disallow:  /product/
Disallow:  /

User-Agent:  Googlebot
Allow:  /article
Allow:  /oshtml
Allow:  /product
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Allow:  /ershou
Allow: /$
Disallow:  /

......

可以看到,一個 robots.txt 總共分為三個部分:

  • User-Agent:描述了搜索爬蟲的名稱,如果設置為 * 則代表對所有爬蟲生效。

  • Allow:指定了云訊爬取的目錄。

  • Disallow:指定了不允許爬取的目錄,一般和 Allow 配合使用。

比如上面的這個 Robots 協議,其中的內容定義了百度爬蟲和谷歌爬蟲的爬取規則,其中對百度爬蟲定義了的可爬取路徑有 /article 、 /oshtml 、 /ershou 、 /$ ,不可爬取的路徑有 /product/ 和 / 目錄。

各位同學可能會有疑問,爬蟲的名字是哪來的呢?

這個小編也不清楚,就當做一些固定用法吧,下表列出一些常見的爬蟲名稱:


python培訓班



robotparser

官方文檔:https://docs.python.org/zh-cn/3.7/library/urllib.robotparser.html

在了解了什么是 Robots 協議之后,我們可以使用 robotparser 來解析 Robots 協議。

該模塊提供了一個類 RobotFileParser 它可以根據某網站的 robots.txt 文件來判斷一個爬取爬蟲是否有權限來爬取這個網站的某個路徑。

首先我們看一下這個類的聲明:

urllib.robotparser.RobotFileParser(url='')

看起來很簡單,只需要在構造方法中傳入 robots.txt 的路徑即可。

接下來我們來看下這個類所具有的方法:

  • set_url(url):如果在聲明 RobotFileParser 的時候沒有傳入 robots.txt 的路徑,可以調用這個方法傳入 robots.txt 的路徑。

  • read():讀取 robots.txt 文件并進行分析。注意,這個方法執行一個讀取和分析操作,如果不調用這個方法,接下來的判斷都會為 False ,所以一定記得調用這個方法。這個方法不會返回任何內容,但是執行了讀取操作。

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

  • can_fetch(useragent, url):該方法傳入兩個參數,第一個是 User-agent ,第二個是要抓取的 URL 。返回的內容是該搜索引擎是否可以抓取這個 URL ,返回結果是 True 或 False 。

  • mtime():返回的是上次抓取和分析 robots.txt 的時間,這對于長時間分析和抓取的搜索爬蟲是很有必要的,你可能需要定期檢查來抓取最新的 robots.txt 。

  • modified():它同樣對長時間分析和抓取的搜索爬蟲很有幫助,將當前時間設置為上次抓取和分析 robots.txt 的時間。

  • crawl_delay(useragent):從 robots.txt 返回有關用戶代理的抓取延遲參數的值。如果沒有這樣的參數,或者該參數不適用于指定的用戶代理,或者該參數的 robots.txt 條目的語法無效,則返回 None 。

  • request_rate(useragent):以指定的元組 RequestRate(requests,seconds) 的形式從 robots.txt 返回 Request-rate 參數的內容。如果沒有這樣的參數,或者該參數不適用于指定的用戶代理,或者該參數的 robots.txt 條目的語法無效,則返回 None 。

舉一個簡單的例子:

import urllib.robotparser

rp = urllib.robotparser.RobotFileParser()
rp.set_url("https://www.taobao.com/robots.txt")
rp.read()

print(rp.can_fetch('Googlebot', 'https://www.taobao.com/article'))
print(rp.can_fetch('Googlebot', "https://s.taobao.com/search?initiative_id=tbindexz_20170306&ie=utf8&spm=a21bo.2017.201856-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q=iphone&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest"))

執行結果如下:

True
False

小編這里就用某寶做栗子了,首先創建 RobotFileParser 對象,然后通過 set_url() 方法設置了 robots.txt 的鏈接。

當然,不用這個方法的話,可以在聲明時直接用如下方法設置:

rp = urllib.robotparser.RobotFileParser('https://www.taobao.com/robots.txt')

接著利用 can_fetch() 方法判斷了網頁是否可以被抓取。

小結

本篇內容到這里就結束了,內容比較簡單,希望各位同學以后在寫爬蟲時候可以遵循 Robot 協議,為了自己的安全著想。

希望各位同學可以自己動手實際操作試試看。


python培訓班:http://www.onhairsalon.com/python2019


注釋:本文內容來自公眾號 極客挖掘機

上一篇:河南python培訓班 | Python從入門到精通第七講

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.onhairsalon.com

有位老師想和您聊一聊

關閉

立即申請