2016-07-30 24 views
1

Ich habe versucht, ein PDF von einer Webseite zu bekommen, analysieren Sie es und drucken Sie das Ergebnis auf den Bildschirm mit PyPDF2. Ich habe es ohne Probleme mit dem folgenden Code arbeiten:Python 3 parse PDF aus dem Web

with open("foo.pdf", "wb") as f: 
    f.write(requests.get(buildurl(jornal, date, page)).content) 
pdfFileObj = open('foo.pdf', "rb") 
pdf_reader = PyPDF2.PdfFileReader(pdfFileObj) 
page_obj = pdf_reader.getPage(0) 
print(page_obj.extractText()) 

eine Datei zu schreiben, nur damit ich es dann gelesen, obwohl verschwenderisch klang, so dachte ich, ich würde nur die Zwischenhändler mit diesem Schnitt:

pdf_reader = PyPDF2.PdfFileReader(requests.get(buildurl(jornal, date, page)).content) 
page_obj = pdf_reader.getPage(0) 
print(page_obj.extractText()) 

Dies gibt mir jedoch eine AttributeError: 'bytes' object has no attribute 'seek'. Wie kann ich die PDF von requests direkt auf PyPDF2 füttern?

Antwort

4

Sie haben die zurück content in eine Datei-ähnliches Objekt konvertierenmit:

import io 

pdf_content = io.BytesIO(requests.get(buildurl(jornal, date, page)).content) 
pdf_reader = PyPDF2.PdfFileReader(pdf_content) 
2

Verwenden io zu fälschen die Verwendung einer Datei (Python 3):

import io 

output = io.BytesIO() 
output.write(requests.get(buildurl(jornal, date, page)).content) 
output.seek(0) 
pdf_reader = PyPDF2.PdfFileReader(output) 

ich nicht in Ihrem Kontext nicht getestet, aber ich getestet dieses einfache Beispiel und es funktioniert:

import io 

output = io.BytesIO() 
output.write(bytes("hello world","ascii")) 
output.seek(0) 
print(output.read()) 

Ausbeuten :

b'hello world' 
+0

Entschuldigung, ich habe vergessen zu erwähnen, ich brauche es Python3 kompatibel –