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.
مثال زیر استفادهی پایه از کلاس 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