scrapy框架

1.介绍

Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

    Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下:

    1. 引擎(EGINE)

      引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。

    2. 调度器(SCHEDULER)
      用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    3. 下载器(DOWLOADER)
      用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
    4. 爬虫(SPIDERS)
      SPIDERS是开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求
    5. 项目管道(ITEM PIPLINES)
      在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
    6. 下载器中间件(Downloader Middlewares)
      位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response,你可用该中间件做以下几件事
      1. process a request just before it is sent to the Downloader (i.e. right before Scrapy sends the request to the website);
      2. change received response before passing it to a spider;
      3. send a new Request instead of passing received response to a spider;
      4. pass response to a spider without fetching a web page;
      5. silently drop some requests.
    7. 爬虫中间件(Spider Middlewares)
      位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)

2.安装

#Windows平台
    1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
    3、pip3 install lxml
    4、pip3 install pyopenssl
    5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
    6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
    8、pip3 install scrapy

#Linux平台
    1、pip3 install scrapy

命令行工具

#1 查看帮助
    scrapy -h
    scrapy <command> -h

#2 有两种命令:其中Project-only必须切到项目文件夹下才能执行,而Global的命令则不需要
    Global commands:
        scrapy startproject 项目名 #创建项目
     cd 项目名      
     scrapy genspider 爬虫名 爬取域名 #创建爬虫程序 settings #如果是在项目目录下,则得到的是该项目的配置 runspider #运行一个独立的python文件,不必创建项目 shell #scrapy shell url地址 在交互式调试,如选择器规则正确与否 fetch #独立于程单纯地爬取一个页面,可以拿到请求头 view #下载完毕后直接弹出浏览器,以此可以分辨出哪些数据是ajax请求 version #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依赖库的版本 Project-only commands: crawl 爬虫名 --nolog(不加载日志) #运行爬虫,必须创建项目才行,确保配置文件中ROBOTSTXT_OBEY = False check #检测项目中有无语法错误 list #列出项目中所包含的爬虫名 edit #编辑器,一般不用 parse #scrapy parse url地址 --callback 回调函数 #以此可以验证我们的回调函数是否正确 bench #scrapy bentch压力测试 #3 官网链接 https://docs.scrapy.org/en/latest/topics/commands.html

项目目录介绍

 

3.创建爬虫程序

cd 爬虫工程
scrapy genspider 爬虫文件名 域名(www.xxx.com)

执行工程
scrapy crawl 爬虫文件名
执行工程后,默认会输出工程所有的日志信息
可以指定类型日志的输出:
    setting.py:
        -LOG_LEVEL = 'ERROR'

爬虫文件名内容概述:
    name:爬虫文件名称,该文件的卫衣标识
    start_url:起始的url列表,存储的都是url,url可以被自动进行get请求的发送
    parse:请求后的数据解析操作

setting.py:
    1.禁止robots
    2.指定日志类型:LOG_LEVEL = 'ERROR'
    3.UA伪装

 默认是在cmd中执行爬虫,也可在pycharm中操作

#在项目文件夹下新建main.py
from scrapy.cmdline import execute
execute(['scrapy','crawl','cnblogs'])  # cnblogs为爬虫名

 

4.settings.py中的设置信息

4.1 为什么项目中需要配置文件

在配置文件中存放一些公共变量,在后续的项目中方便修改,如:本地测试数据库和部署服务器的数据库不一致

4.2 配置文件中的变量使用方法
  1. 变量名一般全部大写

  2. 导入即可使用

4.3 settings.py中的重点字段和含义
  • USER_AGENT 设置ua

  • ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守

  • CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个

  • DOWNLOAD_DELAY 下载延迟,默认无延迟 (下载器在从同一网站下载连续页面之前应等待的时间(以秒为单位)。这可以用来限制爬行速度,以避免对服务器造成太大影响)

  • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的

  • DEFAULT_REQUEST_HEADERS 设置默认请求头,这里加入了USER_AGENT将不起作用

  • SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同

  • DOWNLOADER_MIDDLEWARES 下载中间件

  • LOG_LEVEL 控制终端输出信息的log级别,终端默认显示的是debug级别的log信息

    • LOG_LEVEL = "WARNING"

      • CRITICAL 严重

      • ERROR 错误

      • WARNING 警告

      • INFO 消息

      • DEBUG 调试

  • LOG_FILE 设置log日志文件的保存路径,如果设置该参数,终端将不再显示信息

    LOG_FILE = "./test.log"

    其他设置参考:https://www.jianshu.com/p/df9c0d1e9087

posted @ 2020-03-23 15:12  小青年て  阅读(112)  评论(0编辑  收藏  举报