Html 如何使用XPath选择非空段落?
我想抓取的网页有类似的结构。每个段落都有一个问题段落和一个答案段落。我想把每个问题和答案都擦掉,并存储在两个项目中 问题是,在某些页面上,问题和答案分别是Html 如何使用XPath选择非空段落?,html,xml,xpath,scrapy,Html,Xml,Xpath,Scrapy,我想抓取的网页有类似的结构。每个段落都有一个问题段落和一个答案段落。我想把每个问题和答案都擦掉,并存储在两个项目中 问题是,在某些页面上,问题和答案分别是//xxx/p[1]和//xxx/p[2],但在其他页面上,//xxx/p[1]是一个空段落,没有任何文本,这是一个额外的空间。对于这些页面,//xxx/p[1]无法满足我的需求 那么是否有一个XPath表达式可以选择一个节点下的非空段落呢?如果没有文本,可以使用 //p[.//text()] 选择包含文本的段落。如果“空”段落包含空格(例如
//xxx/p[1]
和//xxx/p[2]
,但在其他页面上,//xxx/p[1]
是一个空段落,没有任何文本,这是一个额外的空间。对于这些页面,//xxx/p[1]
无法满足我的需求
那么是否有一个XPath表达式可以选择一个节点下的非空段落呢?如果没有文本,可以使用
//p[.//text()]
选择包含文本的段落。如果“空”段落包含空格(例如换行符),则必须首先规范化空格:
//p[normalize-space(.//text())]
可以缩短为
//p[normalize-space()]
如果将non-empty定义为表示段落具有任何类型的内容,则以下XPath将是您想要的:
//xxx/p[node()]
这将不选择
和
,但将选择以下各项:
文本
文本
和
以及上面的案例3和案例4:
换句话说,它将只选择案例1和案例2,这两种情况下段落的字符串值不是空的。可能重复//xxx/p[text()]
//xxx/p[string(.)]