使用 python 或 wget 抓取网站 - 等待响应问题

scraping website using python or wget - awaiting response problem

我正在尝试从同一台服务器下载 30 万多个 HTML 文件。我在 list/text 文件中有 URLs。我的第一次尝试是使用 python urllib/requests 但它非常慢并且会在几个链接(10-20)后卡住。代码示例:

for i, url in enumerate(url_list):
    urllib.request.urlretrieve(url, "./pages/"+str(i))

然后我尝试像这样简单地使用 wget:

wget -i links_file.txt -U netscape

wget 工作得很好,它可以毫无问题地下载 1-5k 个文件,而且看起来非常快,但随后会卡在随机 (?) 文件中:

Connecting to <website>... connected. HTTP request sent, awaiting response...

现在我可以看到它在哪个 URL 处卡住了,只需停止 运行 并从同一点重新启动它,它又可以完美地再次下载 1-5k 次。由于每次卡住时我都无法手动执行此操作,直到我最终拥有所有 300k 文件,所以我想知道如果 wget 等待响应时间过长然后再试一次,是否有办法自动停止它?或者有什么 other/better 方法可以自动下载这么多 HTML 文件吗?

how I can stop wget automatically if it awaits a response for too long and then just tries again?

您要找的是 timeoutretries 的次数。在 wget 中,您可以使用 --timeout 一次设置所有超时或使用特定的超时

--dns-timeout
--connect-timeout
--read-timeout

在任何一种情况下,您都应该在 = 之后提供值作为秒数,例如 --timeout=60

使用 --tries 设置重试次数(默认值:20),例如 --tries=10 但请记住,如果出现致命错误,则不会重试。

您可能还会发现有用的 --no-clobber 其效果是如果已经存在这样的命名文件(将被覆盖)则不会下载该文件