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

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


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

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

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

set_url(url)

URL ارجاع‌دهنده به پرونده robots.txt را تنظیم می‌کند.

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