代码之家  ›  专栏  ›  技术社区  ›  Yossale

如何解析网页的内容?

  •  2
  • Yossale  · 技术社区  · 16 年前

    我正在编写一个特殊的爬虫类应用程序,它需要检索各种页面的主要内容。只是澄清一下:我需要这一页真正的“肉”(当然,如果有肉的话)

    我尝试过各种方法:

    1. 许多页面都有RSS提要,因此我可以阅读提要并获取此页面特定的内容。
    2. 许多页面使用“内容”元标记
    3. 在很多情况下,屏幕中间显示的对象是页面的主要“内容”

    然而,这些方法并不总是有效的,我注意到Facebook做的非常好(当你想附加一个链接时,他们会在链接页面上显示他们找到的内容)。

    所以-你有什么建议给我的方法,我已经看了?

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  1
  •   Aaron Digulla    16 年前

    对于网页来说,没有标准的方法来标记“这是肉”。大多数页面甚至不想这样做,因为这样可以更容易地窃取他们的核心业务。因此,您必须编写一个框架,它可以使用每页规则来定位您想要的内容。

        2
  •  0
  •   Mike Trpcic    16 年前

    嗯,你的问题还是有点含糊。在大多数情况下,“爬虫”只需要在网络上以文本格式查找数据,并对其进行存储、解析等处理。“facebook截图”完全是另一种野兽。

    如果您只是在寻找一个基于Web的爬虫程序,那么有几个库可以非常容易地用于遍历网页的DOM,并且可以获取您要查找的内容。

    如果您使用的是python,请尝试 Beautiful Soup 如果你用的是Ruby,试试看 hpricot

    如果您希望在以后处理网页的全部内容,只需在“html”标签下获取并存储所有内容。

    下面是一个漂亮的例子,可以从一个页面上获取所有链接:

    require 'hpricot'
    require 'open-uri'
    doc = Hpricot(open("http://www.stackoverflow.com"))
    (doc/"a").each do |link|
      puts link.attributes['href']
    end
    

    编辑:如果你主要是从同一个网站上获取内容(例如Reddit的评论部分、StackOverflow的问题、Digg链接等),你可以对它们的格式进行硬编码,这样你的爬虫就可以说,“好的,我在Reddit上,用‘Thing’类获取所有内容。”您还可以为它提供一个要查找的默认内容的列表,例如class/id为“main”、“content”、“center”的div。