我正在尝试识别网页上的所有文本元素。基于我在stackoverflow上阅读的几个线程,我提出了以下XPath:
//*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//.
//*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//text()
但是,我注意到,尽管它可以识别出Amazon产品页面上的数百个文本元素,但其中省略了一些重要的元素。
例如:
在this页上,我无法识别“功能”部分和按时间排序:
“ Echo Show带给您关于Alexa的所有爱好。”
'希望明天..
在this页上,我无法识别描述部分(紧靠产品图片的右侧)
这两个页面上的文本都突出显示在页面上,因此我看不出为什么没有相应地标识它们。
我知道其中一些文本在ul/li
标签下,但我认为这不是问题。
最后,可以将所述XPath与另一个属性值组合在一起,以便仅标识具有给定属性值(即//*[normalize-space(.)=.][not(self::script or self::style or self::meta)]//.
+ .//*[@id='XYZ']
)的文本元素
谢谢
答案 0 :(得分:2)
尝试使用:
//*[text()[not(normalize-space()='')]]
这将选择任何具有text()节点的元素作为直接子元素,而不仅仅是空白。