Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python robotparser模块给出错误结果_Python_Python 2.7_Web Crawler_Robots.txt - Fatal编程技术网

Python robotparser模块给出错误结果

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

我面临Python的robotparser模块的问题。对于特定的URL,它可以正常工作,但一旦执行特定的步骤序列,它就会开始失败。以下是我执行的步骤和结果:-

这个顺序很好:-

>>> 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/" />