我收到了这个HTML字符串:
'<li><strong>Réf. Robster+ :</strong> 3185W061</li>'
我需要抓住参考3185I061。不可能使用正则表达式作为参考可能是非常不同的组合。
我的xpath对象(来自scrapy)返回:
In [124]: xpath_var
Out[124]: <Selector xpath='//*[@id="reference"]/ul/li' data='<li> <strong>Réf. Clim+ :</strong> 318506'>
和
xp.xpath('.').extract_first()
'<li><strong>Réf. Robster+ :</strong> 3185W061</li>'
如何至少删除该部件?
目前,我已尝试过这个:
xp.xpath('./[not(self::strong)]')
但它似乎是一个无效的表达。
答案 0 :(得分:0)
这会做你需要的吗?
>>> from lxml import etree
>>> from io import StringIO
>>> tree = etree.parse(StringIO('''<li><strong>Réf. Robster+ :</strong> 3185W061</li>'''))
>>> li = tree.xpath('//li')[0]
>>> list(li.itertext())
['Réf. Robster+ :', ' 3185W061']
编辑:我应该说更多。一旦使用xpath来定位li元素,它的itertext就可以用来获取它拥有的任何文本内容。
答案 1 :(得分:0)
以下是提取没有强标记内容的文本部分的方法。它有点令人困惑,因为你有2个xpath文本功能,不会返回相同的。在我的情况下,我使用的是text()
而不是/@text
。
>>> xp.xpath('.').extract_first()
>>> '<li><strong>Réf. Robster+ :</strong> 3185W061</li>'
>>> xp.xpath('./@text').extract_first()
>>>
>>> xp.xpath('./text()').extract_first()
>>> ' 3185W061'
这正是我想要的。