如果你想上的字符串表示工作一个HTML元素,XPath有一个string()
function,可以是非常有用的。
一旦你有一个元素的单个字符串,你可以应用正则表达式的单词。
下面是一个示例Python解释器会话(我不得不改变你的标记位,以匹配显示的结果):
>>> import scrapy
>>>
>>> response = scrapy.Selector(text=u'<p><a href="path" title="저">저</a>는 좋아요</p>')
.//text()
将选择所有后代文本节点,作为单独的字符串时.extract()
ED(2在这种情况下字符串):
>>> response.xpath('.//p//text()').extract()
[u'\uc800', u'\ub294 \uc88b\uc544\uc694']
并与正则表达式,你会发现1个字,然后2个字:
>>> response.xpath('.//p//text()').re(ur'[\uac00-\ud7af]+')
[u'\uc800', u'\ub294', u'\uc88b\uc544\uc694']
>>> for e in response.xpath('.//p//text()').re(ur'[\uac00-\ud7af]+'):
... print e
...
저
는
좋아요
如果段落元素上使用XPath string()
功能,你会得到一个字符串,即使该元素具有其他孩子一样a
:
>>> response.xpath('string(.//p)').extract()
[u'\uc800\ub294 \uc88b\uc544\uc694']
>>> print response.xpath('string(.//p)').extract_first()
저는 좋아요
然后你就可以申请你的正则表达式来分割上话:
>>> response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+')
[u'\uc800\ub294', u'\uc88b\uc544\uc694']
>>> for e in response.xpath('string(.//p)').re(ur'[\uac00-\ud7af]+'):
... print e
...
저는
좋아요
注意string(node-set)
只考虑在第一个元素的节点集合传递作为参数,所以一定要确保你的XPath表达式第一个你想要的元素相匹配,或者与涉农供应链,你也可以链XPath表达式PY选择:
>>> for e in response.xpath('.//p').xpath('string(.)').re(ur'[\uac00-\ud7af]+'):
... print e
...
저는
좋아요
是' ''。加入(富)'有帮助吗? – eLRuLL
请参阅编辑请 – deltaskelta
将其分解为两部分提取:提取链接后的文本('좋아요')并提取链接文本本身。如果您单独执行此操作,则可以将'저'和'는'连接在一起。 – GHajba