urllib.robotparser --- پارسر برای robots.txt

کد منبع: Lib/urllib/robotparser.py


این ماژول یک کلاس واحد، RobotFileParser، ارائه می‌دهد که به این پرسش پاسخ می‌دهد که آیا یک عامل کاربر خاص می‌تواند یک URL را در وب‌سایتی که پرونده robots.txt را منتشر کرده است واکشی کند یا خیر. برای جزئیات بیشتر درباره ساختار پرونده‌های robots.txt، RFC 9309 را ببینید.

class urllib.robotparser.RobotFileParser(url='')

This class provides methods to read, parse and answer questions about the robots.txt file at url or a urllib.request.Request object.

تغییر یافته در نسخه‌ی 3.16.0a0 (unreleased): url parameter can be a urllib.request.Request object.

set_url(url)

Sets the URL referring to a robots.txt file or a urllib.request.Request object.

تغییر یافته در نسخه‌ی 3.16.0a0 (unreleased): url parameter can be a urllib.request.Request object.

read()

نشانی URL robots.txt را می‌خواند و آن را به پارسر می‌دهد.

parse(lines)

آرگومان lines را تجزیه می‌کند.

can_fetch(useragent, url)

اگر useragent بر اساس قوانین موجود در پرونده robots.txt تجزیه‌شده، مجاز به واکشی url باشد، True برمی‌گرداند.

mtime()

زمانی را برمی‌گرداند که پرونده‌ی robots.txt آخرین بار واکشی شده است. این برای خزنده‌های وبی که برای مدت طولانی اجرا می‌شوند و باید به‌صورت دوره‌ای پرونده‌های جدید robots.txt را بررسی کنند، مفید است.

modified()

زمان آخرین واکشی پرونده robots.txt را به زمان فعلی تنظیم می‌کند.

crawl_delay(useragent)

مقدار پارامتر Crawl-delay را از robots.txt برای useragent موردنظر برمی‌گرداند. اگر چنین پارامتری وجود نداشته باشد یا به useragent مشخص‌شده اعمال نشود یا ورودی robots.txt برای این پارامتر سینتکس نامعتبر داشته باشد، None را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.6.

request_rate(useragent)

محتوای پارامتر Request-rate را از robots.txt به‌صورت یک named tuple با نام RequestRate(requests, seconds) برمی‌گرداند. اگر چنین پارامتری وجود نداشته باشد، یا به useragent مشخص‌شده اعمال نشود، یا ورودی robots.txt برای این پارامتر دارای سینتکس نامعتبر باشد، None را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.6.

site_maps()

محتوای پارامتر Sitemap را از robots.txt در قالب یک list() برمی‌گرداند. اگر چنین پارامتری وجود نداشته باشد یا ورودی robots.txt برای این پارامتر سینتکس نامعتبر داشته باشد، None را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.8.

مثال زیر استفاده‌ی پایه از کلاس RobotFileParser را نشان می‌دهد:

>>> import urllib.robotparser
>>> rp = urllib.robotparser.RobotFileParser()
>>> rp.set_url("http://www.pythontest.net/robots.txt")
>>> rp.read()
>>> rrate = rp.request_rate("*")
>>> rrate.requests
1
>>> rrate.seconds
1
>>> rp.crawl_delay("*")
6
>>> rp.can_fetch("*", "http://www.pythontest.net/")
True
>>> rp.can_fetch("*", "http://www.pythontest.net/no-robots-here/")
False

The following example demonstrates use of a urllib.request.Request object with additional user-agent headers populated:

>>> import urllib.robotparser
>>> import urllib.request
>>> rp = urllib.robotparser.RobotFileParser()
>>> rp.set_url(urllib.request.Request("http://www.pythontest.net/robots.txt", headers={"User-Agent": "IsraBot"}))
>>> rp.read()
>>> rp.can_fetch("*", "http://www.pythontest.net/")
True
>>> rp.can_fetch("*", "http://www.pythontest.net/no-robots-here/")
False