如何使用 XPath 提取同一标签下的所有文本?
How to extract all text under the same tag using XPath?
<span rel="v:addr">
<span property="v:region">
<a href="https://tabelog.com/en/tokyo/">
123
</a>
</span>
<span property="v:locality">
<a href="https://tabelog.com/en/tokyo/A1317/A131710/rstLst/">
456
</a>
<a href="https://tabelog.com/en/rstLst/">
789
</a>
10
</span>
<span property="v:street-address">
</span>
</span>
我想提取 span 标签内没有任何内容的文本 space 并在最后将其作为一个字符串。
我想要这个结果:
12345678910
下面是我的代码:
'AddressLocalityJap':"".join(response.xpath('normalize-space(//*[@id="anchor-rd-detail"]/section[1]/table/tbody/tr[4]/td/p[2]/span/span[2]//text()').extract())
您可以通过//span/span
获取所有跨度。并在每个跨度中获取文本使用 text_content()
。并使用正则表达式替换所有空白字符。
import re
from lxml import html
tree = html.fromstring(html_source)
span = tree.xpath("//span/span", smart_strings=0)
text = ''.join([re.sub(r"\s+", '', item.text_content()) for item in span])
纯 XPath 1.0 解决方案
这个 XPath,
translate(string(normalize-space()), ' ', '')
将return
12345678910
根据要求为您的 HTML。
<span rel="v:addr">
<span property="v:region">
<a href="https://tabelog.com/en/tokyo/">
123
</a>
</span>
<span property="v:locality">
<a href="https://tabelog.com/en/tokyo/A1317/A131710/rstLst/">
456
</a>
<a href="https://tabelog.com/en/rstLst/">
789
</a>
10
</span>
<span property="v:street-address">
</span>
</span>
我想提取 span 标签内没有任何内容的文本 space 并在最后将其作为一个字符串。
我想要这个结果:
12345678910
下面是我的代码:
'AddressLocalityJap':"".join(response.xpath('normalize-space(//*[@id="anchor-rd-detail"]/section[1]/table/tbody/tr[4]/td/p[2]/span/span[2]//text()').extract())
您可以通过//span/span
获取所有跨度。并在每个跨度中获取文本使用 text_content()
。并使用正则表达式替换所有空白字符。
import re
from lxml import html
tree = html.fromstring(html_source)
span = tree.xpath("//span/span", smart_strings=0)
text = ''.join([re.sub(r"\s+", '', item.text_content()) for item in span])
纯 XPath 1.0 解决方案
这个 XPath,
translate(string(normalize-space()), ' ', '')
将return
12345678910
根据要求为您的 HTML。