我想从网站下载pdf文件并使用该文本。但是,我不想创建一个pdf文件,然后将其转换为文本。我使用python请求。有没有办法在下面的代码后直接获取文本?
res = requests.get(url, timeout=None)
答案 0 :(得分:4)
AFAIK,您必须至少创建一个临时文件,以便您可以 执行你的过程。
您可以使用以下代码获取/读取PDF文件并将其转换为TEXT文件。 这使用了PDFMINER和Python 3.7。
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import HTMLConverter,TextConverter,XMLConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import io
def convert(case,fname, pages=None):
if not pages:
pagenums = set()
else:
pagenums = set(pages)
manager = PDFResourceManager()
codec = 'utf-8'
caching = True
output = io.StringIO()
converter = TextConverter(manager, output, codec=codec, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
infile = open(fname, 'rb')
for page in PDFPage.get_pages(infile, pagenums, caching=caching, check_extractable=True):
interpreter.process_page(page)
convertedPDF = output.getvalue()
print(convertedPDF)
infile.close()
converter.close()
output.close()
return convertedPDF
调用上述程序的主要功能:
import os
import converter
import sys, getopt
class ConvertMultiple:
def convert_multiple(pdf_dir, txt_dir):
if pdf_dir == "": pdf_dir = os.getcwd() + "\\" # if no pdfDir passed in
for pdf in os.listdir(pdf_dir): # iterate through pdfs in pdf directory
print("File name is %s", os.path.basename(pdf))
file_extension = pdf.split(".")[-1]
print("file extension is %s", file_extension)
if file_extension == "pdf":
pdf_file_name = pdf_dir + pdf
path = 'E:/pdf/' + os.path.basename(pdf)
print(path)
text = converter.convert('text', path) # get string of text content of pdf
text_file_name = txt_dir + pdf + ".txt"
text_file = open(text_file_name, "w") # make text file
text_file.write(text) # write text to text file
pdf_dir = "E:/pdf"
txt_dir = "E:/text"
ConvertMultiple.convert_multiple(pdf_dir, txt_dir)
当然你可以对它进行更多调整,可能还有一些改进的余地,但这肯定有用。
请确保不提供pdf文件夹提供临时pdf 直接提交。
希望这可以帮助你...快乐的编码!
答案 1 :(得分:1)
PyPDF2可以正常工作,如果您只需要输入文字
在anaconda终端(或)cmd提示符下安装PyPDF2软件包https://pypi.org/project/PyPDF2/
pip install PyPDF2
您可以使用以下代码来获取/读取PDF文件并将其转换为TEXT文件
import PyPDF2
from PyPDF2 import PdfFileReader, PdfFileWriter
def getText2PDF(pdfFileName,password=''):
pdf_file=open(pdfFileName,'rb')
read_pdf=PyPDF2.PdfFileReader(pdf_file)
if password !='':
read_pdf.decrypt(password)
text=[]
for i in range(0,read_pdf.getNumPages()):
text.append(read_pdf.getPage(i).extractText())
return ('\n'.join (text).replace("\n",''))
getText2PDF('0001.pdf')
今天从“使用NLTK进行文本处理”源中找到了该解决方案。
对我来说很棒
答案 2 :(得分:0)
如果您的pdf文件位于AWS S3(简单存储服务)中,请传递未签名的URL。
import boto3
from PyPDF2 import PdfFileReader
from io import BytesIO
def extract_PDF(url): #URL where the pdf is stored online
CF="https://<Bucket_name>.<Website>.com/"
object_name = url.replace(CF,'')
bucket_name="<Bucket_name>.<Website>.com"
s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, object_name)
fs = obj.get()['Body'].read()
pdfFile = PdfFileReader(BytesIO(fs))
text=""
for page_no in range(len(pdfFile.pages)):
page = pdfFile.getPage(page_no)
text += page.extractText()
text = text.replace('\n','')
text = text.replace(' ','')
return text