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()
我正在尝试读取 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()