Scrapy1.5 第三章 选择器(selector)
2018-03-05 07:43
295 查看
当你爬取网页的时候,你最常做的工作一定是提炼你抓到的网页,通常来说,我们用美味汤,或者lxml来完成这项工作。前者虽然各种意义上都很强,但是唯有一个缺点——太慢了。
Scrapy有他自己的一套选择器,基于xpath和css。Xpath选择器用于在XML文档中选择代码,而CSS选择器用于HTML文档。
Scrapy选择器是基于lxml库的,这意味这它兼顾了简洁与快速。
一、建构选择器
Scrapy选择器是Selector类的实例,由文本或者TextResponse对象构筑。它会自动挑选相对于比较好的解析方法(在xml和HTML中),当然,这是基于输入类型的。
>>> from scrapy.selector import Selector
>>> from scrapy.http import HtmlResponse 当然,也可以解析一串文本:>>> body = '<html><body><span>good</span></body></html>'
>>> Selector(text=body).xpath('//span/text()').extract()
[u'good'] 从response中作解析:>>> response = HtmlResponse(url='http://example.com', body=body)
>>> Selector(response=response).xpath('//span/text()').extract()
[u'good'] 二、使用选择器
为了解释选择器,我们将会使用Scrapy Shell(一个用来提供交互式测试的东西)来进行讲解,目标网页是:https://doc.scrapy.org/en/latest/_static/selectors-sample1.html(这是个用于测试的实验网站,请大胆的进行尝试!)。
为了便利各位,贴出上面那个网站的HTML代码:<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html> 首先,打开shell,输入以下命令(看不懂这条命令,赶紧回去看第二章):scrapy shell https://doc.scrapy.org/en/latest/_static/selectors-sample1.html 加载完shell之后,就让我们开始着手处理HTML数据吧。我们先构筑一条能够获得title标签内内容的xpath表达式。
[<Selector (text) xpath=//title/text()>]
>>> response.css('title::text')
[<Selector (text) xpath=//title/text()>] 如你所见,我们的选择器并没有返回实际的值,只是返回了一个SelectorList实例。如果你的眼神足够犀利的话,就会立马从这个实例名称中发现,这个实例是一个包含了selector的列表。>>> response.css('img').xpath('@src').extract()
[u'image1_thumb.jpg',
u'image2_thumb.jpg',
u'image3_thumb.jpg',
u'image4_thumb.jpg',
u'image5_thumb.jpg'] selector有一个叫做extract的方法,用来提取一些文本,就像下面展示的一样:>>> response.xpath('//title/text()').extract()
[u'Example website']如果你只想要第一个元素,那么就用extract_first()吧。当然,当根本找不到指定的元素的时候,这个方法就会返回None
Scrapy有他自己的一套选择器,基于xpath和css。Xpath选择器用于在XML文档中选择代码,而CSS选择器用于HTML文档。
Scrapy选择器是基于lxml库的,这意味这它兼顾了简洁与快速。
一、建构选择器
Scrapy选择器是Selector类的实例,由文本或者TextResponse对象构筑。它会自动挑选相对于比较好的解析方法(在xml和HTML中),当然,这是基于输入类型的。
>>> from scrapy.selector import Selector
>>> from scrapy.http import HtmlResponse 当然,也可以解析一串文本:>>> body = '<html><body><span>good</span></body></html>'
>>> Selector(text=body).xpath('//span/text()').extract()
[u'good'] 从response中作解析:>>> response = HtmlResponse(url='http://example.com', body=body)
>>> Selector(response=response).xpath('//span/text()').extract()
[u'good'] 二、使用选择器
为了解释选择器,我们将会使用Scrapy Shell(一个用来提供交互式测试的东西)来进行讲解,目标网页是:https://doc.scrapy.org/en/latest/_static/selectors-sample1.html(这是个用于测试的实验网站,请大胆的进行尝试!)。
为了便利各位,贴出上面那个网站的HTML代码:<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html> 首先,打开shell,输入以下命令(看不懂这条命令,赶紧回去看第二章):scrapy shell https://doc.scrapy.org/en/latest/_static/selectors-sample1.html 加载完shell之后,就让我们开始着手处理HTML数据吧。我们先构筑一条能够获得title标签内内容的xpath表达式。
>>> response.selector.xpath('//title/text()') [<Selector (text) xpath=//title/text()>]使用xpath或者css也可以用另外的更简单的办法——response.xpath()和response.css():>>> response.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]
>>> response.css('title::text')
[<Selector (text) xpath=//title/text()>] 如你所见,我们的选择器并没有返回实际的值,只是返回了一个SelectorList实例。如果你的眼神足够犀利的话,就会立马从这个实例名称中发现,这个实例是一个包含了selector的列表。>>> response.css('img').xpath('@src').extract()
[u'image1_thumb.jpg',
u'image2_thumb.jpg',
u'image3_thumb.jpg',
u'image4_thumb.jpg',
u'image5_thumb.jpg'] selector有一个叫做extract的方法,用来提取一些文本,就像下面展示的一样:>>> response.xpath('//title/text()').extract()
[u'Example website']如果你只想要第一个元素,那么就用extract_first()吧。当然,当根本找不到指定的元素的时候,这个方法就会返回None
相关文章推荐
- scrapy Selector 选择器
- Scrapy选择器Selector
- 使用scrapy选择器selector解析获取百度结果
- scrapy:选择器selector
- Scrapy学习篇(六)之Selector选择器
- android背景选择器selector用法、自定义Button按钮样式..........
- Android 仿微信的图片选择器ImageSelector的使用
- 浅谈android的selector背景选择器
- 浅谈android的selector背景选择器
- querySelector/querySelectorAll选择器两个容易忽略的点
- Android - GridView,自定义开关控件,状态选择器selector,自定义对话框,抽取style
- android背景选择器selector用法汇总
- android背景选择器selector用法汇总
- Items 控件- 选择器(selector)
- 浅谈android的selector,背景选择器
- 《CSS3实战》读书笔记 第三章:选择器:样式实现的标记
- Android通过selector选择器设置Button或者textview的背景颜色,字体颜色
- querySelectorAll 和 jQuery选择器
- Scrapy 1.5 第二章 命令行工具
- Android的selector,背景选择器