gpt4 book ai didi

Python robotparser 模块不会加载 'robots.txt'

转载 作者:行者123 更新时间:2023-11-28 17:50:55 24 4
gpt4 key购买 nike

我正在编写一个非常简单的网络爬虫并尝试解析 'robots.txt'文件。我找到了 robotparser标准库中的模块,它应该正是这样做的。我正在使用 Python 2.7.2。不幸的是,我的代码不会加载 'robots.txt'文件正确,我不明白为什么。

这是我的代码的相关片段:

from urlparse import urlparse, urljoin
import robotparser

def get_all_links(page, url):
links = []
page_url = urlparse(url)
base = page_url[0] + '://' + page_url[1]
robots_url = urljoin(base, '/robots.txt')
rp = robotparser.RobotFileParser()
rp.set_url(robots_url)
rp.read()
for link in page.find_all('a'):
link_url = link.get('href')
print "Found a link: ", link_url
if not rp.can_fetch('*', link_url):
print "Page off limits!"
pass

在这里page是经过解析的 BeautifulSoup对象和 url是存储为字符串的 URL。解析器读入空白 'robots.txt'文件,而不是位于指定 URL 的文件,并返回 True所有 can_fetch()查询。看起来它要么没有打开 URL,要么没有读取文本文件。

我也在交互式解释器中尝试过。这就是发生的情况,使用与 documentation 相同的语法页面。

Python 2.7.2 (default, Aug 18 2011, 18:04:39) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import robotparser
>>> url = 'http://www.udacity-forums.com/robots.txt'
>>> rp = robotparser.RobotFileParser()
>>> rp.set_url(url)
>>> rp.read()
>>> print rp

>>>

print rp应该打印 'robots.txt' 的内容文件,但它返回空白。更令人沮丧的是,these examples两者都像写的那样工作得很好,但是当我尝试我自己的 URL 时失败了。我是 Python 的新手,我不知道出了什么问题。据我所知,我正在以与文档和示例相同的方式使用该模块。感谢您的帮助!

更新 1:这里是解释器的几行,以防 print rp不是检查 'robots.txt' 是否有效的好方法被读入。path , host , 和 url属性正确,但来自 'robots.txt' 的条目还没有读进去。

>>> rp
<robotparser.RobotFileParser instance at 0x1004debd8>
>>> dir(rp)
['__doc__', '__init__', '__module__', '__str__', '_add_entry', 'allow_all', 'can_fetch', 'default_entry', 'disallow_all', 'entries', 'errcode', 'host', 'last_checked', 'modified', 'mtime', 'parse', 'path', 'read', 'set_url', 'url']
>>> rp.path
'/robots.txt'
>>> rp.host
'www.udacity-forums.com'
>>> rp.entries
[]
>>> rp.url
'http://www.udacity-forums.com/robots.txt'
>>>

更新 2: 我已经使用 this external library 解决了这个问题解析 'robots.txt'文件。 (但我还没有回答原来的问题!)在终端机上花了更多时间后,我最好的猜测是 robotparser无法处理对 'robots.txt' 的某些添加规范,如 Sitemap , 并且有空白行的问题。它将从中读取文件,例如Stack Overflow 和 Python.org,但不包括 Google、YouTube 或我的原始 Udacity 文件,其中包括 Sitemap语句和空行。如果比我聪明的人能够证实或解释这一点,我仍然会很感激!

最佳答案

我已经通过使用这个外部库解析“robots.txt”文件解决了这个问题。 (但我还没有回答最初的问题!)在终端机上花了更多时间后,我最好的猜测是 robotparser 无法处理“robots.txt”规范的某些添加,如 Sitemap,并且在处理空行时遇到问题。它将从中读取文件,例如Stack Overflow 和 Python.org,但不是 Google、YouTube 或我的原始 Udacity 文件,其中包括 Sitemap 语句和空行。如果比我聪明的人能够证实或解释这一点,我将不胜感激!

关于Python robotparser 模块不会加载 'robots.txt',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10026708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com