Создание объекта bytesIO

Я работаю над пауком Scrapy , пытаясь извлечь текст из нескольких PDF-файлов в каталог, используя slate . Я не заинтересован в сохранении фактического PDF-файла на диске, поэтому мне было рекомендовано изучить подкласс io.bytesIO по адресу https://docs.python.org/2/library/io.html#buffered -streams.

Однако я не уверен, как передать тело PDF в класс bytesIO, а затем передать виртуальный слайдер PDF, чтобы получить текст. Пока у меня есть:

  • Разместить изображение через PDF
  • Автоматическое преобразование PDF в изображения
  • Извлечение текста на страницу с помощью Python pdfMiner?
  • Получите предварительный просмотр JPEG PDF в Windows?
  • Как читать по строкам в pdf-файле с помощью PyPdf?
  • Как индексировать файлы PDF и искать ключевые слова?
  • class Ove_Spider(BaseSpider): name = "ove" allowed_domains = ['myurl.com'] start_urls = ['myurl/hgh/'] def parse(self, response): for a in response.xpath('//a[@href]/@href'): link = a.extract() if link.endswith('.pdf'): link = urlparse.urljoin(base_url, link) yield Request(link, callback=self.save_pdf) def save_pdf(self, response): in_memory_pdf = BytesIO() in_memory_pdf.read(response.body) # Trying to read in PDF which is in response body 

    Я получаю:

     in_memory_pdf.read(response.body) TypeError: integer argument expected, got 'str' 

    Как я могу заставить это работать?

  • Construct pandas DataFrame из элементов вложенного словаря
  • Python: как я могу узнать, какие исключения могут быть выбраны из вызова метода?
  • Периодически обновлять и отображать значение из колбы
  • Одновременное выполнение двух функций
  • Python, что делает подчеркивание перед скобкой
  • Элементы счетчика Python в списке
  • One Solution collect form web for “Создание объекта bytesIO”

    Когда вы делаете in_memory_pdf.read(response.body) вы должны передать количество прочитанных байтов. Вы хотите инициализировать буфер, а не читать его.

    В python 2 просто инициализируйте BytesIO следующим образом:

      in_memory_pdf = BytesIO(response.body) 

    В Python 3 вы не можете использовать BytesIO со строкой, потому что он ожидает байтов. Сообщение об ошибке показывает, что response.body имеет тип str : мы должны его закодировать.

      in_memory_pdf = BytesIO(bytes(response.body,'ascii')) 

    Но поскольку pdf может представлять собой двоичные данные, я полагаю, что response.body будет bytes , а не str . В этом случае работает простой in_memory_pdf = BytesIO(response.body) .

    Python - лучший язык программирования в мире.