如何从HTML文档中仅提取粗体文本?

3
我需要提取HTML文档主体中所有加粗的片段。我需要在服务器端使用Java进行操作(而非在浏览器中)。
网页上的文本可以由标签,例如

等标签或内联CSS样式style="font-weight:bold;"或由外部CSS样式使用CSS类而加粗。
我正在使用Jsoup,但也可以使用其他库来完成此任务。
感谢您的时间!


1
页面是否有定义好的结构,还是可能会变化?如果可以,请提供一个HTML页面示例。 - Greg
1
你为什么添加了JavaScript的标签?Java可能更合适,不是吗? - MisterJ
如果你想在“服务器端”完成它,你应该将问题标记为“Java”。Jukka K. Korpela花费了一些时间为您提供了一个令人惊叹的高质量解决方案,而您却接受了一个有缺陷且廉价的解决方案,编辑您的问题和标签以使其“适合”解决方案。 - user1546328
对不起,Slytael。是我的错!感谢您添加标签。 - Himanshu Khurana
4个回答

2

一种纯JavaScript解决方案:在足够新的浏览器上,您可以使用getPropertyValue方法检索元素的计算样式。您可以遍历文档树并检查所有文本节点;文本节点没有样式,因此您需要检查它们的父元素:

function consume(string) {
  console.log(string);
}
function traverse(tree) {
  var i;
  if(tree.nodeType === 3) {
    if(getComputedStyle(tree.parentNode).getPropertyValue('font-weight') === 'bold') {
      consume(tree.textContent);
    }
  }
  for(i = 0; i < tree.childNodes.length; i++) {
    traverse(tree.childNodes[i]);
  }
}
traverse(document.body);

请用您自己的函数替换consume,以处理加粗文本。

即使声明为700font-weight的计算值似乎仍然是bold

请注意,这只会选择字体重量明确设置为粗体(700)的文本。具有计算字体重量为600、800或900的元素通常会以粗体出现(当然取决于可用字体)。通过对测试进行明显修改,可以覆盖它们。


太好了。你也有Java服务器端的解决方案吗? - Himanshu Khurana

1

不是一个很好的答案。请查看[FAQ],您必须解释该怎么做,而不仅仅是链接到可能的答案。 - tgkprog

1
对于标签和内联样式(例如直接添加到HTML中的样式,而不是包含在外部CSS样式表中),您可以使用CSS选择器link。(对于内联样式,它将是 [style * =“font-weight:bold;”] )。

1
那么通过外部样式表加粗的文本呢? - Jukka K. Korpela
在我的看法中,使用jsoup不可能做到。那么他就必须找另一个库或编写一个CSS解析器。OP没有说明他是否需要处理外部CSS样式表,因此我给了他一个解决方案并说明了它能够做些什么。 - MisterJ

0

只需通过标签名称获取元素,并循环遍历:

elem = document.getElementsByTagName("b");

for(i=0;i<elem.length;i++) {
    console.log(elem[i].innerText)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接