0

このソースから一連の PDF をダウンロードしました: ' http://ec.europa.eu/growth/tools-databases/cosing/index.cfm?fuseaction=search.detailsPDF_v2&id=28157

PyPDF2 を使用して PDF をスクレイピングしたいのですが、テキストが返されません。

コードを別の pdf でテストしたところ、問題なく動作しました。

all_files = os.listdir('C:/Users/NAME.NAME/Downloads/Eu/T/')
count=0
count2=0
for filenames in all_files: 
   count +=1
   file_path='C:/Users/NAME.NAME/Downloads/Eu/T/'+filenames
   pdf_obj=open(file_path, 'rb')
   pdf_reader = PyPDF2.PdfFileReader(pdf_obj)
   num_pages = pdf_reader.numPages
   current_page=0
   text2=""
   pageObj= pdf_reader.getPage(current_page)
   text2 +=pageObj.extractText()
4

1 に答える 1

0

これは、PyPDF2 が一貫性のないスクレーパー であるためです。すべてのpdfが同じように構築されているわけではないことを覚えておく必要があります。そのため、pdfが構築された構造に基づいて、PyPDF2はそれをスクレイピングできる場合とできない場合があります。

通常、 pdf をスクレイピングしているときは、PyPDF2を使用してテキストを取得するかどうかに応じて、PyPDF2、pdfminer、およびslate3kを切り替える必要があります。私の意見では最も簡単なので、PyPDF2から始めます。

堅牢性の私の順序 (パッケージがpdfをどれだけうまくスクレイピングできるか):

1.) pdfマイナー

2.) スレート3k

3.) PyPDF2

スレート 3k の使用:

import glob as glob
all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'
for filenames in glob.glob(all_files): 
    with open(filenames,'rb') as f:
       pdf_text = slate.PDF(f)
       print(text)

pdfマイナーの使用

import glob as glob
import io
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage


def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, '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)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text
    
all_files = r'C:/Users/NAME.NAME/Downloads/Eu/T/*.pdf'
    
for files in glob.glob(all_files):
    convert_pdf_to_txt(files)   

 

必要な形式のテキストを取得するには、関数を変更する必要がある場合があります。前述のように、PDF は非常に多くの方法で構築できるため、テキストはさまざまな方法で出力できます。しかし、これで正しい方向に進むはずです。

于 2019-01-25T18:44:37.020 に答える