拥有一个网页的HTML,如何获取该网页的可见文字?

拥有一个网页的HTML,如何获取该网页的可见文字?,html,Html,有了网页的HTML,获得相应页面上可见的文本的最简单策略是什么?我曾想过要得到介于。和之间的所有东西,,但效果不太好 请记住,这是一个学校项目,我不允许使用任何类型的外部库(想法是必须自己进行解析)。此外,这将在下载页面的HTML时实现,也就是说,我不能假设我已经下载了整个HTML页面。它必须在下载HTML时显示提取的可见单词 也不必为所有的情况而工作,只是在大多数时候都是令人满意的。 < P>我会考虑编写正则表达式来删除所有HTML标记,而你应该保留你想要的文本。这可以在JavaScript中

有了网页的HTML,获得相应页面上可见的文本的最简单策略是什么?我曾想过要得到介于
之间的所有东西,

,但效果不太好

请记住,这是一个学校项目,我不允许使用任何类型的外部库(想法是必须自己进行解析)。此外,这将在下载页面的HTML时实现,也就是说,我不能假设我已经下载了整个HTML页面。它必须在下载HTML时显示提取的可见单词


也不必为所有的情况而工作,只是在大多数时候都是令人满意的。

< P>我会考虑编写正则表达式来删除所有HTML标记,而你应该保留你想要的文本。这可以在JavaScript中完成,不需要任何特殊的东西。

< P>我会考虑编写正则表达式来删除所有HTML标记,并且应该保留你想要的文本。这可以用Javascript来完成,不需要任何特殊的东西。

从字面上看,所有可见的文本听起来像是学校项目的一个大要求,因为它不仅取决于HTML本身,还取决于任何页面内或外部样式。一种解决方案是简单地从输入中删除HTML标记,尽管这不能严格满足您所述的要求


假设near-enough足够好,你可以第一次去掉你知道不可见的整个元素的内容(例如
script
style
),第二次去掉剩下的标记本身。

实际上所有可见的文本听起来像是对学校项目的一个大要求,因为它不仅依赖于HTML本身,还依赖于任何页面内或外部样式。一种解决方案是简单地从输入中删除HTML标记,尽管这不能严格满足您所述的要求


假设near-enough足够好,您可以第一次删除您知道不可见的整个元素的内容(例如
script
style
),第二次删除剩余的标记本身。

我知道这并不是您所要求的,但是可以使用正则表达式来实现:

//javascript code
//should (could) work in C# (needs escaping for quotes) :
h = h.replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,'');
//javascript代码
//应该(可以)在C#中工作(需要转义引号):
h=h。替换(/])*>/g';
此RegExp将删除HTML标记,但请注意,您首先需要删除脚本、链接、样式等,。。。标签


如果您决定这样做,我可以帮助您使用所需的正则表达式。

我知道这并不是您想要的,但可以使用正则表达式:

//javascript code
//should (could) work in C# (needs escaping for quotes) :
h = h.replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,'');
//javascript代码
//应该(可以)在C#中工作(需要转义引号):
h=h。替换(/])*>/g';
此RegExp将删除HTML标记,但请注意,您首先需要删除脚本、链接、样式等,。。。标签

如果您决定这样做,我可以帮助您使用所需的正则表达式

我不允许使用任何类型的外部库

对于“软件架构”课程来说,这是一个很差的要求。正确解析HTML是极其困难的,当然这超出了课程练习的范围。任何涉及正则表达式黑客的天真方法都会在普通网页上严重失败

软件架构上正确的做法是使用一个已经解决了解析HTML问题的外部库(例如.NET的HTML Agility Pack),然后迭代它生成的文档对象,查找不在“不可见”元素(如
)中的文本节点

如果从网页中获取数据的任务是由您自己选择的,为了证明其他一些原则,那么我建议选择一个不同的挑战,一个您可以有效解决的挑战。例如,只需将输入从HTML更改为XML,就可以使用内置的XML解析器

我不允许使用任何类型的外部库

对于“软件架构”课程来说,这是一个很差的要求。正确解析HTML是极其困难的,当然这超出了课程练习的范围。任何涉及正则表达式黑客的天真方法都会在普通网页上严重失败

软件架构上正确的做法是使用一个已经解决了解析HTML问题的外部库(例如.NET的HTML Agility Pack),然后迭代它生成的文档对象,查找不在“不可见”元素(如
)中的文本节点


如果从网页中获取数据的任务是由您自己选择的,为了证明其他一些原则,那么我建议选择一个不同的挑战,一个您可以有效解决的挑战。例如,只需将输入从HTML更改为XML,您就可以使用内置的XML解析器。

HTML5包含对XML的详细描述。它可能比您正在寻找的更复杂,但这是推荐的方法。

HTML5包含对的详细描述。它可能比您正在寻找的更复杂,但这是推荐的方法。

您需要解析每个DOM元素的文本,然后检测该DOM元素是否可见(
el.style.display=='block'
'inline'
),然后,您需要检测该元素的位置是否不在页面的可视区域之外。然后,您需要检测每个元素的
z-index
,以及每个元素的背景,以便检测是否有重叠隐藏了某些文本


基本上,这不可能在一个月内完成。

您需要解析每个DOM元素的文本,而