我正在寻找一个可以像这样在命令行上运行的工具:
tablescrape 'http://someURL.foo.com' [n]
如果未指定n
并且页面上有多个HTML 表格,则应将它们(标题行、总行数)汇总在一个编号列表中。
如果指定了 n
或者如果只有一个表,它应该解析该表并将其作为 CSV 或 TSV 输出到标准输出。
潜在的附加功能:
- 说真的,您可以在一个表中解析一个表,但就我的目的而言——从维基百科页面等获取数据——这太过分了。
- 将任何 unicode 归类的选项。
- 应用任意正则表达式替换以修复已解析表格中的怪异现象的选项。
你会用什么来拼凑这样的东西? Perl 模块 HTML::TableExtract可能是一个很好的起点,甚至可以处理嵌套表的情况。 这也可能是一个很短的 Python 脚本,带有 BeautifulSoup . 会 YQL是一个好的起点? 或者,理想情况下,您是否写过类似的东西并有指向它的指针? (我肯定不是第一个需要这个的人。)
相关问题:
最佳答案
这是我的第一次尝试:
http://yootles.com/outbox/tablescrape.py
它需要做更多的工作,比如更好的 asciifying,但它是可用的。例如,如果您将其指向此 list of Olympic records :
./tablescrape http://en.wikipedia.org/wiki/List_of_Olympic_records_in_athletics
它告诉你有 8 个表可用,很明显,第 2 和第 3 个(男子和女子记录)是你想要的:
1: [ 1 cols, 1 rows] Contents 1 Men's rec
2: [ 7 cols, 25 rows] Event | Record | Name | Nation | Games | Date | Ref
3: [ 7 cols, 24 rows] Event | Record | Name | Nation | Games | Date | Ref
[...]
然后如果你再次运行它,请求第二个表,
./tablescrape http://en.wikipedia.org/wiki/List_of_Olympic_records_in_athletics 2
你得到一个合理的明文数据表:
100 metres | 9.69 | Usain Bolt | Jamaica (JAM) | 2008 Beijing | August 16, 2008 | [ 8 ]
200 metres | 19.30 | Usain Bolt | Jamaica (JAM) | 2008 Beijing | August 20, 2008 | [ 8 ]
400 metres | 43.49 | Michael Johnson | United States (USA) | 1996 Atlanta | July 29, 1996 | [ 9 ]
800 metres | 1:42.58 | Vebjørn Rodal | Norway (NOR) | 1996 Atlanta | July 31, 1996 | [ 10 ]
1,500 metres | 3:32.07 | Noah Ngeny | Kenya (KEN) | 2000 Sydney | September 29, 2000 | [ 11 ]
5,000 metres | 12:57.82 | Kenenisa Bekele | Ethiopia (ETH) | 2008 Beijing | August 23, 2008 | [ 12 ]
10,000 metres | 27:01.17 | Kenenisa Bekele | Ethiopia (ETH) | 2008 Beijing | August 17, 2008 | [ 13 ]
Marathon | 2:06:32 | Samuel Wanjiru | Kenya (KEN) | 2008 Beijing | August 24, 2008 | [ 14 ]
[...]
关于html - 将给定 URL 中的 HTML 表格抓取到 CSV 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611418/