Python RobotFileParser 在读取时挂起

Python RobotFileParser hangs in read

我正在尝试读取 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的内容通常比较少,所以解析不是问题。

所以最有可能的情况是request/response做多。 您可以在浏览器中查看 developer-tool 哪个阶段最“挂起”。

你会看到类似的东西:network request phases (timing 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()