【问题标题】:find repeat patterns in webpages in ruby在 ruby​​ 中查找网页中的重复模式
【发布时间】:2011-09-09 11:20:49
【问题描述】:

我正在尝试找到一种在网页中查找重复模式的方法,以便我可以将内容提取到我的数据库中。

编辑:我不知道重复模式是什么,所以我不能只通过正则表达式或其他东西搜索给定的模式。

例如,如果您有 10 个销售汽车的网站,但这些网站都不同,则在每个网站上查看汽车在 html 中以重复方式在该网站的页面下方列出。

其他网站将以不同的方式列出,但每个网站都有重复的模式。

有人知道怎么做,或者有过这种事情的经验吗?

我喜欢 ruby​​,所以如果有人拥有或知道任何可以帮助我的库/宝石,我希望在 ruby​​ 中做到这一点?

【问题讨论】:

  • 你能给我们一个简单的、虚拟的例子来解释你想要做什么吗?例如,给我们一个示例,说明您希望代码能够捕捉到的那种重复的文本/html?

标签: ruby regex search html-parsing pattern-matching


【解决方案1】:

在 Ruby 中,如果您想获取网页的文本,您所要做的就是使用 Net::HTTP 命名空间。 get 方法返回网页的字符串表示形式。

Net::HTTP.get 'http://www.target-site.com', '/target-page.html'

之后您可能会想要使用某种 XML 解析器来制作页面模型并在其上导航。我听说过关于Hpricot 的好消息。

【讨论】:

  • 谢谢,但我知道如何从网页中获取文本!!我也不想编写页面模型,因为这个问题的重点是它可以是任何网页!我需要在每个网页上找到一个重复的模式,以便我可以将库存列表拆分为每个项目。有什么想法???
  • 哈。好的,但是如果您知道如何编写可以读取页面的代码并且能够自行弄清楚数据的格式是什么,那么您可能会获得诺贝尔奖或其他东西。一般来说,您需要手动找出模式并创建一个使用该格式来抓取信息的脚本。
  • 这就是我当前的蜘蛛所做的,但想通过以下方式改进它:使用标签路径聚类从 Web 中提取数据记录??
【解决方案2】:

Rick,机器模式匹配是一个复杂的话题,并不是你可以在 Ruby 上找到开箱即用的好库。

Kyle 的回答是一个开始,一旦您使用 Ruby 获得页面,典型的技术就是 xpath 或“XML 路径语言”。

使用 Xpath,您可以编写简单的选择器来提取与模式匹配的每个项目,例如,HTML 文档上的每个链接可能是 //a,每个 h1 可能是 //h1,并且每个图像都直接位于div,图像具有“汽车”类的位置类似于://div/image[class="car"]

XPath 的结果是每个项目的可枚举列表,然后您可以查询子元素,获取元素的content(),并建立关系以提取您需要的数据。

Ruby 的首选库称为 Nokogiri,并且是 avaiable as a gem - 直接文档有点弱,但如果您知道要查找什么,它们都在那里。 p>

一些用于 Ruby 的库结合了爬行,以及一种将底层 HTML/XML 作为 Nokogiri 文档访问的简单方法,一个这样的例子是 Anemone,它是一个“在 Ruby 中构建网络蜘蛛的框架”——我可以强烈推荐。

【讨论】:

  • 谢谢,但关键是我不知道要匹配的模式,因为所有网站都会不同,因此我需要一种更聪明的方法在网页上查找模式,例如 Extracting Data Records from the Web Using Tag Path Clustering any想法??
  • @rick:您链接的论文描述了一个听起来不错的策略,您是否尝试过实现它或者您是否正在寻找现有的实现?
  • @maerics:不,我昨天才发现,我听起来确实不错,只是想检查一下这是否已经完成,或者在我尝试实施之前是否有人可以提供任何提示等!有什么想法???
  • @Rick,这就是我的观点,没有现成的简单软件,所以你必须求助于学术界来提供一些模式匹配资源......希望我的建议对你的爬虫部分有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多