Подтвердить что ты не робот

Должен ли я создавать конвейер для сохранения файлов с помощью scrapy?

Мне нужно сохранить файл (.pdf), но я не уверен, как это сделать. Мне нужно сохранить .pdfs и сохранить их таким образом, чтобы они были организованы в каталогах, которые, как они хранятся на сайте, я очищаю их.

Из того, что я могу собрать, мне нужно создать конвейер, но из того, что я понимаю, конвейеры сохраняют "Элементы" и "Элементы" - это просто базовые данные, такие как строки/числа. Сохраняет ли файлы правильное использование конвейеров, или я должен сохранить файл в пауке вместо?

4b9b3361

Ответ 1

Да и нет [1]. Если вы извлечете PDF файл, он будет сохранен в памяти, но если PDF файлы недостаточно велики, чтобы заполнить вашу доступную память, значит, это нормально.

Вы можете сохранить pdf в обратном вызове паука:

def parse_listing(self, response):
    # ... extract pdf urls
    for url in pdf_urls:
        yield Request(url, callback=self.save_pdf)

def save_pdf(self, response):
    path = self.get_path(response.url)
    with open(path, "wb") as f:
        f.write(response.body)

Если вы решите сделать это в конвейере:

# in the spider
def parse_pdf(self, response):
    i = MyItem()
    i['body'] = response.body
    i['url'] = response.url
    # you can add more metadata to the item
    return i

# in your pipeline
def process_item(self, item, spider):
    path = self.get_path(item['url'])
    with open(path, "wb") as f:
        f.write(item['body'])
    # remove body and add path as reference
    del item['body']
    item['path'] = path
    # let item be processed by other pipelines. ie. db store
    return item

[1] другой подход может заключаться в том, чтобы хранить только URL-адреса pdf файлов и использовать другой процесс для извлечения документов без буферизации в память. (например, wget)

Ответ 3

Это идеальный инструмент для работы. Способ работы Scrapy заключается в том, что у вас есть пауки, которые преобразуют веб-страницы в структурированные данные (элементы). Трубопроводы - это постпроцессоры, но они используют такую ​​же асинхронную инфраструктуру, что и пауки, поэтому идеально подходят для извлечения медиафайлов.

В вашем случае вы сначала извлекаете местоположение PDF файлов в паук, извлекаете их в конвейер и добавляете еще один конвейер для сохранения элементов.