使用PHP在任意HTML中查找重要文本?
我有一些随机的HTML布局,其中包含我想提取的重要文本。我不能只使用PHP在任意HTML中查找重要文本?,php,regex,dom,text-parsing,Php,Regex,Dom,Text Parsing,我有一些随机的HTML布局,其中包含我想提取的重要文本。我不能只strip_tags(),因为那样会在侧边栏/页脚/页眉等处留下一堆多余的垃圾 我发现了一个,我想知道在PHP中是否有类似的东西 这个概念相当简单:使用 关于文本密度的信息 vs.HTML代码来计算一行 文本值得输出。(这不是 一个新颖的想法,但它是有效的!)基本的 过程如下: 解析HTML代码并跟踪处理的字节数 按每行或每段存储文本输出 将所需的HTML字节数与每个文本行关联 描述一下 通过计算文本的比率来计算每行的文本密度 t>
strip_tags()
,因为那样会在侧边栏/页脚/页眉等处留下一堆多余的垃圾
我发现了一个,我想知道在PHP中是否有类似的东西
这个概念相当简单:使用
关于文本密度的信息
vs.HTML代码来计算一行
文本值得输出。(这不是
一个新颖的想法,但它是有效的!)基本的
过程如下:
更新:我开始悬赏一个可以从随机HTML模板中提取主要内容的答案。由于我无法共享我将要使用的文档,所以只需选择任意博客站点,并尝试从布局中提取正文。请记住,页眉、侧边栏和页脚也可能包含文本。有关想法,请参见上面的链接。我不久前曾参与过一个类似的项目。它没有Python脚本那么复杂,但它会做得很好。查看简单的HTML PHP解析器 可以用来解析html文档,然后可以通过PHP查询这些文档
编辑:wikied取决于您的HTML结构,如果您有id或类,您可能会变得有点复杂,并使用preg_match()专门获取特定开始和结束标记之间的任何信息。这意味着您应该知道如何编写正则表达式 您还可以查看浏览器仿真PHP类。我已经为页面抓取做了这项工作,它工作得很好,这取决于DOM的格式。我个人喜欢SimpleBrowser
- 是一个基于jQuery JavaScript库的服务器端、可链接、CSS3选择器驱动的文档对象模型(DOM)API
更新2
- 演示:
- 在取自和的休闲博客列表上进行测试
#侧栏、#页眉、#页脚、#注释等
script,iframe
/\d+\scomment(?[s])/im
/(阅读其余部分|阅读更多内容)。*/im
/(?:.*?:由提交人提交?:ed)?.*\s(上午十点到下午六点))/im
/[^a-z0-9]+/im
搜索熟悉的类和ID:
- typepad.com
。输入内容
- org
.post entry.entry.post
- movabletype.com
.post
- blogger.com
.post body.entry content
- drupal.com
.content
- tumblr.com
.post
- squarespace.com
。日记账分录文本
- expressionengine.com
.entry
- gawker.com
.post body
- Ref:
基于常见html结构进行搜索,如下所示:
<div>
<h1|h2|h3|h4|a />
<p|div />
</div>
我开发了一个可以用于此目的的软件包
它由一组类组成,这些类可以链接在一起,以在HTML/XML代码中执行一系列解析、过滤和转换操作
它的目的是处理现实世界的页面,因此它可以处理格式错误的标记和数据结构,因此它可以尽可能多地保留原始文档
它附带的一个过滤器类可以进行DTD验证。另一个可以丢弃不安全的HTML标记和CSS以防止XSS攻击。另一个可以简单地提取所有文档链接
所有这些过滤器类都是可选的。如果你需要的话,你可以用你想要的方式把它们连在一起
所以,为了解决您的问题,我不认为在PHP anywhere中已经有一个特定的解决方案,但是可以为它开发一个特殊的过滤器类。看看这个包裹。它被彻底地记录下来
如果您需要帮助,只需查看我的个人资料并发送邮件给我,我甚至可以开发出满足您需要的过滤器,最终在其他语言的任何解决方案中得到启发 “提取”是什么意思?用完整完整的HTML(如
)提取,还是只提取文本?我不会重新实现这个。要么直接使用python模块$text=exec(“python-m…”)
,要么使用一个在线服务@Pekka,我宁愿将标记元素(如代码块或对象嵌入)与文本一起使用,但也可以只使用纯文本@马里奥-谢谢!这看起来是一个很好的开始——但我确实需要一些可以在本地运行的东西,如果可能的话,我宁愿不在我的服务器应用程序中添加Java(相关)来处理标记。对于密度和内容,您必须找到一些额外的工具。您可能正在寻找类似可读性算法的东西,请参阅此问题以了解更多信息和实现:这只是一个普通的DOM解析器,需要您了解布局才能找到所需的内容。这些是我正在处理的任意HTML文件,因此它们的结构通常非常不同。@Xeon不一定:您可以遍历每个元素并检查其textNode
值(或任何元素的名称)
<div>
<h1|h2|h3|h4|a />
<p|div />
</div>
$doc = phpQuery::newDocumentFile('http://blog.com')->find('h1,h2,h3,h4')->parent()->children('p,div');