一、简介

  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等语法进行解析

 

posted on 2020-07-01 06:01  焚音留香  阅读(124)  评论(0编辑  收藏  举报