7

我熟悉在 php 中抓取和使用 XPATH 来解析 DOM 以从页面中获取我想要的内容。我想听到一些关于如何以编程方式忽略页面上的页眉、页脚和侧边栏的建议,并且只提取主体内容。

给出的情况是没有特定的目标,所以我不能简单地忽略特定的ID,比如#header 和#footer,因为每个页面的写法都略有不同。

我知道谷歌这样做,我知道这一定是可能的,我只是不知道从哪里开始。

谢谢!

4

2 回答 2

2

没有确定的方法来确定它,但您可以使用启发式方法获得合理的结果。一条建议:

从同一个网站上抓取两个或多个页面,然后从顶层开始逐块比较它们,深入几层,直到块足够相等。比较不会是 == 而是相似性指数,例如similar_text. 超过一定相似性百分比的块很可能是页眉、页脚或菜单。您必须通过实验找出哪个阈值有用

于 2013-03-31T11:51:42.237 回答
1

没有小而快的方法可以从网页中抓取内容。我已经做了很多这些。这没有简单的规则。在基于 html3/table 的设计时代的早期,有不同的识别方式,并且网站设计本身受到限制。屏幕尺寸有限,因此菜单通常位于顶部,右侧或左侧面板没有空间。然后是带有桌子设计的面板的时代。现在是浮动内容的时代。然后我们甚至使用溢出:隐藏,所以它更难通过字数等来了解正文。

在编写 html 文件时,代码永远不会被标记为内容或菜单。您有时可以从类名中派生出它,但这不是通用的。内容从 CSS 中获取其大小和位置。所以你的解析器永远无法确定页面的正文部分。如果您使用嵌入式 html 查看器并在渲染后使用 DHTML/JS 来定位块的大小,可能有一些方法可以做到这一点,但它仍然永远不会通用。我的建议是制作你的解析器并逐个改进它。

对于 google,它已经为大多数 html 设计组合制作了程序。但即使对于谷歌来说,制作一个通用解析器,我认为也是不可能的。

于 2013-03-31T07:59:38.697 回答