首页 > 解决方案 > 使用 scrapy 查询数据库中的 PDF,然后下载它们

问题描述

我是scrapy和python的新手,所以请记住这一点:)

我正在做一项研究,我需要从政府网站下载大量公开可用的 PDF 文档。问题是搜索结果大约有 11,000 页,每页有 10 个 PDF。

我想做的是使用scrapy编写一个脚本:

1) 将预定义的搜索参数传递给站点上的文档搜索引擎(例如关键字、公司名称、日期、日期等) 2) 运行搜索查询并获得结果 3) 自动下载所有 PDF显示为与我定义的参数匹配到我的机器的查询的结果(不仅仅是结果的第一页)/将它们上传到谷歌驱动器

关于我可以使用的东西的任何指针?我没有找到任何可以做到这一点的东西 - 任何帮助将不胜感激,这是一个非常好的事业!

这是我到目前为止的位置:

import scrapy
from scrapy.http import Request


class fos(scrapy.Spider):
    name = "XXX"


allowed_domains = ["XXX"]

start_urls = ["XXX"]


def parse(self, response):

    for href in response.css('div#all_results h3 a::attr(href)').extract():
        yield Request(
                url=response.urljoin(href),
                callback=self.parse_article
            )

    def parse_article(self, response):
        for href in response.css('div.download_wrapper a[href$=".pdf"]::attr(href)').extract():
            yield Request(
                url=response.urljoin(href),
                callback=self.save_pdf
            )

    def save_pdf(self, response):
        path = response.url.split('/')[-1]
        self.logger.info('Saving PDF %s', path)
        with open(path, 'wb') as f:
            f.write(response.body)

标签: pythonweb-scrapingscrapy

解决方案


Scrapy 是完成此类任务的绝佳工具,它可以节省您通过不同的自定义功能的时间,否则您必须使用它的管道,您可以使用您喜欢的库(即 multiprocessing.pool)并行下载文件(pdf) .线程池)

如果您可以分享确切的链接,我可以直接为您提供帮助。


推荐阅读