如何解决Python RobotFileParser挂起读取
我正在尝试读取robots.txt文件,并弄清是否允许该漫游器读取特定页面。
import urllib.robotparser as urobot
import urllib.request
url = "https://example.com"
rp = urobot.RobotFileParser()
rp.set_url(url + "/robots.txt")
rp.read()
if rp.can_fetch("*",URL):
#do something
else:
# else do something
虽然上述程序在大多数URL上运行都很好,但在 rp.read()
上挂了其中几个它只是挂在read()上,不会引发任何异常。
解决方法
根据read()
函数的源代码,它主要由2种方法组成:urllib.request.urlopen(self.url)
和读取此内容。
所以看起来它可能以两种方式“挂起”-发出请求/等待响应以及读取和解析其内容。
由于robots.txt的内容通常很小,因此解析不是问题。
因此,最可能的情况是请求/响应执行的时间很长。 您可以在开发人员工具的浏览器中检查该状态,该状态“挂起”最多。
您将看到类似的内容:network request phases(计时阶段explained)
处理悬挂连接的一种方法是尝试设置默认超时:
import urllib.robotparser as urobot
import socket
socket.setdefaulttimeout(1) # in seconds (float)
url = "https://example.com"
rp = urobot.RobotFileParser()
rp.set_url(url + "/robots.txt")
x = rp.read()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。