我正在尝试从购物网站抓取内容,然后将其保存在数据库表“产品”中。抓取此类内容需要了解每个站点的 DOM 结构。不仅是 DOM 结构,还有菜单中类别的层次结构。
有许多解决方案可以通过为每个站点设置配置来实现此目的,然后使用 regx、XPath 或 css 选择器查找包含(例如产品名称、价格、型号等)的特定 html 元素。
是否有任何解决方案可以避免为每个站点进行设置配置并自动抓取产品属性?
有一个类似的解决方案可以处理像 Readability 这样的新闻,它会查找 <p>
的序列。标签和图像。由于新闻站点相似且结构简单,新闻更容易,
最佳答案
没有什么 Elixir ,但是您可以使用 XSLT 作为您的网站和抓取程序之间的主要“绑定(bind)”。 XSLT 支持是通过 Html Agility Pack 内置的。
至少它将最大限度地减少网站发展或更改其结构时所需的工作量,而不是仅依赖于纯粹的过程代码。更改 XSLT(一旦您习惯了)文本将不需要编译,并且更相当于“配置”系统。但是,您仍然必须为每个目标网站至少定义一个 XSLT 文件(当然,除非这些网站是基于同一软件构建的)。
您可以查看此链接以获取 XSLT 示例:Use HtmlAgilityPack to divy up a document
关于xpath - 针对特定内容的网页抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554304/