Scrapyを使用して、pdfをダウンロードしてバイナリファイルをメモリに読み込んで内容を抽出します。私は、PDFがのように見えるページに埋め込まれていることを実現:埋め込みPDFを抽出する - PDFInterpreterError:不明な演算子: ' x00'
<embed id="plugin" type="application/x-google-chrome-pdf" src="http:xxx/DocumentInquiry.aspx?DocumentNo=12502" stream-url="blob:chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/1c86700d-0230-43b1-8b5e-eb219a2220af" headers="Content-Type: application/pdf
Content-Length: 50080
Cache-Control: private
Server: Microsoft-IIS/7.5
Content-Disposition: inline;filename=DocumentInquiry.pdf
X-Powered-By: ASP.NET
私はHTTPのscrapyのresponse.bodyを開くとき:?XXX/DocumentInquiry.aspx DocumentNo = 12502 Iで始まる文字列を参照してください。
'%PDF-1.4\n%\xe2\xe3\xcf\xd3\r\n1 0 obj\n<</Type /Page\n/Parent 2 0 R\n/MediaBox [ 0 0 612.000 792.000 ]\n/Resources <</XObject 3 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]>>/Contents [ 4 0 R ]\n/Rotate 0\n>>\r\nendobj\n5 0 obj\n<</Type /XObject /Subtype /Image\n/Name /JI1Obj1\n/Width 1275 /Height 1650\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n/Filter [ /FlateDecode /DCTDecode ]\n/Length 6 0 R>>\r\nstream\r\nx\x9c\xed\x9dYl\x1bE\x18\x80g}\xa4I\n\x88\xa4[Sh\x11m\xe9\x
ここではどのようにしてpdfを抽出しますか?
編集:私はラインで次のエラーを取得しています「PDFPage.get_page中のページの...」
def convert_pdf_to_html(string):
in_memory_pdf = BytesIO(
bytes(string)) # in_memory_pdf IS A FILE LIKE OBJECT SO DOES NOT NEED TO BE OPENED, CLOSED ETC
rsrcmgr = PDFResourceManager()
retstr = BytesIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) # CONSIDER TextConverter FOR TEXT
# device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) # CONSIDER HTMLConverter FOR HTML
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos = set()
for page in PDFPage.get_pages(in_memory_pdf, pagenos, maxpages=maxpages, password=password, caching=caching,
check_extractable=True):
interpreter.process_page(page)
device.close()
st = retstr.getvalue()
retstr.close()
return st
:
私が以前働いている次の関数でpdfminerを使用していますFile "MypROJEctspiders\forc_spider.py", line 313, in get_order
full_text = convert_pdf_to_html(response.body)
File "MypROJEctspiders\forc_spider.py", line 51, in convert_pdf_to_html
interpreter.process_page(page)
File "E:\Miniconda2\envs\contact2E\lib\site-packages\pdfminer\pdfinterp.py", line 834, in process_page
self.render_contents(page.resources, page.contents, ctm=ctm)
File "E:\Miniconda2\envs\contact2E\lib\site-packages\pdfminer\pdfinterp.py", line 846, in render_contents
self.execute(list_value(streams))
File "E:\Miniconda2\envs\contact2E\lib\site-packages\pdfminer\pdfinterp.py", line 876, in execute
raise PDFInterpreterError('Unknown operator: %r' % name)
PDFInterpreterError: Unknown operator: '\x00'
これは認識できないエラーですか?私は、問題はpdfが応答に埋め込まれていて、pdfminerによって正しく解析されていない可能性があると考えました。
申し訳ありませんが、いいえ、私はpdfminerを使用している時代には、灰色の毛があります。 それで早く働いたのですか?同じインストールで、同じresponse.body? – ahed87
ディスクに保存するとpdfを開くことはできますか?ソースを簡単に見てみると、解析対象のメソッドを認識できないときにエラーが発生し、不正な形式のpdfや特定のバージョンのマイナーがpdf-dialectをサポートしていないことがわかります。 – ahed87
ありがとう私は維持に最も近いと思われるpdfminer.sixに切り替えました。私はエラーを取得していないが、私も私のPDFを解析することはできません。私はすぐにフォローアップの質問を書くでしょう。 – user61629