html - 使用 Julia 从 HTML 文件中提取和构建表格

标签 html html-parsing julia gumbo

这是一个 public link到示例 html 文件。我想从文件中提取每组 CAN 和年度税收信息(下图中以红色突出显示的示例)并构建一个如下所示的数据框。

目标字段

enter image description here

示例数据框

| Row |          CAN | Crtf_NoCrtf | Tax_Year | Land_Value | Improv_Value | Total_Value | Total_Tax |
|-----+--------------+-------------+----------+------------+--------------+-------------+-----------|
|   1 | 184750010210 | Yes         |     2016 |      16720 |       148330 |      165050 | 4432.24   |
|   2 | 184750010210 | Yes         |     2015 |      16720 |       128250 |      144970 | 3901.06   |
|   3 | 184750010210 | Yes         |     2014 |      16720 |       109740 |      126460 | 3412.63   |
|   4 | 184750010210 | Yes         |     2013 |      16720 |       111430 |      128150 | 3474.46   |
|   5 | 184750010210 | Yes         |     2012 |      16720 |        99340 |      116060 | 3146.17   |
|   6 | 184750010210 | Yes         |     2011 |      16720 |       102350 |      119070 | 3218.80   |
|   7 | 184750010210 | Yes         |     2010 |      16720 |       108440 |      125160 | 3369.97   |
|   8 | 184750010210 | Yes         |     2009 |      16720 |       113870 |      130590 | 3458.14   |
|   9 | 184750010210 | Yes         |     2008 |      16720 |       122390 |      139110 | 3629.85   |
|  10 | 184750010210 | Yes         |     2007 |      16720 |       112820 |      129540 | 3302.72   |
|  11 | 184750010210 | Yes         |     2006 |      12380 |       112760 |             | 3623.12   |
|  12 | 184750010210 | Yes         |     2005 |      19800 |       107400 |             | 3882.24   |

附加信息

如果无法将 CAN 插入到每一行,那没关系,我可以单独导出 CAN 编号,并找到一种方法将它们附加到包含税值的数据框。我研究过使用漂亮的 python 汤,但我是 python 的绝对新手,我正在编写的其余脚本都是用 Julia 编写的,所以我宁愿用一种语言保留所有内容。

有什么方法可以实现我想要实现的目标吗?我看过Gumbo.jl但找不到任何详细的文档/教程。

最佳答案

所以 Gumbo.jl将解析 HTML 并为您提供 HTML 文件结构的编程表示(称为 DOM - 文档对象模型)。这通常是一个 html 标签树,您可以遍历它并提取您需要的数据。

为了使这更容易,您真正需要的是一种查询 DOM 的方法,这样您就可以提取所需的数据,而不必自己遍历整个树。 Cascadia.jl项目为你做这个。它建立在 Gumbo 之上,并使用 CSS selectors作为查询语言。

因此,对于您的示例,您可以使用类似于以下内容的内容来提取所有 CAN 字段:

julia> using Gumbo

julia> using Cascadia

julia> h=parsehtml(read("/Users/aviks/Download/z1.html", String))

julia> c = matchall(Selector("td:containsOwn(\"CAN:\") + td span"), h.root)
  13-element Array{Gumbo.HTMLNode,1}:
  Gumbo.HTMLElement{:span}:
  <span class="value">184750010210</span> 
   ...
#print all the CAN values
julia> for x in c
               println( x.children[1].text )
            end

  184750010210
  186170040070
  175630130020
  172640020290
  168330020230
  156340030160
  118210000020
  190490040500
  173480080430
  161160010050
  153510060090
  050493000250
  050470630910

希望这能让您了解如何提取所需的所有数据。

关于html - 使用 Julia 从 HTML 文件中提取和构建表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915962/

相关文章:

javascript - jQuery UI(在屏幕上可见时运行)

html - 用 BeautifulSoup 在 iframe 内部抓取

python - BeautifulSoup 未找到全部

python - 如何在保留 html 标签/结构的同时查找/替换 html 中的文本

julia - 访问 AST 以获取 Julia 中的泛型函数

javascript - 将 angularjs 模块与 ionic 框架链接时发生冲突

html - PlaceHolderMain 控制硬编码值的 td 宽度

python - 用 h2 标签替换 <strong> 标签

julia - 如何在 Julia 中按操作进行快速分组?

julia - 在 Julia 中将数组转换为 SharedArray