一、简介
1、是一种通用的获取页面数据的框架,与web开发框架django有很多类似之处
2、特征:
①是基于twisted框架开发的,twisted是典型的事件驱动的网络框架
②基于上面一点,scrapy使用了异步非阻塞实现了并发
3、工作流程图示:
4、五大组件:
①EGINE:引擎,负责控制所有组件之间的数据流向,并在某些特定动作发生时触发事件
②SCHEDULER:调度器,将引擎传来的请求放入队列中,并在引擎申请请求时从队列中取出返回,可通过配置设置调度器取出请求的优先级规则,同时调度器会自动清除重复的请求
③DOWLOADER:下载器,用于下载页面的内容,并将内容返回给引擎,下载器正是基于twisted这个高效的异步模型上建立的
④SPIDERS:爬虫,就是开发者自定义的一些类,用来解析返回对象,提取items或者再次发送新的请求,开发者主要书写代码的位置就是此处。
⑤ITEM PIPLINES:项目管道,接收items进行处理,主要包括清理、验证、持久化等操作
5、两大中间件:
①SPIDER MIDDLEWARES:爬虫中间件,位于引擎与爬虫之间,主要用来处理爬虫的输入和输出
②DOWNLOADER MIDDLEWARES:下载中间件:位于引擎与下载器之间,主要用来处理下载器的输入和输出,比如对输入的请求添加请求头,代理,cookie以及调用selenium等。
二、安装
1、执行:pip install scrapy
2、windows有可能失败的解决策略:
①安装wheel,以后即可通过wheel文件安装模块:pip install wheel
②wheel官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
③安装关联模块:
- pip install lxml
- pip install pyopenssl
④下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
⑤下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
⑥执行:pip install D:\xxx\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
⑦最后即可再下载scrapy:pip install scrapy
三、相关指令
1、scrapy -h / scrapy <command> -h:查看帮助
2、全局指令:
①scrapy startproject 项目名:在当前目录下创建scrapy项目
②scrapy settings:查看全局配置,如果在项目目录下,则是查看该项目的配置
③scrapy runspider 爬虫py文件:执行一个独立的爬虫程序,不依赖项目
④scrapy shell <url>:单独爬取某个页面,并进入交互调试模式
⑤scrapy fetch <url>:单独爬取某个页面,可以拿到请求头等,不依赖项目
⑥scrapy view <url>:单独爬取某个页面,得到页面后直接弹出浏览器,以此区分ajax请求
⑦scrapy version:查看scrapy的版本
⑧scrapy version -v:查看scrapy的版本及其依赖库的版本
3、项目指令,必须在项目目录下执行:
①scrapy genspider 爬虫名 爬虫地址:在当前项目中创建爬虫应用
②scrapy crawl 爬虫名:运行爬虫
③scrapy crawl 爬虫名 --nolog:运行爬虫,但不生成日志
④scrapy check 爬虫名:检查代码中有无错误语法
⑤scrapy list:列出项目中所有的爬虫名
4、通过pycharm执行爬虫的方法:
①在项目的根目录下新建一个main.py(命名随意)
②书写代码:
from scrapy.cmdline import execute # 会将列表中的字符串拼接成指令执行 execute(['scrapy', 'crawl', 'chouti', '--nolog'])
四、项目目录结构
- scrapy_0805 ===> 项目根目录 - scrapy_0805 ===> 项目主目录 -- spiders ===> 爬虫目录 --- __init__.py --- chouti.py ===> 爬虫应用 -- __init__.py -- items.py ===> 数据储存模板 -- middlewares.py ===> 中间件 -- pipelines.py ===> 数据处理逻辑 -- settings.py ===> 配置 -- main.py ===> (新建)执行爬虫的脚本 - scrapy.cfg ===> 部署上线相关配置
五、settings相关
1、默认情况,scrapy会去遵循爬虫协议
2、查看一个网页的爬虫协议:www.xxx.com/robots.txt
3、< ROBOTSTXT_OBEY = False >:[修改]默认为True,修改后可无视爬虫协议进行强行爬取
4、< USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36' >:[修改]配置客户端设备信息
5、< LOG_LEVEL='ERROR' >:[新增]配置日志级别
六、数据解析
1、xpath语法:
①获取文本(列表):response.xpath('//a[contains(@class,"link-title")]/text()').extract()
②获取属性(首个):response.xpath('//a[contains(@class,"link-title")]/@href').extract_first()
2、css语法:
①获取文本(列表):response.css('.link-title::text').extract()
②获取属性(首个):response.css('.link-title::attr(href)').extract_first()
3、也可以使用bs4,lxml等语法进行解析