流程介绍
1、创建一个scrapy项目
scrapy startproject mySpider
2、生成一个爬虫
scrapy genspider itcast "itcast.cn"
3、提取数据
完善spider,使用xpath等方法
4、保存数据
pipeline中保存数据
使用pipeline
完成pipeline代码后,需要在setting中设置开启
ITEM_PIPELINES = {
'myspider.pipelines.MyspiderPipeline': 300,
}
(键:代码的位置;值:权重,距离引擎的远近,近的先执行)
pipeline可以有多个
1、可能会有多个spider,不同的pipeline处理不同的iterm的内容
2、一个spider的内容可能要做不同的操作,比如存入不同的数据库中
注意:
- pipeline的权重越小,优先级越高
- pipeline中process_iterm方法名不能修改为其他的名称
- 在pipeline中可以通过spider.name来判断item来自于哪个spider文件
使用logging
在scrapy中
- 在settings中设置LOG_LEVEL="WARNING"
- 在settings中设置LOG_FILE="./a.log" #设置日志保存的位置
- import logging,实例化logging的方式在任何文件中使用logger输出日志
普通项目中
- import logging
- logging.basicConfig(...) #设置日志输出的样式,格式
- 实例化一个logger = logging.getLogger(__name__)
- 在任何py文件中调用即可
实现翻页请求
scrapy.Request知识点:
scrapy.Request(url, [, callback, method='GET', headers, body, cookies, meta, dont_filter=False])
注:一般文档中方括号中的参数表时可选参数
scrapy.Request常用参数为:
- callback: 指定传入的url交给哪个函数去处理
- meta: 实现在不同的解析函数中传递数据,meta默认会携带部分信息,比如下载延迟,请求深度等
- dont_filter: 默认False,scrapy会去重url,不会重复请求
item的使用
预先定义需要爬的字段
class MyspiderItem(scrapy.Item):
name = scrapy.Field()
pass
注:scrapy.Item和scrapy.Field()是一个字典,总的来说,可以把我们定义的MyspiderItem理解为一个字典。
那么scrapy为啥要定义一个字典呢?
答:在获取到数据的时候,使用不同的item来存放不同的数据。在把数据交给pipeline的时候,可以通过isinstance(item, MyspiderItem)来判断数据是属于哪个item,进行不同的数据处理。