Использование scraperwiki для pdf-файла на диске

Я пытаюсь получить некоторые данные из документа PDF, используя Scraperwiki для Pyhon. Это прекрасно работает, если я загружаю файл с помощью urllib2 примерно так:

pdfdata = urllib2.urlopen(url).read()
xmldata = scraperwiki.pdftoxml(pdfdata)
root = lxml.html.fromstring(xmldata)
pages = list(root)

Но здесь начинается сложная часть. Поскольку я хотел бы сделать это для большого количества pdf-файлов, которые есть на моем диске, я хотел бы покончить с первой строкой и передать pdf-файл непосредственно в качестве аргумента. Однако, если я попытаюсь

pdfdata = open("filename.pdf","wb")
xmldata = scraperwiki.pdftoxml(pdfdata)
root = lxml.html.fromstring(xmldata)

Я получаю следующую ошибку

xmldata = scraperwiki.pdftoxml(pdfdata)
File "/usr/local/lib/python2.7/dist-packages/scraperwiki/utils.py", line 44, in pdftoxml
pdffout.write(pdfdata)
TypeError: must be string or buffer, not file

Я предполагаю, что это происходит, потому что я не открываю PDF правильно?

Если это так, есть ли способ открыть PDF-диск с диска, как это делает urllib2.urlopen()?

1 ответ

Решение

urllib2.urlopen(...).read() делает только то, что читает содержимое потока, возвращенного из URL, который вы передали в качестве параметра.

Пока open () возвращает обработчик файла. Так же, как urllib2 нужно было выполнить вызов open (), так и вызов read (), также как и обработчики файлов.

Измените вашу программу, чтобы использовать следующие строки:

with open("filename.pdf", "rb") as pdffile:
      pdfdata=pdffile.read()

xmldata = scraperwiki.pdftoxml(pdfdata)
root = lxml.html.fromstring(xmldata)

Это откроет ваш pdf, затем прочитает содержимое в буфер с именем pdfdata. Оттуда ваш вызов scraperwiki.pdftoxml() будет работать как положено.

Другие вопросы по тегам