gpt4 book ai didi

python - 获取数万个 HTTP 响应码

转载 作者:可可西里 更新时间:2023-11-01 17:07:32 26 4
gpt4 key购买 nike

我有大约 80 000 个网址,我想获得它们的响应状态代码。请注意,我想尽快拿到它。我已经使用 requests python 电池尝试了 HEADGET 请求,但它对我的目标来说太慢了。根据我的计算,它需要 > 10 个小时。这是可悲的。我发现的另一种方法是使用 tornado。我已经在 500 个网址上对其进行了测试(请查看代码)。它使他的工作速度很快,但是(!)大量的响应代码是 599。这很奇怪,然后我检查了通过浏览器映射到 599 代码的 url(简单的 GET 请求)并进行了确保该网址非常好。如何解决这个问题?

from urlparse import urlparse
from threading import Thread
import httplib, sys
from Queue import Queue
from tornado import ioloop, httpclient, gen
import tornado
from time import sleep

i = 0
good = 0


def handle_request(response):
global good
if response.code != 200:
print response.code, response.reason, response.request.url
else:
good += 1
print 'KKKKKKKKKKK: ', good, '[%s]' % response.request.url
global i
i -= 1
if i == 0 or i < 0:
ioloop.IOLoop.instance().stop()


http_client = httpclient.AsyncHTTPClient()
lis = []
for url in open('urls'):
lis.append(url.strip())
specific_domain = '...'
for l in lis[:500]:
i += 1
method = 'GET' if specific_domain in l else 'HEAD'
req = tornado.httpclient.HTTPRequest(l, method=method, request_timeout=30.0)
http_client.fetch(req, handle_request)

ioloop.IOLoop.instance().start()

最佳答案

599 是 Tornado 为内部超时生成的响应代码。在这种情况下,大多数请求可能在等待插槽时在队列中超时。您可以增加超时(在发出请求时传递 request_timeout)或管理您自己的队列以尽可能快地将请求馈送到 AsyncHTTPClient(这通常是推荐用于大型爬网作业,因为它可以让您自己决定不同主机之间的优先级和公平性)。有关队列的示例,请参阅我在 tornado: AsyncHttpClient.fetch from an iterator? 中的回答

关于python - 获取数万个 HTTP 响应码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com