>  기사  >  백엔드 개발  >  Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예)

Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예)

不言
不言앞으로
2018-10-24 17:15:1813432검색

이 기사의 내용은 Python이 PDF 파일(코드 예제)에서 테이블 데이터를 크롤링하는 방법에 대한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

이 글에서는 약간 다른 크롤러를 보여드리겠습니다.
  과거에는 웹페이지가 일반적으로 HTML, CSS 및 JavaScript 코드로 작성되었기 때문에 우리 크롤러는 인터넷에서 데이터를 크롤링했습니다. 따라서 웹페이지의 다양한 데이터를 크롤링할 수 있는 성숙한 기술이 많이 있습니다. 이번에 크롤링해야 할 문서는 PDF 파일입니다. 이 기사에서는 Python의 camelot 모듈을 사용하여 PDF 파일에서 표 형식 데이터를 크롤링하는 방법을 보여줍니다.
  일상 생활과 업무에서 PDF 파일은 의심할 여지 없이 가장 일반적으로 사용되는 파일 형식 중 하나입니다. 교과서, 코스웨어부터 계약서, 계획 문서에 이르기까지 우리 모두가 이 파일 형식을 볼 수 있습니다. 하지만 PDF 파일에서 테이블을 추출하는 방법은 큰 문제입니다. PDF에는 테이블을 나타내는 내부 표현이 없기 때문입니다. 이로 인해 분석을 위해 표 형식 데이터를 추출하기가 어렵습니다. 그렇다면 PDF에서 테이블 데이터를 어떻게 크롤링합니까?
 답은 파이썬의 카멜롯 모듈입니다!
 Camelot은 PDF 파일에서 표 형식의 데이터를 누구나 쉽게 추출할 수 있는 Python용 모듈입니다. 다음 명령을 사용하여 카멜롯 모듈을 설치할 수 있습니다(설치하는 데 시간이 오래 걸림):

pip install camelot-py

카멜롯 모듈의 공식 문서 주소는 https://camelot-py.readthedoc입니다. ...
 다음은 카멜롯 모듈을 사용하여 PDF 파일에서 표 형식 데이터를 크롤링하는 방법을 보여줍니다.

예 1

  먼저 간단한 예를 살펴보겠습니다. 예: eg.pdf, 전체 파일에는 페이지가 하나만 있고 이 페이지에는 테이블도 하나뿐입니다. 다음: #🎜 🎜#

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)
# 🎜🎜#Output 결과는 다음과 같습니다.
<tablelist>
<table>
[['ID', '姓名', '城市', '性别'], ['1', 'Alex', 'Shanghai', 'M'], ['2', 'Bob', 'Beijing', 'F'], ['3', 'Cook', 'New York', 'M']]<p> 분석 코드, camelot.read_pdf()는 테이블에서 데이터를 추출하는 camelot의 기능입니다. 입력 매개변수는 PDF 파일의 경로, 페이지 번호(페이지)입니다. ) 및 테이블 구문 분석 방법(스트림 및 격자 두 가지 방법 사용). 테이블 구문 분석 방법의 경우 기본 방법은 격자이며 스트림 방법은 기본적으로 전체 PDF 페이지를 테이블로 구문 분석합니다. 구문 분석된 페이지에서 영역을 지정해야 하는 경우 table_area 매개변수를 사용할 수 있습니다. </p> 카멜롯 모듈의 편리한 점은 추출된 테이블 데이터를 tables[0].df, tables[0].to_csv() 함수 등 pandas, csv, JSON, html로 직접 변환하는 함수를 제공한다는 점입니다. 등. 출력 csv 파일을 예로 들어 보겠습니다. <p></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 파일은 다음과 같습니다.

#🎜🎜 ##🎜🎜 #예제 2Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예) 예 2에서는 PDF 페이지의 특정 영역에 있는 테이블 데이터를 추출하겠습니다. PDF 파일의 페이지(부분)는 다음과 같습니다.

PDF 파일에서 유일한 테이블을 추출하려면 전체 페이지에서 테이블 위치를 지정해야 합니다. PDF 파일의 좌표계는 그림의 좌표계와 다릅니다. 왼쪽 아래 꼭지점을 원점으로 하고, 오른쪽이 x축이고 위쪽이 y축입니다. 다음 Python 코드를 통해 전체 페이지를 출력할 수 있습니다. Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예)

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)임을 확인합니다. read_pdf() 함수에 table_area 매개변수를 추가합니다. 전체 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))
Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예)출력 결과는 다음과 같습니다.

<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

#🎜 🎜#In PDF 페이지에서 표를 구체적으로 식별할 때 영역을 지정하는 매개변수 외에 위 첨자, 아래 첨자, 셀 병합 등의 매개변수도 있습니다. 자세한 사용법은 카멜롯 공식 문서 홈페이지를 참고하세요. : https://camelot-py.readthedoc....

위 내용은 Python에서 PDF 파일의 표 형식 데이터를 크롤링하는 방법(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제