如果你想上的字符串表示工作一個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