Selector & exract

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinnnnnner/article/details/88231518

1.  xpath()

input: response.xpath('.//a')
output: [<Selector xpath='.//a' data=u'<a href="image1.html">Name: My image 1 <'>, <Selector xpath='.//a' data=u'<a href="image2.html">Name: My image 2 <'>, ]

即Xpath匹配后返回的是Selector数组,即使只有一个匹配的Selector,也是以数组形式返回的。在SelectorList上调用Xpath()函数后再次返回匹配的SelectorList。

2. get()

input: selectorList.get()
output: <a href="image1.html">Name: My image 1 <br><img src="image1_thumb.jpg"></a>

get()函数返回当前SelectorList匹配的第一个标签,getall()以数组形式返回所有标签。


3. 有一个比较有趣的问题:

selectorList = response.xpath('//*[@id="epContentLeft"]/h1/text()')
input: print(selectorList.extract())
output: [u'\u4eac\u4e1c\u56de\u5e94\u5728\u8c37\u6b4c\u4e0a\u5356\u8d27\uff1a\u65e9\u671f\u6d4b\u8bd5\u5c1a\u672a\u6b63\u5f0f\u5bf9\u5916\u5f00\u653e']
input: print(selectorList.get())
output: 京东回应在谷歌上卖货:早期测试 尚未正式对外开放
input: print(selectorList.getall())
output: [u'\u4eac\u4e1c\u56de\u5e94\u5728\u8c37\u6b4c\u4e0a\u5356\u8d27\uff1a\u65e9\u671f\u6d4b\u8bd5\u5c1a\u672a\u6b63\u5f0f\u5bf9\u5916\u5f00\u653e']


即在selectorList上应用extract()方法,理论上说是返回当前list的第一个selector的标签,应与get()方法得到的值相同。但extract()返回的是数组。

response.xpath('//*[@id="epContentLeft"]/h1/text()')[0].extract()
response.xpath('//*[@id="epContentLeft"]/h1/text()').extract()[0]
selectorList = response.xpath('//*[@id="epContentLeft"]/h1/text()').extract_first()

返回的均是正确的文本。
查询源码得:
对于Selector对象,extract = get,extract()串行化并将匹配到的节点返回一个unicode字符串列表。
对于SelectorList对象,extract = getall,extract_first = get,对列表中的各个元素调用 .extract() 方法,返回结果为单一化的unicode字符串列表。


 

猜你喜欢

转载自blog.csdn.net/sinnnnnner/article/details/88231518