如何修改以下xpath命令,不在任何子标记上添加逗号?
xpath('/a//text()').extract()
当前输出
C,-(,K,1,, ,K,2,)-convexity
但我想要的是:
C-(K1, K2)-convexity
页面来源的相关部分:
<a href=".."><i>C</i>-(<i>K</i><sub>1</sub>, <i>K</i><sub>2</sub>)-convexity</a>
答案 0 :(得分:4)
您提供的xpath没有任何问题,它只返回多个结果,一个列表,您需要join()
来制作单个字符串:
>>> ''.join(response.xpath('/a//text()').extract())
u'C-(K1, K2)-convexity'
这是Scrapy shell。
如果此值为scrapy.Field
值,则最好使用Output Processors。
答案 1 :(得分:2)
看起来你想要做的就是在捕捉到&#39; a&#39;之后删除html标签。标签,所以我使用正则表达式:
In [3]: import re
In [4]: [re.sub('<[^<]+?>', '', x) for x in response.xpath('/a').extract()]
Out[4]: [u'C-(K1, K2)-convexity']
请注意,extract会返回一个列表,因此我们需要列表理解,这将返回一个列表。
P.S。我并不是说这是比alecxe更好的解决方案。我只是把它作为另一种选择。