mywang88
2018-12-16
背景
Scrapy 框架是一个经典的 Python 爬虫框架。
Scrapy 框架中的 Selector 类提供了多种 html/xml 节点选择器的方法,例如:css 选择器、xpath 选择器、re 选择器等。
使用 scrapy.Selector 类的好处之一,就是不需要再导入(import)其它工具包,例如 lxml 等,直接调用选择器,并输入对应语法即可。
在开发和测试中,有时我们需要单独使用 Scrapy 框架的 Selector 类的方法,而不是创建一个完整的 Scrapy 项目,因为创建一个项目需要好多步骤。例如,当我们只需要发送一个 get 请求,然后解析响应体(html 代码),那么我们明显更倾向于使用 requests 库的 get 方法,而不是使用 Scrapy 框架(创建一个项目,创建一个爬虫,创建 start_request 方法,创建 parse 方法,在命令行模式下启动爬虫,初始化各种设置,加载各种中间件,等等等等)。
笔者就遇到了这样的需求:
不启动 Scrapy 框架,在程序中单独使用 scrapy.Selector 类
这样做还有一个好处,那就是这样开发出的解析函数可以直接用在已有的 Scrapy 框架项目中,而不需要额外导入其它依赖。
方法
实现方法可以概括成一句话:
用要解析的 html 代码,创建一个 scrapy.Selector