Python 爬虫- scrapy 入门
scrapy 入门
- scrapy 框架创建步骤
- 创建一个 scrapy 项目
scrapy startproject <project_name>
- 生成一个爬虫
scrapy genspider <name> <domain>
- 提取数据
- 完善 spider ,通过 xpath 等方法
- 保存数据
- pipeline 中保存数据
- 运行项目
scrapy crawl <project_name>
- 创建一个 scrapy 项目
1 创建 scrapy 项目
-
以下代码(创建-保存)仅做示范,不代表是一个完整的项目,不具有完全的连贯性
-
命令:
scrapy startproject <项目名称>
-
例如:
scrapy startproject myspider
-
创建成功
-
-
创建之后有一个在当前目录下新建一个工程目录
2 创建爬虫
-
命令
scrapy genspider <爬虫名字> <允许爬取的域名>
-
例如:
scrapy genspider zhangshan xingfa.org
-
爬虫文件创建成功
-
-
注意:要在工程文件的 spiders 文件夹下面再创建爬虫
3 提取数据(完善 spider)
-
简单完善的 spider
-
从选择器中提取字符串:
extract()
:返回一个包含字符串数据的列表extract_first()
:返回列表第一个字符串
- 这个有什么用
- 只输出字符串
- 可以检查代码运行情况¥
- 如果返回得到一个空,则可能是前面出问题
- 如果返回得到一个列表内值为 NULL 或者报错,则是当前步骤出错
-
注意:
- spider 中的 parse 方法名不能修改¥
- 需要爬取的 url 地址必须是属于 allow_domin 下的链接¥
- response.xpath 返回的是一个含有 selector 对象[^11]的列表
-
在 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 得到的列表,必须先对列表进行遍历再用这个方法,否则结果只有一个内容
-
4 spider 数据传到 pipline
- 完善后的 Spider
- 这里为什么使用 yield ,而不使用 return
- 首先明确,这 yeild 和 return 都可以使用,但是 yield 具备 return 的功能同时还具备一些 return 不具有的功能
- yield 本身是一个函数,而主要用的是包含 yield 的函数的函数(这个函数称为生成器[^12]),生成器每次产生一个值,函数被冻结,被唤醒后再产生一个值
- 生成器作用:不会导致内存的占用量瞬间变高,更节省存储空间,响应更迅速,使用更灵活
- 这里为什么使用 yield ,而不使用 return
5 保存数据(使用pipeline)
- 完善的 pipline
- 完成 pipeline 后,需要在 setting 中设置开启 pipeline
- 注意:
- pipeline 的权重越小优先级越高¥
- pipeline 中的 process_item 方法名不能修改为其他名称¥
- 注意: