Scrapy选择器构建于 lxml 库之上:
- xpath
- css
- 正则
构造选择器
---------
- Selector(text=xxx)
- Selector(response=xxx)
以 `text` 或 `response` 构造。
~~~
$ scrapy shell
>>> from scrapy.selector import Selector
>>> from scrapy.http import HtmlResponse
~~~
以文字构造:
~~~
>>> Selector(text='hello world')
>>> body = '
good'>>> Selector(text=body).xpath('//span/text()').extract()
['good']
~~~
以response构造:
~~~
>>> response = HtmlResponse(url='http://example.com', body=body)
>>> Selector(response=response).xpath('//span/text()').extract()
['good']
~~~
简化
----
- `response.selector`
- `response.selector.xpath()` | `response.selector.css()`
- `response.xpath()` | `response.css()`
为方便使用,response 对象以 `.selector` 属性提供了一个 selector。
`response.selector.xpath` 快捷方式:`response.xpath`
`response.selector.css` 快捷方式:`response.css`
正则
--------
选择器还提供了正则作为补充。
如:xpath 中的 `contains()` 、`starts-with()` 函数无法满足需求是,可以使用正则 `test()` 方法
~~~
sel.xpath('//li[re:test(@class, "item-\d$")]//@href').extract()
~~~