Использование scrapy для запроса базы данных для PDF-файлов и загрузки их - PullRequest
0 голосов
/ 25 января 2020

Я новичок в области терапии и python, поэтому, пожалуйста, имейте это в виду:)

Я занимаюсь исследованием, и мне нужно загрузить множество общедоступных документов в формате PDF с правительственного веб-сайта. Проблема в том, что существует около 11 000 страниц результатов поиска, каждая с 10 PDFS.

То, что я хотел бы сделать, это написать скрипт с использованием scrapy, который:

1) передает предварительно определенные параметры поиска в поисковую систему документов на сайте сайта (например, ключевое слово, название компании, date from, date to et c) 2) Запускает поисковый запрос и получает результаты. 3) Автоматически загружает ВСЕ PDF-файлы, отображаемые в результате запроса (а не только первую страницу результатов), которые соответствуют моему определенному. параметры на мою машину / загружает их на диск Google

Есть ли какие-либо указатели на то, что я могу использовать? Я не нашел ничего, что могло бы это сделать - любая помощь была бы очень признательна, это очень хорошее дело!

Вот где я до сих пор:

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)

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Scrapy - замечательный инструмент для такой задачи, он экономит время при просмотре различных пользовательских функций, которые в противном случае вам пришлось бы выполнять, и используя его конвейер, вы можете загружать файлы (pdfs) параллельно, используя ваши любимые библиотеки (т.е. multiprocessing.pool.ThreadPool)

Если вы можете поделиться точными ссылками, возможно, я могу помочь вам напрямую.

0 голосов
/ 25 января 2020

Кроме python и scrapy, я бы предложил использовать многопоточность для этого множества страниц. Вот документация и хороший учебник .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...