仅刮取网页的主要内容(忽略页眉,页脚和侧边栏)

时间:2013-03-26 17:15:07

标签: php xpath screen-scraping

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

对谷歌而言,它为大多数html设计组合制作了程序。但即使是谷歌,制作通用解析器,我认为是不可能的。