zoukankan      html  css  js  c++  java
  • scrapy介绍及使用

    scrapy的流程

    其流程可以描述如下:

    1. 调度器把requests-->引擎-->下载中间件--->下载器
    2. 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
    3. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
    4. 爬虫提取数据--->引擎--->管道
    5. 管道进行数据的处理和保存

    注意:

    • 图中绿色线条的表示数据的传递
    • 注意图中中间件的位置,决定了其作用
    • 注意其中引擎的位置,所有的模块之前相互独立,只和引擎进行交互

    scrapy中每个模块的具体作用

     1.scrapy项目实现流程

    • 创建一个scrapy项目:scrapy startproject 项目名

    • 生成一个爬虫:scrapy genspider 爬虫名 允许爬取的范围

    • 提取数据:完善spider,使用xpath等方法

    • 保存数据:pipeline中保存数据

    2. 创建scrapy项目

    命令:scrapy startproject +<项目名字>

    示例:scrapy startproject myspider

    生成的目录和文件结果如下:

    settings.py中的重点字段和内涵

    • USER_AGENT 设置ua
    • ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
    • CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
    • DOWNLOAD_DELAY 下载延迟,默认无延迟
    • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
    • DEFAULT_REQUEST_HEADERS 设置默认请求头
    • SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
    • DOWNLOADER_MIDDLEWARES 下载中间件

    创建爬虫

    命令:scrapy genspider +<爬虫名字> + <允许爬取的域名>

    生成的目录和文件结果如下:

    完善spider

    完善spider即通过方法进行数据的提取等操做:

    注意:

    1. response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
    2. extract() 返回一个包含有字符串的列表
    3. extract_first() 返回列表中的第一个字符串,列表为空没有返回None
    4. spider中的parse方法必须有
    5. 需要抓取的url地址必须属于allowed_domains,但是start_urls中的url地址没有这个限制
    6. 启动爬虫的时候注意启动的位置,是在项目路径下启动

    数据传递到pipeline

    为什么要使用yield?

    • 让整个函数变成一个生成器,有什么好处呢?
    • 遍历这个函数的返回值的时候,挨个把数据读到内存,不会造成内存的瞬间占用过高
    • python3中的range和python2中的xrange同理

    注意:

    • yield能够传递的对象只能是:BaseItem,Request,dict,None

    6. 完善pipeline

     

    pipeline在settings中能够开启多个,为什么需要开启多个?

    • 不同的pipeline可以处理不同爬虫的数据
    • 不同的pipeline能够进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存

    pipeline使用注意点

    • 使用之前需要在settings中开启
    • pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过
    • 有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
    • pipeline中process_item的方法必须有,否则item没有办法接受和处理
    • process_item方法接受item和spider,其中spider表示当前传递item过来的spider
  • 相关阅读:
    Python Django :HTTP生命周期
    Docker简介及Centos 7 安装[初步配置]
    python:Django 简介。
    python :Django url /views /Template 文件介绍
    python:异常处理及程序调试
    python之正则表达式【re】
    Day 21 python :面向对象 类的相关内置函数 /单例模式 /描述符
    Day 22: 软件开发目录设计规范
    Day 20: 面向对象【多态,封装,反射】字符串模块导入/内置attr /包装 /授权
    SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
  • 原文地址:https://www.cnblogs.com/skaarl/p/11919540.html
Copyright © 2011-2022 走看看