Heim >Backend-Entwicklung >Python-Tutorial >So crawlen Sie Tabellendaten aus PDF-Dateien in Python (Codebeispiel)
Der Inhalt dieses Artikels handelt davon, wie Python tabellarische Daten aus PDF-Dateien crawlen kann. Ich hoffe, dass er für Sie hilfreich ist.
Dieser Artikel zeigt einen etwas anderen Crawler.
In der Vergangenheit haben unsere Crawler Daten aus dem Internet gecrawlt, da Webseiten im Allgemeinen in HTML-, CSS- und JavaScript-Codes geschrieben sind. Daher gibt es eine große Anzahl ausgereifter Technologien zum Crawlen verschiedener Daten in Webseiten. Diesmal handelt es sich bei den Dokumenten, die wir crawlen müssen, um PDF-Dateien. In diesem Artikel wird gezeigt, wie Sie das Camelot-Modul von Python verwenden, um Tabellendaten aus PDF-Dateien zu crawlen.
In unserem täglichen Leben und Arbeiten sind PDF-Dateien zweifellos eines der am häufigsten verwendeten Dateiformate. Von Lehrbüchern und Kursunterlagen bis hin zu Verträgen und Planungsdokumenten können wir alle dieses Dateiformat sehen. Aber wie man Tabellen aus PDF-Dateien extrahiert, ist ein großes Problem. Weil es in PDF keine interne Darstellung zur Darstellung einer Tabelle gibt. Dies macht es schwierig, tabellarische Daten für die Analyse zu extrahieren. Wie crawlen wir also Tabellendaten aus PDF?
Die Antwort ist Pythons Camelot-Modul!
Camelot ist ein Python-Modul, mit dem jeder problemlos tabellarische Daten aus PDF-Dateien extrahieren kann. Sie können den folgenden Befehl verwenden, um das Camelot-Modul zu installieren (die Installation dauert lange):
pip install camelot-py
Die offizielle Dokumentationsadresse des Camelot-Moduls lautet: https://camelot-py.readthedoc... .
Im Folgenden wird gezeigt, wie Sie das Camelot-Modul zum Crawlen tabellarischer Daten aus PDF-Dateien verwenden.
Schauen wir uns zunächst ein einfaches Beispiel an: zB.pdf, die gesamte Datei hat nur eine Seite und es gibt nur eine Tabelle auf dieser Seite, wie folgt:
Verwenden Sie den folgenden Python-Code, um die Tabelle in der PDF-Datei zu extrahieren:
import camelot # 从PDF文件中提取表格 tables = camelot.read_pdf('E://eg.pdf', pages='1', flavor='stream') # 表格信息 print(tables) print(tables[0]) # 表格数据 print(tables[0].data)
Das Ausgabeergebnis ist:
<tablelist> <table> [['ID', '姓名', '城市', '性别'], ['1', 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'New York', 'M']] <p>Camelot.read_pdf() ist die Funktion von Camelot zum Extrahieren von Daten aus einer Tabelle. Die Eingabeparameter sind der Pfad der PDF-Datei, die Seitenzahl (Seiten) und die Tabellenanalysemethode (es gibt zwei Methoden). Strom und Gitter). Für die Tabellenanalysemethode ist Lattice die Standardmethode, und die Stream-Methode analysiert standardmäßig die gesamte PDF-Seite als Tabelle. Wenn Sie den Bereich auf der analysierten Seite angeben müssen, können Sie den Parameter table_area verwenden. <br> Der Vorteil des Camelot-Moduls besteht darin, dass es Funktionen zum direkten Konvertieren extrahierter Tabellendaten in Pandas, CSV, JSON und HTML bereitstellt, z. B. Tabellen[0].df, Tabellen[0].to_csv() Funktion warten. Nehmen wir als Beispiel die Ausgabe einer CSV-Datei: </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')
Die resultierende CSV-Datei sieht wie folgt aus:
In Beispiel 2 extrahieren wir Tabellendaten in einem bestimmten Bereich der PDF-Seite. Die Seiten (Teile) der PDF-Datei lauten wie folgt:
Um die einzige Tabelle auf der gesamten Seite zu extrahieren, müssen wir sie lokalisieren der Standort der Tabelle. Das Koordinatensystem der PDF-Datei unterscheidet sich von dem des Bildes. Es verwendet den Scheitelpunkt der unteren linken Ecke als Ursprung, die x-Achse nach rechts und die y-Achse nach oben Die gesamte Seite kann über den folgenden Python-Code ausgegeben werden:
import camelot # 从PDF中提取表格 tables = camelot.read_pdf('G://Statistics-Fundamentals-Succinctly.pdf', pages='53', \ flavor='stream') # 绘制PDF文档的坐标,定位表格所在的位置 tables[0].plot('text')
Das Ausgabeergebnis ist:
UserWarning: No tables found on page-53 [stream.py:292]
Der gesamte Code hat die Tabelle nicht gefunden. Dies liegt daran, dass die Stream-Methode die gesamte PDF-Seite behandelt standardmäßig als Tabelle, daher wurde die Tabelle nicht gefunden. Das Bild der gezeichneten Seitenkoordinaten sieht jedoch wie folgt aus:
Wenn wir die vorherige PDF-Seite sorgfältig vergleichen, können wir leicht feststellen, dass die Koordinaten der oberen Die linke Ecke des der Tabelle entsprechenden Bereichs ist (50.620) und die Koordinaten der unteren rechten Ecke sind (500.540). Wir fügen den Parameter „table_area“ zur Funktion „read_pdf()“ hinzu. Der vollständige Python-Code lautet wie folgt:
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))
Das Ausgabeergebnis lautet:
<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>
zur spezifischen Identifizierung von PDF Seiten Beim Erstellen einer Tabelle gibt es neben den Parametern zur Angabe des Bereichs auch Parameter wie Hoch- und Tiefstellung, Zellenzusammenführung usw. Eine detaillierte Verwendung finden Sie auf der offiziellen Dokument-Website von Camelot: https://camelot- py.readthedoc....
Das obige ist der detaillierte Inhalt vonSo crawlen Sie Tabellendaten aus PDF-Dateien in Python (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!