urllib.robotparser मॉड्यूल RobotFileParser क्लास प्रदान करता है जो robots.txt फाइल को पार्स करके बताता है कि कोई यूज़र एजेंट किसी URL को एक्सेस कर सकता है या नहीं।
robots.txt क्या है?
वेबसाइट मालिक /robots.txt में क्रॉलर्स (स्पाइडर्स) के लिए निर्देश देते हैं - The Robots Exclusion Protocol।
# robots.txt उदाहरण
Sitemap: https://example.com/sitemap.xml
User-agent: *
Disallow: /admin/
Disallow: /downloads/
Disallow: /media/
Disallow: /static/
RobotFileParser मेथड्स
| मेथड | विवरण |
|---|---|
set_url(url) | robots.txt URL सेट करें |
read() | URL से पढ़कर पार्स करें |
parse(lines) | स्ट्रिंग लाइन्स से पार्स करें |
can_fetch(useragent, url) | क्या यूज़र एजेंट URL फेच कर सकता है? (True/False) |
mtime() | अंतिम फेच समय (टाइमस्टैम्प) |
modified() | अंतिम फेच समय सेट करें |
crawl_delay(useragent) | Crawl-delay मान लौटाता है |
request_rate(useragent) | Request-rate (requests, seconds) टपल लौटाता है |
उदाहरण
from urllib import parse, robotparser
AGENT_NAME = 'PyMOTW'
URL_BASE = 'https://example.com/'
parser = robotparser.RobotFileParser()
parser.set_url(parse.urljoin(URL_BASE, 'robots.txt'))
parser.read()
# चेक करें
print(parser.can_fetch(AGENT_NAME, 'https://example.com/')) # True/False
print(parser.can_fetch(AGENT_NAME, 'https://example.com/admin/')) # False
print(parser.can_fetch(AGENT_NAME, 'https://example.com/downloads/')) # False
print(parser.crawl_delay(AGENT_NAME)) # सेकंड्स में डिले या None
print(parser.request_rate(AGENT_NAME)) # RequestRate(requests, seconds) या None
व्यावहारिक उपयोग
def can_scrape(url, user_agent='MyBot'):
"""चेक करें कि URL स्क्रैप किया जा सकता है"""
from urllib import parse, robotparser
parsed = parse.urlparse(url)
base_url = f"{parsed.scheme}://{parsed.netloc}/"
rp = robotparser.RobotFileParser()
rp.set_url(parse.urljoin(base_url, 'robots.txt'))
try:
rp.read()
return rp.can_fetch(user_agent, url)
except Exception:
return True # robots.txt न होने पर अनुमति मान लें
# उपयोग
if can_scrape('https://example.com/page.html'):
print("Scraping allowed")
else:
print("Blocked by robots.txt")
महत्वपूर्ण नोट्स
robots.txtएक स्वैच्छिक मानक है - बॉट्स इसे नज़रअंदाज़ कर सकते हैं।- यह एक्सेस कंट्रोल लागू नहीं करता, केवल दिशानिर्देश देता है।
- कैशिंग करें: हर रिक्वेस्ट पर
read()न करें,mtime()चेक करके रीफ्रेश करें। - कुछ साइट्स
robots.txtमेंCrawl-delayऔरRequest-rateनिर्दिष्ट करती हैं।