Ich arbeite an einer Scrapy Spider, versuchen, pdfs zu konvertieren, mit pdfminer (https://pypi.python.org/pypi/pdfminer2). Ich habe kein Interesse daran, die aktuelle PDF-Datei auf der Festplatte zu speichern. Daher wurde mir geraten, in die io.bytesIO-Unterklasse unter https://docs.python.org/2/library/io.html#buffered-streams zu schauen. Basierend auf Creating bytesIO object habe ich die bytesIO Klasse mit dem pdf Körper initialisiert, aber jetzt muss ich die Daten öffnen und folgen und als Beispiel, wie die grundlegende Verwendung http://www.unixuser.org/~euske/python/pdfminer/programming.html Bisher basiert auf http://zevross.com/blog/2014/04/09/extracting-tabular-data-from-a-pdf-an-example-using-python-and-regular-expressions/ ich habe:Öffnen eines PDF-Bytestring zum Lesen
in_memory_pdf = BytesIO(bytes(response.body))
in_memory_pdf.seek(0)
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(in_memory_pdf, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
st = retstr.getvalue()
retstr.close()
print st
Wenn ich laufen dies erhalte ich:
fp = file(in_memory_pdf, 'rb')
TypeError: coercing to Unicode: need string or buffer, _io.BytesIO found
Wie kann ich diesen PDF-Bytestring zur Verarbeitung öffnen?
Nach der vorgeschlagenen Änderung Ich erhalte:
2016-10-17 23:59:35 [root] DEBUG: exec: ET
2016-10-17 23:59:35 [root] DEBUG: nexttoken: (2819L, /'Q')
2016-10-17 23:59:35 [root] DEBUG: do_keyword: pos=2819L, token=/'Q', stack=[]
2016-10-17 23:59:35 [root] DEBUG: add_results: ((2819L, /'Q'),)
2016-10-17 23:59:35 [root] DEBUG: nextobject: (2819L, /'Q')
2016-10-17 23:59:35 [root] DEBUG: exec: Q
Traceback (most recent call last):
File "C:\\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\j1\spiders\j1_spider.py", line 235, in parse_pdf_to_html
interpreter.process_page(page)
File "C:\\site-packages\pdfminer\pdfinterp.py", line 835, in process_page
self.device.end_page(page)
File "C:\\site-packages\pdfminer\converter.py", line 53, in end_page
self.receive_layout(self.cur_item)
File "C:\\site-packages\pdfminer\converter.py", line 206, in receive_layout
render(ltpage)
File "C:\\site-packages\pdfminer\converter.py", line 196, in render
render(child)
File "C:\\site-packages\pdfminer\converter.py", line 196, in render
render(child)
File "C:\\site-packages\pdfminer\converter.py", line 196, in render
render(child)
File "C:\\site-packages\pdfminer\converter.py", line 198, in render
self.write_text(item.get_text())
File "C:\\site-packages\pdfminer\converter.py", line 189, in write_text
self.outfp.write(text)
TypeError: unicode argument expected, got 'str'
Versuchen Sie 'fp = file (in_memory_pdf, 'rb')' in 'fp = in_memory_pdf' zu ändern. –
Dies teilweise funktioniert, siehe bearbeiten – user61629