Php 智能抓取第一段/起始文本

Php 智能抓取第一段/起始文本,php,regex,data-mining,Php,Regex,Data Mining,我想有一个脚本,我可以输入一个网址,它将智能地抓取文章的第一段。。。除了从标记中提取文本外,我不知道从何处开始。你知道关于如何做这类事情的任何提示/教程吗 更新 为了进一步澄清,我在我的网站上建立了一个部分,用户可以在这里提交类似于Facebook的链接,它将从他们的网站上抓取一张图片,以及与链接相关的文本。我正在使用PHP,并试图确定实现这一点的最佳方法 我之所以说“聪明”,是因为我想尝试获取该页面上重要的内容,不仅是第一段,而且是最重要内容的第一段。如果您想要获取的页面是外来的,甚至是本地的

我想有一个脚本,我可以输入一个网址,它将智能地抓取文章的第一段。。。除了从
标记中提取文本外,我不知道从何处开始。你知道关于如何做这类事情的任何提示/教程吗

更新

为了进一步澄清,我在我的网站上建立了一个部分,用户可以在这里提交类似于Facebook的链接,它将从他们的网站上抓取一张图片,以及与链接相关的文本。我正在使用PHP,并试图确定实现这一点的最佳方法


我之所以说“聪明”,是因为我想尝试获取该页面上重要的内容,不仅是第一段,而且是最重要内容的第一段。

如果您想要获取的页面是外来的,甚至是本地的,但您事先不知道其结构,我认为实现这一点的最佳方法是使用php


简单回答:你不能

为了让PHP脚本“智能地”从页面获取“最重要”的内容,脚本必须理解页面上的内容。PHP不是自然语言处理器,这也不是一个微不足道的研究领域。可能有一些用于PHP的NLP工具包,但我仍然怀疑这是否容易

一个可以通过合理努力实现的解决方案是使用HTML解析器获取整个页面,然后查找在博客引擎中常见的具有特定类名或ID的元素。您还可以解析hAtom微格式。或者,您可以在文档中查找元标记和更清晰的定义信息。

我不久前写了一篇文章来提取网页的主要内容。它使用一种启发式方法来扫描文档中的所有文本节点,并在相似的深度将节点分组,然后假设最大的分组是主文章


当然,这种方法有其局限性,没有一种方法能在100%的网页上工作。这只是一种方法,还有很多其他方法可以实现。在这个问题上,你可能还想看看类似的东西。

不要用正则表达式,那么,你只会陷入一个痛苦的世界。此外,
不必在普通HTML中关闭。在大多数网站上,最重要的段落将位于h1标记之后。它们只是本地URL吗?i、 e.你知道你事先抓取的页面结构吗?(相关)除非我们知道构成“文章第一段”的内容,否则无法回答这个问题。此外,你可能需要详细阐述你所认为的“智能”。如果没有这些说明,您最好熟悉相关链接中给出的一个解析器。什么是
get\u file\u contents
?为什么要用它来代替
DOMDocument::loadHTMLFile()
?我的错:它是file\u get\u contents(),我不确定DOMDocument::loadHTMLFile()是否可以与远程URL一起使用,结果证明这是一种不好的方法,因为它需要有效的结束标记和其他内容things@Webnet不,没有。DOM可以很好地处理被破坏的HTML。这种方法最有可能跨不同的站点工作。例如,除非您知道您总是在解析WordPress站点,否则您不能基于标记或结构进行假设。启发式分析是最不容易出错的方法,但它相对容易被大量使用Ajax或Javascript来呈现或操作站点内容的站点击败。Facebook使用网站类型字典(WordPress、YouTube等),只有在没有预定义解析器的情况下才会回过头来分析页面。此外,请注意bit.ly链接和其他重定向/缩短器。
function get_first_paragraph($url)
{
  $page = file_get_contents($url);
  $doc = new DOMDocument();
  $doc->loadHTML($page);
  /* Gets all the paragraphs */
  $p = $doc->getElementsByTagName('p');
  /* extracts the first one */
  $p = $p->items(0);
  /* returns the paragraph's content */
  return $p->textContent;
}