智能自动抓取
我遇到了一个问题,我需要从很多不同的HTML数据源中提取数据,每个数据源里都有一个包含很多行的表格,比如国家名称、电话号码、每分钟的价格。
我想建立一个半自动的抓取工具,它会尝试:
自动找到HTML页面中正确的表格, -- 可能是通过搜索一些示例数据的文本,来找到包含这些数据的共同HTML元素。
提取表格的行, -- 通过查看上面提到的两个元素,选择相同的模式。
识别每一列包含的内容, -- 使用一些模糊算法来猜测每一列代表的是什么。
把数据导出到Python或其他列表中, -- 并清理所有内容。
这样的设计看起来好吗?如果你用Python编程,你会选择什么工具来实现呢?
2 个回答
我找不到更好的解决办法。
用XPath来找到合适的表格是很方便的。
这个设计看起来好吗?
不好。
如果你用Python编程,你会选择什么工具来做这个?
Beautiful Soup。
自动找到HTML页面中正确的表格,可能是通过搜索一些示例数据的文本,试图找到包含这两者的共同HTML元素。
这个主意不好。更好的办法是写一个小脚本,找到所有的表格,提取表格和表格的XPath。然后让人查看这个表格,把XPath复制到脚本里。
提取行——通过查看上面两个元素并选择相同的模式。
这个主意也不好。更好的办法是写一个小脚本,找到所有的表格,提取带有标题的表格。然后让人查看这个表格,配置一小段Python代码,把表格的列映射到一个命名元组中的数据元素。
识别哪一列包含什么——使用一些模糊算法来猜测哪一列是什么。
这个人可以很轻松地做到。
把它导出到某个Python或其他列表中——清理所有内容。
这个主意差不多不错。
一个人选择正确的XPath来找到表格。然后写一小段代码,把列名映射到一个命名元组。给定这些参数,Python脚本就可以获取表格,映射数据并生成一些有用的输出。
为什么要让人参与?
因为网页上常常充满了各种错误。
经过三年的实践,我很确定模糊逻辑和“尝试寻找”以及“选择相同模式”这些方法并不好,也不管用。
写一个简单的脚本来创建页面的“数据概况”要容易得多。
写一个简单的脚本,读取配置文件并进行处理,也要容易得多。