如何防止xpath在遇到的标记上添加逗号

时间:2014-08-15 02:24:49

标签: python xpath web-scraping scrapy

如何修改以下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>

2 个答案:

答案 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更好的解决方案。我只是把它作为另一种选择。