python_scrapy

script

  • 创建工程: scrapy startproject XXX(工程名称)

  • 目录:

    • spiders 放置爬虫文件
    • settings.py 配置文件
    • pipelines.py文件: 管道
  • 在spiders子目录中创建一个爬虫文件

    • cd XXX(进入到创建的工程内)

    • scrapy genspider name(爬虫文件名称) www.xxx.com(url创建后可以修改)

    • 爬虫文件 XXXSpider类(父类:scrapy.Spider)

      • 属性:

        • name 爬虫文件的名称,就是爬虫源文件的一个唯一标识
        • allowed_domains 允许的域名: 用来限制start_urls 列表中哪些url可以进行请求发送(此列表中有的则是允许的,此列表也可以注释掉)
        • start_urls 起始的url列表: 该列表中存放的url会被scrapy自动进行请求(可以有多个url)
      • 函数:

        • parse函数用作与数据解析: response参数表示的是请求成功后对应的响应对象
  • XXX => settings.py 配置文件

    • 属性: ROBOTSTXT_OBEY robots.txt协议(为true则遵从)

    • LOG_LEVEL=‘ERROR’ 显示指定类型的日志信息(此为只显示错误信息)

    • ITEM_PIPELINES 是否开启管道(默认为不开启,要则取消注释),其是一个字典,key则是管道类,value则是优先级,数值越小优先级越高(优先级高则表示这个管道类要先执行)

    • USER_AGENT 游览器头部

    • IMAGES_STORE 要下载图片的路径

  • pipelines.py文件: 管道

    • QiubaiproPipeline类中process_item(): 用于专门处理item类型对象,该方法可以接受爬虫文件提交过来的item对象,且该方法每接受到一个item对象就会被调用一次
  • 执行工程:

    • scrapy crawl name(爬虫文件名称) 输出显示日志(可在settings配置文件设置只显示错误日志)
    • scrapy crawl name(爬虫文件名称) --nolog 执行工程,且不打印日志(不输出错误信息)
  • scrapy数据解析

在scrapy中使用xpath解析,则返回的一定是一个列表,但列表元素一定是Selector类型的对象,如想获取元素的data参数的字符串则需加 .extract() 方法,(列表调用 .extract() 之后.则表示将列表中每一个Selector对象中data对应的字符串提取出来,且也会返回一个列表)

.extract_first() 将列表中第0个Selector对象的data参数对应的字符串提取取并返回(不是列表)

  • scrapy持久化存储

    • 基于终端指令:
      • 要求: 只可以将parse方法的返回值存储到本地的文本文件中
      • 执行: scrapy crawl name(爬虫文件名称) -o 路径+存储文件的名字 将parse方法返回的数据保存到指定的文件中(只能存:“json”,“jsonlines”,“jl”,“csv”,“xml”,“marshal”,“pickie”)
      • 好处: 简洁高效便捷
      • 缺点: 局限性比较强 (数据只可以存储到指定后缀的文本文件中)
    • 基于管道:
      • 好处: 通用性强
  • 基于管道:

    • 编码流程:
      • 数据解析
      • 在item类中定义相关的属性 (XXX = scrapy.Field() 每一个变量就是一个字段)
      • 将解析的数据封装存储到item类型的对象
        • item = QiubaiproItem() # 先在爬虫文件中实例化item类型对象
        • item[“XXX”] = XXX # [“XXX”]是在item类中定义的属性,XXX是要存储的值
      • 将item类型的对象提交给管道进行持久化存储的操作
        • yield item # 将item提交给管道process_item
      • 在管道类process_item中要将其接收接收到的item对象中存储的数据进行持久化存储的操作
        • process_item # 该方法每接收到一个item就会被调用一次(专门用于处理item类型对象)
        • open_spider(self,spider) # 重写父类的一个方法,该方法只在开始爬虫的时候调用一次(此方法一般用于打开文件)
        • close_spider(self,spider) # 重写父类的一个方法,该方法只在结束爬虫的时候调用一次(此方法一般用于关闭文件)
      • 在配置文件中开启管道
    • 自定义管道类
      • 需要在pipelines.py文件中新建一个管道类
      • 需要在配置文件中添加新加的管道类配置
      • 每次提交item类型对象,每个管道类都会执行,但是执行的先后顺序不同
      • 管道文件中,一个管道类对应将一组数据存储到一个平台或载体中
      • 在管道文件中先执行的管道类会接收item对象,之后 return item 则会把item对象传给下一个管道类
  • 基于Spider的全站数据爬取

    • 实现方式:
      • 将所有页面的url添加到start_urls列表中 (不推荐)
      • 自行手动进行请求发送 (推荐)
        • yield scrapy.Request(url=new_url,callback=self.parse)
          • 手动发起请求
          • url参数是要请求的网页链接
          • callback参数是回调函数,专门用于数据解析,这个是调用了parse()方法(也可自己定义一个数据解析的方法)
          • meta 也可加meta参数(字典),此参数会传递给对应的回调函数 (response.meta[‘XXX’] 则可以取出传递meta字典中对应的value)
  • 图片数据爬取之 ImagesPipeline

    • 只需将图片的url进行解析,提交到管道,管道就会对图片的url进行请求发送获取图片的二进制类型的数据,且还会帮我们进行持久化存储
    • 使用流程:
      • 数据解析(图片的url)

      • 将存储图片url的item提交到制定的管道类

      • 在管道文件中自定义一个 XXX(ImagesPipeline) 类(父类:ImagesPipeline) 需要导入:from scrapy.pipelines.images import ImagesPipeline

        • get_media_requests # 根据url请求图片数据(如:
          def get_media_requests(self, item, info):
          yield scrapy.Request(item[‘img_url’]))
        • file_path # 指定图片存储的名字(方法的返回值就是图片的名字: 如
          def file_path(self, request, response=None, info=None, *, item=None):
          return img_name)
        • item_completed # 将item返回给下一个即将执行的管道类(如:
          def item_completed(self, results, item, info):
          return item)
      • 在配置文件中:

        • IMAGES_STORE = ‘XXX’ # XXX是图片存储路径
      • 开启制定的管道类: 自定制的管道类

  • scrapy五大核心组件

    • 调度器(Scheduler)

      • 调度器,说白了可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是什么,同时去除重复的网址(不做无用功)。用户可以跟据自己的需求定制调度器。
    • 下载器(Downloader)

      • 下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的
    • 爬虫(spiders)

      • 爬虫,是用户最关心的部份。用户定制自己的爬虫,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。
    • 实体管道(Pipeline)

      • 实体管道,用于处理爬虫提取的实体。主要的功能是持久化存储
    • Scrapy引擎

      • Scrapy引擎是整个框架的核心。它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值