0

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

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

谢谢,西蒙

4

1 回答 1

0

我怀疑是否存在一种无需任何培训就可以在任意搜索查询输出上工作的灵丹妙药算法。

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

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

例如,在此特定页面上,您的问题以 . 开头<div class="post-text">和结尾</div>。两者之间的所有内容实际上都是带有一些 HTML 格式的帖子文本,您可能希望将其连同多余的空格和“\n”一起删除。这<div class="post-text">仅在页面上出现一次。

一旦你大规模地使用你的检索应用程序,你会发现在不同的站点上没有那么多不同的搜索引擎,你将能够使用类似的搜索引擎重用已经创建的解析器。

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

希望这可以帮助。

于 2010-08-12T07:48:00.607 回答