Python 爬虫- scrapy 入门
1 scrapy 入门
1.1 scrapy 框架创建步骤
- 创建一个 scrapy 项目
scrapy startproject
- 生成一个爬虫
scrapy genspider
- 提取数据
- 完善 spider ,通过 xpath 等方法
- 保存数据
- pipeline 中保存数据
1.1.1 创建一个 scrapy 项目
以下代码(创建-保存)仅做示范,不代表是一个完整的项目,不具有完全的连贯性
-
命令:
scrapy startproject +<项目名称>-
例如:
scrapy startproject myspider- 出现
就表示创建成功
- 出现
-
-
创建之后有一个在当前目录下新建一个工程目录
1.1.2 创建一个爬虫
-
命令:
scrapy genspider +<爬虫名字>+<允许爬取的域名>-
例如:
scrapy genspider zhangshan xingfa.org- 出现

- 表示爬虫文件创建成功
- 出现
-
-
注意:要在工程文件的 spiders 文件夹下面再创建爬虫
1.1.3 提取数据(完善 spider )
-
-
从选择器中提取字符串:
extract():返回一个包含字符串数据的列表extract_first():返回列表第一个字符串
- 这个有什么用?
- 只输出字符串
- 可以检查代码运行情况¥
- 如果返回得到一个空,则可能是前面出问题
- 如果返回得到一个列表内值为NULL或者报错,则是当前步骤出错
-
注意:
- spider 中的 parse 方法名不能修改¥
- 需要爬取的 url 地址必须是属于 allow_domin 下的链接¥
- response.xpath 返回的是一个含有 selector 对象[1]的列表
-
在 scrapy 中遇到空字符换行符时
-
使用:
normalize-space()-
例如:
#前: play = g.xpath('.//span[@class="so-icon watch-num"]/text()').extract() #后 play = g.xpath('normalize-space(.//span[@class="so-icon watch-num"]/text())').extract()#前 'play': '\n 238.1万\n ' #后 'play': '256.2万'
-
-
注意:¥
- 通过xpath得到的列表,必须先对列表进行遍历再用这个方法,否则结果只有一个内容
-
1.1.4 spider 数据传到 pipline
-
- 这里为什么使用 yield ,而不使用 return
- 首先明确,这 yeild 和 return 都可以使用,但是 yield 具备 return 的功能的同时,还具备一些 return 不具有的功能
- yield 是什么?
- yield 本身是一个函数,而主要用的是包含 yield 的函数的函数(这个函数称为生成器[2]),生成器每次产生一个值,函数被冻结,被唤醒后再产生一个值
- 生成器有什么用?
- 不会导致内存的占用量瞬间变高,更节省存储空间,响应更迅速,使用更灵活
- 这里为什么使用 yield ,而不使用 return
1.1.5 保存数据(使用pipeline)
-
-
完成 pipeline 后,需要在 setting 中设置开启 pipeline
-
- 注意:
- pipeline 的权重越小优先级越高¥
- pipeline 中的 process_item 方法名不能修改为其他名称¥
-
注释:
Scrapy 提供了自己的数据提取方法Selector(选择器)。Selector 是基于 lxml 来构建的,支持 XPath 选择器、CSS 选择器以及正则表达式。Selector 是一个可以独立使用的模块。我们可以直接利用 Selector 这个类来构建一个选择器对象,然后调用它的相关方法如 xpath()、css() 等来提取数据。 ??
简单理解就是生成器是一个不断产生值的函数 ??