在寫爬蟲的時候,經常會使用xpath進行數據的提取,對於如下的代碼:
<div id="test1">大家好!</div>
使用xpath提取是非常方便的。假設網頁的源代碼在selector中:
data = selector.xpath('//div[@id="test1"]/text()').extract()[0]
就可以把“大家好!”提取到data變量中去。
然而如果遇到下面這段代碼呢?
<div id="test2">美女,<font color=red>你的微信是多少?</font><div>
如果使用:
data = selector.xpath('//div[@id="test2"]/text()').extract()[0]
只能提取到“美女,”;
如果使用:
data = selector.xpath('//div[@id="test2"]/font/text()').extract()[0]
又只能提取到“你的微信是多少?”
可是我本意是想把“美女,你的微信是多少?”這一整個句子提取出來。
這還不是最糟糕的,還有第三段代碼:
<div id="test3">我左青龍,<span id="tiger">右白虎,<ul>上朱雀,<li>下玄武。</li></ul>老牛在當中,</span>龍頭在胸口。<div>
而且內部的標簽還不固定,如果我有一百段這樣類似的html代碼,又如何使用xpath表達式,以最快最方便的方式提取出來?
我差一點就去用正則表達式替換了。還好我去Stack Overflow上面提了問。於是很快就有人給我解答了。
使用xpath的string(.)
以第三段代碼為例:
data = selector.xpath('//div[@id="test3"]')
info = data.xpath('string(.)').extract()[0]
這樣,就可以把“我左青龍,右白虎,上朱雀,下玄武。老牛在當中,龍頭在胸口”整個句子提取出來,賦值給info變量。
http://www.tuicool.com/articles/iqQFBn