从格式错误的pdf表中抓取数据

时间:2016-07-31 11:52:14

标签: html css regex python-2.7 pdf

我正在尝试从布局不合理的pdf(以下代码中的URL)中抓取数据。我需要使用有关表格的行/边界位置的信息来制作有意义的数据记录。

url="http://www.cmc.gv.ao/sites/main/pt/Lists/CMC%20%20PublicaesFicheiros/Attachments/89/Lista%20de%20Institui%C3%A7%C3%B5es%20Registadas%20(actualizado%2004.07.16).pdf"

import scraperwiki, urllib2, re
u = urllib2.urlopen(url)
xml=scraperwiki.pdftoxml(u.read()) # interpret pdf as xml

XML行并不表示表格行如何分解信息。典型的线条如下所示:

<text top="678" left="493" width="103" height="12" font="6">Besa Património </text>

在我的浏览器元素检查器中,HTML稍微详细一些,但我仍然没有看到有关表格行位置的信息。

我花了相当多的时间来处理这个问题,所以如果首先尝试任何推测性答案,我会很感激。问题是,如何获得表格线的位置?

1 个答案:

答案 0 :(得分:0)

获取您需要的表格边框:

  • 解压缩PDF并迭代对象(不确定,但pdfrw可能会迭代objects
  • 在PDF中搜索线条和矩形。此特定PDF将线条表示为以下矩形(4个值后跟re命令):

270.17 749.85 182.81 20.67 re

270.17 414.16 182.81 20.76 re

如果您设法解压缩PDF(使用pdfrw或其他工具),那么您可以尝试制作一个简单的解析器,或者只是针对所有对象运行正则表达式:

  • 收集所有矩形
  • 按类似的X和Y坐标分组矩形
  • 找到X和Y边框的坐标
  • 最后将文本片段与特定列或行边界匹配(请注意Y坐标以PDF格式反转,请参阅pdf specification

这基本上是ByteScout PDF Multitool实用程序(不幸的是仅适用于Windows)和其他工作

的方式