解读搜索结果

问题描述:

我的任务是编写一个程序,给定一个搜索字词和代表某个未知搜索引擎搜索结果的页面的HTML源代码(它可以是任何东西,博客,商店,谷歌,eBay ,...)需要建立包含“结果内容”的结果的数据结构:搜索结果的标题,“详细信息”链接,结果中的位置等。不知道结果页面包含任何数据,以及是否有任何搜索结果。目标是将数据结构提供给另一个提取含义的程序。解读搜索结果

我在找的不是BeautifulSoup或RegExp,而是一些关于如何解释HTML源代码的聪明想法或算法。我该怎么做才能找出页面的哪一部分构成单个结果项目?如何过滤标记噪声以提取重要的位?你会怎么做?指向研究领域的研究领域包括我非常感谢的尝试。

谢谢,西蒙

我怀疑存在银子弹算法,无需任何培训只会在任意搜索查询输出工作。

然而,这个任务可以解决,并在许多应用程序中实际解决,但以不同的方法。首先,您必须根据您实际要使用的内容(可能是名称,日期,链接,描述片段等)定义单个搜索结果项的一般结构,然后编写将提取必要的html解析器的数量必需的字段来自特定网站的搜索结果输出。

我知道这不是超级性感的解决方案,但它可能是唯一有效的解决方案。这不是火箭科学。编写解析器实际上非常简单,你可以每天打十几个。如果您将查看搜索结果的html源代码,您会注意到输出结果通常非常结构化并标有特定div部分或属性,因此在文档中很容易找到它。你甚至没有使用任何复杂的HTML解析库,grep-like就足够了。

例如,在这个特定页面上,您的问题始于<div class="post-text">并以</div>结尾。它们之间的所有内容实际上都是带有一些HTML格式的文本文本,您可能希望删除其中的多余空格和“\ n”。而这个<div class="post-text">只出现在页面上一次。

一旦您大规模地使用您的检索应用程序,您会发现在不同网站上没有大量不同的搜索引擎,并且您将能够重新使用已创建的解析器,搜索引擎。

你必须记住的唯一事情就是内置的自我测试。网站往往会不时升级和改变设计。如果您的应用程序要存活一段时间,则需要在解析器中包含一些逻辑来检查其结果的有效性,并在每次搜索输出已更改且不再与解析器兼容时通知您。然后,您将不得不修改特定的解析器或编写新的解析器。

希望这会有所帮助。