小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器

小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器

人生苦短,我用 Python

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

小白学 Python 爬虫(10):Session 和 Cookies

小白学 Python 爬虫(11):urllib 基础使用(一)

小白学 Python 爬虫(12):urllib 基础使用(二)

小白学 Python 爬虫(13):urllib 基础使用(三)

小白学 Python 爬虫(14):urllib 基础使用(四)

小白学 Python 爬虫(15):urllib 基础使用(五)

小白学 Python 爬虫(16):urllib 实战之爬取妹子图

小白学 Python 爬虫(17):Requests 基础使用

小白学 Python 爬虫(18):Requests 进阶操作

小白学 Python 爬虫(19):Xpath 基操

小白学 Python 爬虫(20):Xpath 进阶

小白学 Python 爬虫(21):解析库 Beautiful Soup(上)

小白学 Python 爬虫(22):解析库 Beautiful Soup(下)

小白学 Python 爬虫(23):解析库 pyquery 入门

小白学 Python 爬虫(24):2019 豆瓣电影排行

小白学 Python 爬虫(25):爬取股票信息

小白学 Python 爬虫(26):为啥买不起上海二手房你都买不起

小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)

小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)

小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息

小白学 Python 爬虫(30):代理基础

小白学 Python 爬虫(31):自己构建一个简单的代理池

小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门

小白学 Python 爬虫(33):爬虫框架 Scrapy 入门基础(一)

小白学 Python 爬虫(34):爬虫框架 Scrapy 入门基础(二)

引言

我们之前有介绍过通过 pyquery 、 Beautiful Soup 、 lxml 来提取网页数据。

但是在 Scrapy 中,同样也提供了自己独有的数据提取方式,即 Selector(选择器)。Selector 是基于 lxml 来构建的,支持 XPath 选择器、CSS 选择器以及正则表达式,功能全面,解析速度和准确度非常高。

独立使用

Scrapy Selectors 是 Parsel 库的包装。包装的目的是提供与 Scrapy Response 对象的更好的集成。

Parsel 是一个独立的 Web 抓取库,无需 Scrapy 即可使用。它在后台使用 lxml 库,并在 lxml API 之上实现了一个简单的 API 。这意味着 Scrapy 选择器的速度和解析精度与 lxml 非常相似。

我们可以写一个简单的示例代码来测试一下 Selectors 的单独使用。

from scrapy import Selector body = '<html><head><title>Hello Python</title></head></html>' selector = Selector(text=body) title = selector.xpath('//title/text()').extract_first() print(title)

执行结果如下:

Hello Python

这个简单的示例我们并没有在 Scrapy 框架中执行,而是把 Scrapy 中的 Selector 单独拿出来使用了。

Selector 的使用同其他解析库类似,如果方便的话,我们也可以在其他项目中直接使用 Selector 来提取数据。

Scrapy Shell

由于 Selector 主要是与 Scrapy 结合使用,如 Scrapy 的回调函数中的参数 response 直接调用 xpath() 或者 css() 方法来提取数据,所以在这里我们借助 Scrapy shell 来模拟 Scrapy 请求的过程,来讲解相关的提取方法。

这里我们借助官方文档的示例进行演示。

https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

为了完整起见,以下是其完整的HTML代码:

<html> <head> <base href='http://example.com/' /> <title>Example website</title> </head> <body> <div> <a href='http://www.likecs.com/image1.html'>Name: My image 1 <br /><img src='http://www.likecs.com/image1_thumb.jpg' /></a> <a href='http://www.likecs.com/image2.html'>Name: My image 2 <br /><img src='http://www.likecs.com/image2_thumb.jpg' /></a> <a href='http://www.likecs.com/image3.html'>Name: My image 3 <br /><img src='http://www.likecs.com/image3_thumb.jpg' /></a> <a href='http://www.likecs.com/image4.html'>Name: My image 4 <br /><img src='http://www.likecs.com/image4_thumb.jpg' /></a> <a href='http://www.likecs.com/image5.html'>Name: My image 5 <br /><img src='http://www.likecs.com/image5_thumb.jpg' /></a> </div> </body> </html>

首先,让我们开启 Scrapy shell,在命令行输入如下命令:

scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

这时,我们进入了 Scrapy Shell 模式,其实就是 Scrapy 发起了一次请求,然后把一些可操作的变量传递给我们:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjzdp.html