【问题标题】:How to findout HTTP status faster?如何更快地找出 HTTP 状态?
【发布时间】:2017-05-19 16:34:28
【问题描述】:

我有一个大小为 10 GB 的文件。该文件主要包含 URL。我正在尝试获取每个 URL 的 HTTP 状态代码并将它们存储到另一个带有 .CSV 扩展名的文件中。
我已经搜索了一个代码,并找到了使用 Python 访问 URL 的状态代码的解决方案:

import requests
request = requests.get('http://www.example.com')
print(request.status_code)

但它需要一个 URL。我有一个更大的文件。我不知道如何将文件中的 URL 输入到此命令。甚至如何以.CSV 格式存储输出
即使它没有更快。我正在寻找一种更快的解决方案,它可以为 10 GB 文件提供更快的结果。
我也尝试了 Ubuntu 命令:

xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out '%{url_effective},%{http_code}\n' < Input_File.txt > output.CSV

但它也不是多线程的。它一次取一行,然后存储到CSV
所以,我的问题是如何使文件大小为 10 GB 的情况下更快地完成这项工作。如果在任何编程语言中有任何解决方案,我将很乐意实施。
这是 URL 的示例文件 - 我的 10 GB 文件中的一小块:
https://drive.google.com/file/d/0BzQ6rtO2VN95c0YzclhySVZYNDQ/view?usp=sharing
我想将输出存储在 CSV 中:

URL,Http状态码

例如:

http://google.com,200  
http://example.com,503  

希望这有助于理解我的查询。

【问题讨论】:

  • 如果您的机器足够强大,请尝试在 Python 中进行多处理。设置一个公共的url队列,然后建立N个进程从公共队列中获取url。
  • @Acepcs 感谢您的建议。我朋友的文件大小仍然是 10 GB。甚至更多。你认为我应该做多少流程和多少拆分。我正在寻找一种多合一的解决方案来更快地执行任何文件大小。我不希望该程序需要数天才能完成工作。我想要几个小时。
  • This might supply some pointers 如果你不想涉足 Python。
  • @Jaffer Wilson 10GB 是一个很大的数字,如果这是一次性任务,可以把整个文件分成几个部分,用几台电脑执行多处理 python 脚本,我是确保时间成本是可以接受的。但如果是长期任务,我的建议是分布式系统。

标签: python csv url parallel-processing http-status-codes


【解决方案1】:

curl 能做什么,python 请求经常能做到,而且做得更好。和 curl 一样,它也有一个HEAD 方法。

import requests
response = requests.head('http://www.example.com')
print(response.status_code)

【讨论】:

  • 是的,你是对的,但问题是我不知道如何同时传递多个 URL 来处理并将输出提供给 ubuntu 中的 Python 或 Curl 命令。我尝试了很多事情,但遇到了同样的问题。一次单个 URL。我想一次提供多个 URL 说 100.. 我的文件大小是 10 GB....
  • 一次使用多个 url 会更快,前提是它们在同一台服务器上。否则,连接建立开销仍然存在。在处理完所有 10GB 之后,您可能会节省大约 30 秒
  • 我有一堆 URL,只需要检查它们是否存在。它们不在同一台服务器上。他们也来自不同的地方。
  • 那么就像我之前的评论一样,将一堆 url 发送到 python-requests 或 curl 不会有任何区别
  • 你真正需要的是一个分布式系统,充其量或者至少是多个线程并行发出请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多