ホームページ >バックエンド開発 >Python チュートリアル >Python で PDF ファイルから表形式データをクロールする方法 (コード例)

Python で PDF ファイルから表形式データをクロールする方法 (コード例)

不言
不言転載
2018-10-24 17:15:1813470ブラウズ

この記事の内容は、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 ファイルから表形式データをクロールする方法を示します。

例 1

まず、簡単な例を見てみましょう: eg.pdf. 次のように、ファイル全体には 1 ページのみがあり、このページにはテーブルが 1 つだけあります。

Python で PDF ファイルから表形式データをクロールする方法 (コード例)

次の 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 ファイルは次のとおりです。

Python で PDF ファイルから表形式データをクロールする方法 (コード例)

例 2

例 2 では、PDF ページの特定の領域にある表データを抽出します。 PDF ファイルのページ (部分) は次のとおりです。

Python で 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 ページ全体を処理するためです。デフォルトではテーブルとして設定されるため、テーブルは見つかりません。ただし、描画されたページ座標のイメージは次のとおりです。

Python で 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>

summary

PDFページ 表を作成する際には、領域を指定するパラメータの他に、上付きや下付き、セルの結合などのパラメータがあります。詳しい使い方はcamelot公式ドキュメントWebサイトをご参照ください:https://camelot -py.readthedoc....

以上がPython で PDF ファイルから表形式データをクロールする方法 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。