2013-09-01 70 views
2

我试图从购物网站上刮取内容,然后将其保存在我的数据库表中的产品中。刮这些内容需要了解每个站点的DOM结构。不仅DOM结构,而且菜单中的类别层次结构。特定内容的网页搜索

有许多解决方案通过为每个站点设置配置,然后使用regx,XPath或css选择器查​​找包含(例如产品名称,价格,型号...)的特定html元素来实现此目的。

是否有解决方案来避免每个站点的设置配置和自动刮取产品属性?

有一个类似的解决方案,处理像Readability这样的新闻,它寻找<p>标签和图像的序列。由于新闻网站和简单结构之间的相似性,对于新闻来说更容易,

+0

你可以自动执行的过程:给定文本值,发现页面上的文本,然后按[生成的含元素的CSS选择器(HTTP: //stackoverflow.com/a/4588211/405017)。但是,不能保证生成的选择器是稳定的。你可以花费几天的时间收集多个页面的脚本,并使用启发式方法试图找到一种常见的模式......或者你可以用你的大脑根据明显的(对人类)模式生成一个好的选择器。 – Phrogz

回答

1

没有什么灵丹妙药,但是你可以做的就是使用XSLT作为你的站点和你的抓取程序之间的主要“绑定”。 XSLT支持使用Html Agility Pack构建。

至少它会减少网站在进化或改变其结构时所需的工作量,而不是仅仅依靠纯粹的程序代码。改变XSLT(一旦你习惯了)文本将不需要编译,更像是“配置”系统。但是,您仍然必须为每个目标网站至少定义一个XSLT文件(除非这些网站是建立在相同的软件上)。

您可以检查此链接的XSLT例如:Use HtmlAgilityPack to divy up a document

1

如果您想要抓取的网站没有其html结构的一般模式,则必须为每个网站配置脚本。

只有当你幸运时,你不必重新配置你的脚本。

ps:通常web刮板从头开始构建它们的代码。