Как использовать Scrapy для разбора PDF страниц онлайн? - PullRequest
0 голосов
/ 26 сентября 2018

Я безуспешно пытался использовать Scrapy с библиотекой PyPDF2 для сканирования PDF в Интернете.Пока я могу перемещаться по всем ссылкам и получать файлы PDf, но подача их через PyPDF2 кажется проблемой.

Примечание: Моя цель не состоит в том, чтобы захватывать / сохранять файлы PDF, я намерен проанализировать их, сначала преобразовав PDF в текст, а затем манипулируя этим текстом другими способами.

Для краткости я не включил здесь весь код.Вот часть моего кода:

import io
import re
import PyPDF2
import scrapy
from scrapy.item import Item

class ArticleSpider(scrapy.Spider):
    name = "spyder_ARTICLE"                                                 
    start_urls = ['https://legion-216909.appspot.com/content.htm']                                                                      

    def parse(self, response):                                              
        for article_url in response.xpath('//div//a/@href').extract():      
            yield response.follow(article_url, callback=self.parse_pdf) 

    def parse_pdf(self, response):
        """ Peek inside PDF to check for targets.
        @return: PDF content as searcable plain-text string
        """
        reader = PyPDF2.PdfFileReader(response.body)
        text = u""

        # Title is optional, may be None
        if reader.getDocumentInfo().title: text += reader.getDocumentInfo().title
        # XXX: Does handle unicode properly?
        for page in reader.pages: text += page.extractText()

        return text

Каждый раз, когда я запускаю код, паук пытается reader = PyPDF2.PdfFileReader(response.body) и выдает следующую ошибку: AttributeError: 'bytes' object has no attribute 'seek'

Что я делаю не так?

1 Ответ

0 голосов
/ 26 сентября 2018

Похоже, это не проблема с помощью скрапа.PyPDF2 ожидает поток двоичных данных.

# use this instead of passing response.body directly into PyPDF2
reader = PyPDF2.PdfFileReader(io.BytesIO(response.body))

Надеюсь, это поможет.

...