请教 Python 中 xpath 如何实现这种需求

2021-03-24 16:04:26 +08:00
 2bin

如下,我想获取 a 标签下的文本,aaabbbccc 作为列表一个值,而不是["aaa","bbb","ccc"],该如何处理呢?

from lxml import etree

html_str='''
<span class="til">
    <a href="http://www.xxxx.com">
        "aaa"
        <br>
        "bbb"
        "ccc"
        <br>
    </a>
</span>
'''

html = etree.HTML(html_str)
content = html.xpath('//a/text()')
print(content)

"""
output:
['\n        "aaa"\n        ', '\n        "bbb"\n        "ccc"\n        ', '\n    ']
"""
2134 次点击
所在节点    Python
12 条回复
ch2
2021-03-24 16:14:32 +08:00
改用 BeautifulSoup,取 node.text
QuinceyWu
2021-03-24 16:28:28 +08:00
price = [x.strip() for x in content if x.strip() != '']
str1 = price[1].replace(" ", "").replace("\n", '').replace('"', "")
str2 = price[0].replace('"', '')
print(str2+str1)
meiyoumingzi6
2021-03-24 16:32:24 +08:00
列表都拿到了, 拼起来不就好了?
mekingname
2021-03-24 16:35:27 +08:00
content = ''.join(x.strip() for x in html.xpath('//a/text()'))
polarpy
2021-03-24 16:41:29 +08:00
拿出来的值替换换行跟空格
mrleohe
2021-03-24 16:48:05 +08:00
''.join([i.strip() for i in ''.join(html.xpath('//a/text()')).split('"') ])
CLCLCLCLCL
2021-03-25 12:04:46 +08:00
html = etree.HTML(html_str)
content = html.xpath('string(//a)')

直接用 string 就行
2bin
2021-03-25 17:24:24 +08:00
@CLCLCLCLCL 试了下,貌似只能提取第一个 a 标签的,有多个 a 后面不知道怎么提取出来
zyb201314
2021-03-26 00:31:45 +08:00
#这样?
html = etree.HTML(html_str)
lst=[]
for a in html.xpath('//span//a'):
content = a.xpath('.//text()')
l=''.join("".join(content).split()).replace('"',"")
lst.append(l)
print(lst)
CLCLCLCLCL
2021-03-26 11:07:34 +08:00
@2bin 是的, 循环一下 a 标签就行, 看你想用哪个了
dongxiao
2021-03-26 15:36:17 +08:00
html.xpath("string(//a)")
2bin
2021-03-26 18:01:49 +08:00
@zyb201314
@CLCLCLCLCL
谢谢两位,已经解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX