用pdfminer.six打开一个PDF,从一个URL中打开。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用pdfminer.six打开一个PDF,从一个URL中打开。相关的知识,希望对你有一定的参考价值。
背景:Python 3.7 Python 3.7 & pdfminer.six
使用这里的信息。用Python从PDF导出数据我有以下代码。
import io
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage
def extract_text_from_pdf(pdf_path):
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle)
page_interpreter = PDFPageInterpreter(resource_manager, converter)
with open(pdf_path, 'rb') as fh:
for page in PDFPage.get_pages(fh,
caching=True,
check_extractable=True):
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
# close open handles
converter.close()
fake_file_handle.close()
if text:
return text
if __name__ == '__main__':
path = '../_pdfs/mypdf.pdf'
print(extract_text_from_pdf(path))
这可以工作(yay!),但我真正想做的是通过它的url直接请求pdf,而不是打开一个已经预先保存到本地驱动器的pdf。
我不知道如何修改 "with open "逻辑以从远程url调用,也不确定我最好使用最新版本的Python的哪个请求库 (requests, urllib, urllib2, 等等)。
我是Python的新手,所以请记住这一点 (P.s. 我找到了其他的问题,但是没有一个能让我满意的 - 可能是因为它们都很老了。)
任何帮助都将非常感激! 任何帮助都将非常感激!谢谢
答案
你可以使用 PyPDF2
来解析一个pdf文件。试试这个。
import requests, PyPDF2
# Fill address with your url
try:
response = requests.get(address)
except:
print("Error")
my_raw_data = response.content
with open("my_pdf.pdf", 'wb') as my_data:
my_data.write(my_raw_data)
my_data.close()
open_pdf_file = open("my_pdf.pdf", 'rb')
try:
read_pdf = PyPDF2.PdfFileReader(open_pdf_file)
except:
print("Failed to read, Press Enter to continue :")
if read_pdf.isEncrypted:
read_pdf.decrypt("")
n = read_pdf.getNumPages()
for x in range(0,n):
try:
s = read_pdf.getPage(x).extractText()
except:
print("Error in",i)
continue
print(s)
另一答案
我的解决方法如下。
from io import StringIO, BytesIO
import urllib.request
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage
def extract_text_from_pdf_url(url, user_agent=None):
resource_manager = PDFResourceManager()
fake_file_handle = StringIO()
converter = TextConverter(resource_manager, fake_file_handle)
if user_agent == None:
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
headers = {'User-Agent': user_agent}
request = urllib.request.Request(url, data=None, headers=headers)
response = urllib.request.urlopen(request).read()
fb = BytesIO(response)
page_interpreter = PDFPageInterpreter(resource_manager, converter)
for page in PDFPage.get_pages(fb,
caching=True,
check_extractable=True):
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
# close open handles
fb.close()
converter.close()
fake_file_handle.close()
if text:
# If document has instances of \xa0 replace them with spaces.
# NOTE: \xa0 is non-breaking space in Latin1 (ISO 8859-1) & chr(160)
text = text.replace(u'\xa0', u' ')
return text
以上是关于用pdfminer.six打开一个PDF,从一个URL中打开。的主要内容,如果未能解决你的问题,请参考以下文章
办公自动化:几行代码将PDF文档转换为WORD文档(代码实战)!