人生苦短,我用 Pythonhtml
前文傳送門:python
小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝github
小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門數據庫
小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門安全
小白學 Python 爬蟲(5):前置準備(四)數據庫基礎網絡
小白學 Python 爬蟲(6):前置準備(五)爬蟲框架的安裝框架
小白學 Python 爬蟲(7):HTTP 基礎iphone
小白學 Python 爬蟲(10):Session 和 Cookies
小白學 Python 爬蟲(11):urllib 基礎使用(一)
小白學 Python 爬蟲(12):urllib 基礎使用(二)
小白學 Python 爬蟲(13):urllib 基礎使用(三)
小白學 Python 爬蟲(14):urllib 基礎使用(四)
前面幾篇 urllib 的基礎介紹,分別介紹了 urllib 的處理 URL 的模塊,還剩最後一個 robotparser 模塊未作介紹,本篇文章來簡單的聊聊 robotparser 。
Robotparser 從命名上來看,好像是說機器人,實際上這裏的機器人指的是爬蟲。
在說 Robotparser 以前,咱們先介紹一個概念: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
總共分爲三個部分:
好比上面的這個 Robots 協議,其中的內容定義了百度爬蟲和谷歌爬蟲的爬取規則,其中對百度爬蟲定義了的可爬取路徑有 /article
、 /oshtml
、 /ershou
、 /$
,不可爬取的路徑有 /product/
和 /
目錄。
各位同窗可能會有疑問,爬蟲的名字是哪來的呢?
emmmmmmmmm,這個小編也不清楚,就當作一些固定用法吧,下表列出一些常見的爬蟲名稱:
爬蟲名稱 | 來源 | 來源網站 |
---|---|---|
BaiduSpider | 百度搜索 | www.baidu.com |
Googlebot | 谷歌搜索 | www.google.com |
360Spider | 360 搜索 | www.so.com |
Bingbot | 必應搜索 | cn.bing.com |
Yisouspider | 神馬搜索 | m.sm.cn |
Sogouspider | 搜狗搜索 | www.sogou.com |
Yahoo! Slurp | 雅虎搜索 | www.yahoo.com |
Sosospider | 搜搜 | www.soso.com |
官方文檔:https://docs.python.org/zh-cn/3.7/library/urllib.robotparser.html
在瞭解了什麼是 Robots 協議以後,咱們可使用 robotparser 來解析 Robots 協議。
該模塊提供了一個類 RobotFileParser
它能夠根據某網站的 robots.txt
文件來判斷一個爬取爬蟲是否有權限來爬取這個網站的某個路徑。
首先咱們看一下這個類的聲明:
urllib.robotparser.RobotFileParser(url='')複製代碼
看起來很簡單,只須要在構造方法中傳入 robots.txt
的路徑便可。
接下來咱們來看下這個類所具備的方法:
robots.txt
文件並進行分析。注意,這個方法執行一個讀取和分析操做,若是不調用這個方法,接下來的判斷都會爲 False ,因此必定記得調用這個方法。這個方法不會返回任何內容,可是執行了讀取操做。 robots.txt
文件,傳入的參數是 robots.txt
某些行的內容,它會按照 robots.txt
的語法規則來分析這些內容。 robots.txt
的時間,這對於長時間分析和抓取的搜索爬蟲是頗有必要的,你可能須要按期檢查來抓取最新的 robots.txt
。 robots.txt
的時間。 舉一個簡單的例子:
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 協議,爲了本身的安全着想。
但願各位同窗能夠本身動手實際操做試試看。
本系列的全部代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便你們取用。
https://www.cnblogs.com/zhangxinqi/p/9170312.html