ホームページ >バックエンド開発 >Python チュートリアル >Python で PDF ファイルから表形式データをクロールする方法 (コード例)
この記事の内容は、Python が PDF ファイルから表形式データをクロールする方法 (コード例) に関するものです。一定の参考値があります。困っている友人が参照できます。お役に立てれば幸いです。
この記事では、少し異なるクローラーを紹介します。
従来、Web ページは HTML、CSS、JavaScript コードで記述されているため、当社のクローラーはインターネットからデータをクロールしていましたが、Web ページ内のさまざまなデータをクロールするための成熟したテクノロジーが多数存在します。今回、クロールする必要があるドキュメントは PDF ファイルです。この記事では、Python の Camlot モジュールを使用して PDF ファイルから表形式のデータをクロールする方法を説明します。
日常生活や仕事において、PDF ファイルは間違いなく最も一般的に使用されるファイル形式の 1 つであり、教科書やコースウェアから契約書や計画文書に至るまで、このファイル形式を誰もが目にすることがあります。しかし、PDF ファイルから表を抽出する方法は大きな問題です。 PDF にはテーブルを表す内部表現がないためです。このため、表形式のデータを分析のために抽出することが困難になります。では、PDF からテーブル データをクロールするにはどうすればよいでしょうか?
答えは、Python の Camlot モジュールです。
Camlot は、PDF ファイルから誰でも簡単に表形式のデータを抽出できる Python 用のモジュールです。次のコマンドを使用して、camelot モジュールをインストールできます (インストールには長い時間がかかります):
pip install camelot-py
Camelot モジュールの公式ドキュメントのアドレスは: https://camelot-py.readthedoc... 。
以下では、camelot モジュールを使用して PDF ファイルから表形式データをクロールする方法を示します。
まず、簡単な例を見てみましょう: eg.pdf. 次のように、ファイル全体には 1 ページのみがあり、このページにはテーブルが 1 つだけあります。
次の Python コードを使用して、PDF ファイル内の表を抽出します:
import camelot # 从PDF文件中提取表格 tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream') # 表格信息 print(tables) print(tables[0]) # 表格数据 print(tables[0].data)
出力結果は次のとおりです:
<tablelist> <table> [['ID', '姓名', '城市', '性别'], ['1', 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'New York', 'M']]<p>分析コード、camelot.read_pdf() は、テーブルからデータを抽出する Camlot の関数です。入力パラメータは、PDF ファイルのパス、ページ番号 (ページ)、テーブルの解析方法 (2 つの方法があります) です。ストリームと格子)。テーブル解析メソッドのデフォルトのメソッドはラティスであり、ストリームメソッドはデフォルトで PDF ページ全体をテーブルとして解析します。解析されたページ内の領域を指定する必要がある場合は、table_area パラメータを使用できます。 <br> Camlot モジュールの便利な点は、抽出されたテーブル データを pandas、csv、JSON、HTML に直接変換する関数 (tables[0].df、tables[0].to_csv() function wait など) を提供していることです。出力された CSV ファイルを例に挙げます。 </p> <pre class="brush:php;toolbar:false">import camelot # 从PDF文件中提取表格 tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream') # 将表格数据转化为csv文件 tables[0].to_csv('E://eg.csv')
取得された CSV ファイルは次のとおりです。
例 2 では、PDF ページの特定の領域にある表データを抽出します。 PDF ファイルのページ (部分) は次のとおりです。
ページ全体から唯一の表を抽出するには、テーブルの場所。 PDF ファイルの座標系は画像とは異なり、左下隅の頂点を原点とし、右に x 軸、上に y 軸をとります。次の Python コードを使用してページ全体を出力できます:
import camelot # 从PDF中提取表格 tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \ flavor='stream') # 绘制PDF文档的坐标,定位表格所在的位置 tables[0].plot('text')
出力結果は次のとおりです:
UserWarning: No tables found on page-53 [stream.py:292]
コード全体ではテーブルが見つかりません。これは、ストリーム メソッドが PDF ページ全体を処理するためです。デフォルトではテーブルとして設定されるため、テーブルは見つかりません。ただし、描画されたページ座標のイメージは次のとおりです。
以前の PDF ページを注意深く比較すると、上部の座標が一致していることが簡単にわかります。テーブルに対応する領域の左隅の座標は (50,620)、右下隅の座標は (500,540) です。 table_area パラメータを read_pdf() 関数に追加します。完全な Python コードは次のとおりです:
import camelot # 识别指定区域中的表格数据 tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \ flavor='stream', table_area=['50,620,500,540']) # 绘制PDF文档的坐标,定位表格所在的位置 table_df = tables[0].df print(type(table_df)) print(table_df.head(n=6))
出力結果は次のとおりです:
<class> 0 1 2 3 0 Student Pre-test score Post-test score Difference 1 1 70 73 3 2 2 64 65 1 3 3 69 63 -6 4 … … … … 5 34 82 88 6</class>
PDFページ 表を作成する際には、領域を指定するパラメータの他に、上付きや下付き、セルの結合などのパラメータがあります。詳しい使い方はcamelot公式ドキュメントWebサイトをご参照ください:https://camelot -py.readthedoc....
以上がPython で PDF ファイルから表形式データをクロールする方法 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。