【发布时间】: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