zoukankan      html  css  js  c++  java
  • Scrapy

      步骤
        1.建立工程和 Spider 模版
          scrapy startproject 名称
          cd 名称
          scrapy genspider 爬虫名称 爬取的地址
          进一步修改 spiders/爬虫文件
        2.编写 Spider
          配置 爬虫文件
          修改对返回页面的处理
          修改对新增URL爬取请求的处理
        3.编写 ITEM Pinpelines
          配置 pipelines.py 文件
          定义对爬取项(Seraped Item)的处理类
     
      配置并发连接选项
        settings.py
          CONCURRENT_REQUESTS Downloader 最大并发请求下载数量,默认为32
          CONCURRENT_ITEMS Item Pinpeline 最大并发 ITEM 处理数量,默认100
          CONCURRENT_REQUESTS_PER_DOMAIN 每个目标域名最大的并发请求数量,默认8
          CONCURRENT_REQUESTS_PER_IP 每个目标IP最大并发请求数量,默认0,非0有效
     
      requests vs Scrapy
        相同点
          两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
          两者可用性都好,文档丰富,入门简单
          两者都没有处理js,提交表单,应对验证码等功能(可扩展)
     
      全局命令
        startproject
          语法: scrapy startproject <project_name>
          这个命令是scrapy最为常用的命令之一,它将会在当前目录下创建一个名为 <project_name>的项目。
     
        settings
          语法: scrapy settings [options]
          该命令将会输出Scrapy默认设定,当然如果你在项目中运行这个命令将会输出项目的设定值。
     
        runspider
          语法: scrapy runspider <spider_file.py>
          在未创建项目的情况下,运行一个编写在Python文件中的spider。
     
        shell
          语法: scrapy shell [url]
          以给定的URL(如果给出)或者空(没有给出URL)启动Scrapy shell。
          例如,scrapy shell http://www.baidu.com将会打开百度URL,
          并且启动交互式命令行,可以用来做一些测试。
     
        fetch
          语法: scrapy fetch <url>
          使用Scrapy下载器(downloader)下载给定的URL,并将获取到的内容送到标准输出。简单的来说,就是打印url的html代码。
     
        view
          语法: scrapy view <url>
          在你的默认浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不相同,一些动态加载的内容是看不到的, 因此该命令可以用来检查spider所获取到的页面。
     
        version
          语法: scrapy version [-v]
          输出Scrapy版本。配合 -v 运行时,该命令同时输出Python, Twisted以及平台的信息。
     
      --项目命令
        crawl
          语法: scrapy crawl <spider_name>
          使用你项目中的spider进行爬取,即启动你的项目。这个命令将会经常用到,我们会在后面的内容中经常使用。
     
        check
          语法: crapy check [-l] <spider>
          运行contract检查,检查你项目中的错误之处。
     
        list
          语法: scrapy list
          列出当前项目中所有可用的spider。每行输出一个spider。
     
        genspider
          语法: scrapy genspider [-t template] <name> <domain>
          在当前项目中创建spider。该方法可以使用提前定义好的模板来生成spider。您也可以自己创建spider的源码文件。
     
        view使用浏览器打开网页
          scrapy view http://www.baidu.com
     
        shell命令, 进入scrpay交互环境
          #进入该url的交互环境
          scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/
          之后便进入交互环境
          我们主要使用这里面的response命令, 例如可以使用
          response.xpath() #括号里直接加xpath路径
     
        runspider命令用于直接运行创建的爬虫, 并不会运行整个项目
          scrapy runspider 爬虫名称
     
      为什么Scrapy 采用命令行创建和运行爬虫?
        命令行(不是图形界面)更容易自动化,合适脚本控制
        本质上, Scrapy 是给程序员用的,功能(而不是界面)更重要
     
      生成的工程目录
        python123demo/ 外层目录
        scrapy.cfg 部署 Scrapy 爬虫的配置文件
        python123demo/ Scrapy 框架的用户自定义 python代码
          __init__.py 初始化脚本
          items.py Items 代码模版(继承类)
          middlewares.py Middlewares 代码模版(继承类)
          pipelines.py Pipelines 代码模版(继承类)
          settings.py Scrapy 爬虫的配置文件
          spiders/ Spiders 代码模版目录(继承类)
            __init__.py 初始文件,无需修改
            __pycache__/ 缓存目录,无需修改
     
     
        parse() 用于处理响应,解析内容形成字典,发现新的URL爬取请求
     
    Scrapy 爬虫的数据类型
      Request 类
        class scrapy.http.Request()
          Request 对象表示一个HTTP请求
          由 Spider 生成,由 Downloader 执行
     
        .url Request 对应的请求URL
        .method 对应的请求方法,‘GET’'POST'等
        .headers 字典类型风格的请求头
        .body 请求内容主体,字符串类型
        .meta 用户添加的扩展信息,在 Scrapy 内部,模块间传递信息使用
        .copy() 复制该请求
     
      Response 类
        class scrapy.http.Response()
          Response 对象表示一个HTTP请求
          由 Downloader 生成,由 Spider 执行
     
        .url Response 对应的请求URL
        .status HTTP 状态码,默认200
        .headers Response 对应的头部信息
        .body Response 对应的内容信息,字符串类型
        .flags 一组标记
        .request 产生 Response 类型对应的 Response 对象
        .copy() 复制该请求
     
      Item 类
        class scrapy.item.Request()
        Item 对象表示一个从HTML页面中提取的信息内容
        由 Spider 生成,由 Item Pinpeline 执行
        Item 类似字典类型,可以按照字典类型操作
     
    CSS Selector 的基本使用
      <html>.css('a::attr(href)').extract()
     
    Scrapy 爬虫框架结构
      Downloader Middleware
        目的:实施 Engine,Scheduler,Downloader 之间进行用户可配置的控制
        功能:修改,丢弃,新增请求或响应
     
      Spider
        解析 Downloader 返回的响应 (Response)
        产生爬取项 (scraped item)
        产生额外的爬取请求 (Request)
     
      Item Pinpelines
        以流水线方式处理 Spider 产生的爬取项
        有一组操作顺序组成,类似流水线,每个操作是一个 Item Pinpeline 类型
        可能操作包括:清理,检验和查重爬取项中的HTML数据,将数据存储到数据库
        需要用户编写配置代码
     
      Spider Middleware
        目的:对请求和爬取项的再处理
        功能:修改,丢弃,新增请求或爬取项
        需要用户编写配置代码
     
    yield 关键字
      yield 生成器
        生成器是一个不断产生值的函数
        包含yield语句的函数是一个生成器
        生成器每次产生一个值(yield语句),函数被冻结,被唤醒后在产生一个值
     
      为何要有生成器?
        生成器相比一次列多所有内容的优势
          更节省存储空间
          响应更迅速
          使用更灵活
     
  • 相关阅读:
    Effective java ---遵守普遍接受的命名规则
    slf4j(后面总结)
    jQuery ajax
    JS面向对象、prototype、call()、apply()
    为什么实例没有prototype属性?什么时候对象会有prototype属性呢?
    JavaScript prototype 使用介绍
    深入javascript——构造函数和原型对象
    Javascript中String、Array常用方法介绍
    JS中如何得到触发事件的属性?
    jquery操作复选框(checkbox)的12个小技巧总结
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/9895514.html
Copyright © 2011-2022 走看看