Использование 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() будет работать как положено.