python - 尝试在政府网站上抓取数十万个 pdf 文件。想要尽快完成

标签 python web-scraping python-requests coding-efficiency

我正在尝试在美国技术手册中搜索与堤坝和洪水事件相关的任何内容。我认为他们托管了大约 400,000 个文件,我正在尝试编写代码来下载与我正在学习的内容相关的任何 pdf 文件。

我的代码有效,单个文件只需要 2 分钟。一旦我让它运行良好,我就会将其放入循环中,我认为这会增加更多时间。

import requests
import sys
import os
from pathlib import Path
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

url = 'https://apps.dtic.mil/dtic/tr/fulltext/u2/a125775.pdf'

response = requests.get(url, headers=headers)

result = response.text

result1 = result.find('{{vm.optionsDisplay(vm.model)}}" value="0') 

if result1 == -1:

    print("sucks to suck")

else:

    with open("python.pdf","wb") as pdf: 

        for chunk in response.iter_content(chunk_size=1024): 

            if chunk: 

                pdf.write(chunk) 

代码再次适用于该文件...但我不知道如何加快该过程。

最佳答案

如果linked file无论如何,我认为这项任务的规模可能相当困难。

此文件大小为 9.6MB,因此如果它准确表示了 400,000 个文件,那么我们将下载并保存 9.6*400,000=3,840,00MB (3.8 TB)

如果我们获得 1 MB/s 的不错下载速度,则需要 1,066 小时(44 天)。这是假设我们不受美国政府服务器的限制(如果他们看到我们的 IP 尝试下载 1TB 以上,他们可能会受到限制)

还有一个有趣的哲学问题是,如果计算机需要 44 天才能将信息从数据库传输到内存中,我想知道人类需要多长时间才能完成类似的过程。

您可以尝试通过过滤过去 20 年左右的文件来减少数量。

关于python - 尝试在政府网站上抓取数十万个 pdf 文件。想要尽快完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617045/

相关文章:

python - 何时使用 `raise_for_status` 与 `status_code` 测试

python - Apache PySpark 丢失执行程序 - 无法创建本地目录

Python - 尝试在 IF 语句中使用列表值

python - 抽象和具体文本的自然语言处理?

Python - 如何获取特定 div 的样式属性总数

python - 无法使用 selenium 和 read_html 从宏观趋势检索数据来创建数据框?

python - MongoDB 许多小上传与一次大上传

python - scrapy:如何只选择可见的项目

python - 如何在 requests.api.request 的 params 中传递字典?

Python 请求无法正常工作