– 创建工程:
– scrapy startproject projectName(工程名称)
– cd 进工程文件夹
– cd projectName
– 在spiders子目录创建爬虫文件,终端命令如下:
– scrapy genspider spiderName www.xxx.com
– 其中 spiderName(爬虫文件名称) www.xxx.com (爬取网址)
– 就可以发现文件了
– 执行工程
– scrapy crawl spiderName –nolog (选项参数可选,不输出日志信息,默认输出日志信息,一般不选择这个选项)
– 若日志信息过于扰乱实现 可以在setting中添加
#显示指定类型的日志信息
– LOG_LEVEL = “ERROR”
– 持久化存储:
– 基于终端
– scrapy crawl name -o filePath
– 该方法只能存储parse方法的返回值
– 并且有格式要求 csv xml等等
– 基于管道
– 编码流程
– 数据解析
– 在item类中定义相关属性(items.py)
– 将解析到的数据存储到item类型对象中
– 将item对象提交给管道进行持久化存储
– 在管道类的process_item中将其接收到的item对象中的数据进行持久化存储
– 在配置中开启管道
– 注:可以重写爬虫类:
– open_spider(self,spider):
– close_spider(slef,spider):
– 面试题:如何将数据一份存到本地,一份存到数据库
– 在管道类中多写一个管道类
– 在设置中设置新管道类的优先值
– item只会传递给优先值最高的管道类,要想传递给下一个管道类,需要加 return item语句
– 须养成每个管道类的process_item最后加上return item语句,便于后期的维护和更新
– 全站数据爬取:
– url不放在start_url中
– 每次调用parse函数最后拼接好下一个url
– 调用 yield scrapy.Request(url = new_url, callback = self.parase)即可爬取下一条数据
– 五大核心部件:分别为引擎、下载器、调度器、spider(爬虫文件)、管道
– 爬虫文件的作用:
a. 解析数据
b. 发请求
– 调度器:
a. 队列(队列是一种数据结构,拥有先进先出的特性。)
b. 过滤器(过滤器适用于过滤的,过滤重复的请求。)
调度器是用来调度请求对象的。
– 引擎:
所有的实例化的过程都是由引擎来做的,根据那到的数据流进行判断实例化的时间。
处理流数据
触发事务
– 下载器
a. 下载器拿到请求后将请求拿到互联网进行数据下载
b. 互联网将下载好的数据发送给下载器,此时下载好的数据是封装在响应对象中的
c. 下载器将响应对象发送给引擎,引擎接收到了响应对象,此时引擎中存储了从互联网中下载的数据。
– 管道
持久化存储 item
– 请求传参
– 可以在爬虫文件中另外定义解析函数作为回调函数,并且给回调函数传递参数meta = {}
– yield scrapy.Request(url = detail_url,callback = detail_url,meta = {‘item’ : item})
– 基于scrapy 框架的图片爬取和保存
– ImagePipeline类:
– 只需将图片的src解析出交给ImagePipeline类即可
– 使用流程:
– 重写管道类的ImagePipeline
– 重写三个方法
– get_media_request(self, item, info) 发送图片下载请求函数
– file_path(self, request, response=None, info=None, *, item=None )文件名称函数
– item_completed(self, result, item, info)下载完成函数,每次图片爬取完成都会调用此函数,此函数可以将item传递给下一个管道类
相关信息,请查阅网上描述
如下:
def get_media_requests(self, item, info):
yield scrapy.Request(item[‘url’])
# 制定图片名称
def file_path(self, request, response=None, info=None, *, item=None):
return str(time.time()) + “.jpg”
def item_completed(self, result, item, info): # 传给下一个pipeline类
return item
– CrawlSpider 是基于Spider父类的子类
– 比Spider拥有更多的方法功能
– 全站数据爬取:
– 基于Spider
– 基于CrawlSpider爬取
– 创建爬虫文件
– scrapy genpsider -t crawl xxx www.xxx.com
– 链接提取器
– LinkExtrator(allow = r’Item’)
– allow 后为匹配的正则表达式,用于指定链接的提取
– Rule(LinkExtrator(allow = r’Item’), callback= ‘parse_item’,follow= False)
– callback 为每次提取到链接调用的分析回调函数