Python robotparser模块给出错误结果
我面临Python的robotparser模块的问题。对于特定的URL,它可以正常工作,但一旦执行特定的步骤序列,它就会开始失败。以下是我执行的步骤和结果:- 这个顺序很好:-Python robotparser模块给出错误结果,python,python-2.7,web-crawler,robots.txt,Python,Python 2.7,Web Crawler,Robots.txt,我面临Python的robotparser模块的问题。对于特定的URL,它可以正常工作,但一旦执行特定的步骤序列,它就会开始失败。以下是我执行的步骤和结果:- 这个顺序很好:- >>> import robotparser >>> rp = robotparser.RobotFileParser() >>> url = "http://www.ontheissues.org/robots.txt" >>> rp.set_ur
>>> import robotparser
>>> rp = robotparser.RobotFileParser()
>>> url = "http://www.ontheissues.org/robots.txt"
>>> rp.set_url(url)
>>> rp.read()
>>> rp.can_fetch("*", "http://www.ontheissues.org/House/Jim_Nussle.htm")
True
>>>
但是,下面提到的顺序对于我上面所做的相同步骤失败:-
>>>> import robotparser
>>>> rp = robotparser.RobotFileParser()
>>>> url = "http://menendez.senate.gov/robots.txt"
>>>> rp.set_url(url)
>>>> rp.read()
>>>> rp.can_fetch("*", "http://menendez.senate.gov/contact/contact.cfm")
False
>>>>
>>>>
>>>> url = "http://www.ontheissues.org/robots.txt"
>>>> rp.set_url(url)
>>>> rp.read()
>>>> rp.can_fetch("*", "http://www.ontheissues.org/House/Jim_Nussle.htm")
False
>>>>
在调试了一段时间后,我发现如果每次使用新URL时都创建一个新对象,效果会很好。这意味着,每当URL更改时,我都必须执行“rp=robotparser.RobotFileParser()”
我不确定我的方法是否正确,因为如果我能够更改URL,robotparser应该能够处理此类情况
另外,在上面的例子中,当我尝试使用requests.get()或任何其他方式下载链接“”时,它给出了503错误代码。我查看了robotparser.py的代码,在该文件中,对于RobotFileParser类中的read()方法,没有检查HTTP响应代码>500。我不知道为什么不处理这些响应代码,只是想得到一些指针,说明不处理这些响应代码的原因。robotparser只能解析在中指定的“/robots.txt”格式的文件,并且为了使这些文件在排除机器人遍历时处于活动状态,它们必须位于网站上的/robots.txt。基于此,robotparser应该无法解析“”,因为它可能不是“/robots.txt”格式,即使访问它没有问题 Facebook在上有一个robots.txt文件。它是纯文本的,可以在浏览器中阅读。robotparser可以毫无问题地解析它,但是它对facebook.com上其他文件的访问似乎被robots.txt中的以下规则排除:
User-agent: *
Disallow: /
以下是使用robotparser读取和解析的会话:
在我的浏览器中测试对的访问时,我收到HTTP错误404-找不到文件或目录。然后我下载并修改了read()函数以打印它读取的每一行,在这个URL上运行它并只打印第一行:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
再次使用修改后的robotparser.read()函数进行测试,得到了一个类似的HTML头,但与的头不同,并且没有错误。以下是打印的标题行:
再次浏览,最初会在10-15秒后重定向到。这种重定向链接可以按如下方式编码:
<meta http-equiv="refresh" content="15;url=http://www.menendez.senate.gov/" />
搜索的源找不到与“cfm”匹配的内容,表明它不包含指向contact.cfm的链接。虽然这样的链接可以在web服务器的其他位置配置或动态生成,但浏览它不太可能导致在处出现HTTP 404错误。当我刚刚尝试访问时,我得到了HTTP 404响应和此页面。我得到了此url的503。>>>导入请求>>>请求。get(“)503表示服务不可用,404表示找不到。无论哪种方式,网站都有问题。可能有人正在处理它,而这不是robotparser.py的错误。如果您希望它处理错误代码,请将其放入。不处理503的原因可能是”由于服务器的临时过载或维护”,而404通常表示一种更为永久的情况应该给它一个以robots.txt结尾的URL,其结构如.menendez.senate.gov/contact/contact.cfm中所述。它不是robots.txt文件,因此robotparser无法解析它。无可否认,它应该返回一个表明这一点的错误,而不是HTTP错误,但是该网站存在问题,并且robotparser似乎无法解析它o读取URL以确定其无法解析。是的,我将URL作为menendez.senate.gov/robots.txt传递给robotparser,因此我认为我可以。不处理由于临时过载或维护导致的5XX错误是有意义的。是的,确实有意义。但您应该使用robotparser解析的文件,如中所述我的问题是审判代码。
# Notice: Crawling Facebook is prohibited unless you have express written
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="refresh" content="15;url=http://www.menendez.senate.gov/" />