学习时间:9:00——11:00 14:30—16:30
CrawlSpider:类,Spider的一个子类
—全站数据爬取的方式
一基于Spider:手动请求
—基于CrawlSpider
—CrawlSpider的使用:
—创建一个工程
—cd XXX
—创建爬虫文件(CrawlSpider):
—scrapy genspider -t crawl xxx www.XXX. com
—链接提取器:
—作用:根据指定的规则(allow)进行指定链接的提取
—规则解析器:
—作用:将链接提取器提取到的链接进行指定规则(callback)的解析
分布式爬虫
—概念:搭建一个分布式的机群,让其对一组资源进行分布式联合爬取
—作用:提升爬取效率
—如何实现分布式:
—安装一个scrapy-redis的组件
原生的scarapy是不可以实现分布式爬虫,必须要让scrapy结合着scrapy-redis组件一起实现 —为什么原生的scrapy不可以实现分布式?
一调度器不可以被分布式机群共享
一管道不可以被分布式机群共享
—scrapy-redis组件作用:
一可以给原生的scrapy框架提供可以被共享的管道和调度器
一实现流程
一创建一个工程
一创建一个基于CrawlSpider的爬虫文件
一修改当前的爬虫文件:
—导包:from scrapy_redis.spiders import RedisCrawlSpider
—将start _urls和allowed_domains进行注释
—添加一个新属性:redis_key = 'xxx’可以被共享的调度器队列的名称
—编写数据解析相关的操作
—将当前爬虫类的父类修改成RedisCrawlSpider
—修改配置文件settings
一指定使用可以被共享的管道
ITEMPIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400}
—指定调度器
—指定redis服务器
—redis相关操作配置:
—配置redis的配置文件:
—linux或者mac: redis.conf
—windows: redis.windows. conf
—代开配置文件修改:
一将bind 127.0.0.1进行删除
一关闭保护模式:protected-mode yes改为no
—结合着配置文件开启redis服务
—redis-server配置文件
—启动客户端:
—redis-cli
—执行工程:
—scrapy runspider XXX.py
—向调度器的队列中放入一个起始的url:
一调度器的队列在redis的客户端中
—lpush XXX www. XXX.com
—爬取到的数据存储在了redis的proName:items这个数据结构中
增量式爬虫
一概念:监测网站数据更新的情况,只会爬取网站最新更新出来的数据。
一分析:
一指定一个起始url
—基于CrawlSpider获取其他页码链接
一基于Rule将其他页码链接进行请求
—从每一个页码对应的页面源码中解析出每一个电影详情页的URL
—核心:检测电影详情页的url之前有没有请求过
一将爬取过的电影详情页的url存储
一存储到redis的set数据结构
—对详情页的url发起请求,然后解析出电影的名称和简介
—进行持久化存储