zoukankan      html  css  js  c++  java
  • scrapy入门(一)文件介绍与配置

    Terminal命令

    1. 创建爬虫项目

      scrapy startproject spider_project_name  #自定义项目名
      
    2. spiders文件夹中创建爬虫源文件, 也是爬虫主要功能实现的部分

      cd spider_project_name #进入项目
      scrapy genspider spider_name www.baidu.com
      #spider_name 新建的爬虫名    #www.baidu.com 域名
      #规则爬虫:scrapy genspider -t crawl xxx(爬虫名) xxx.com (爬取域)
      
    3. 运行命令:scrapy crawl spider_name或scrapy crawl xxx -o xxx.json

    各文件配置及其作用

    1. settings 文件(项目的配置文件)

      需要修改的地方有:

      • 19行 : USER_AGENT
      • 修改robots协议为ROBOTSTXT_OBEY = False
      • 添加控制输出日志的语句 : LOG_LEVEL = 'ERROR' 和LOG_FILE = 'log.txt'
      • 67行取消注释, 启用管道存储 ITEM_PIPELINES
    2. items文件, 其中item对象用来保存数据的

      需要在item文件中定义属性

      例如爬取某直播平台的各个主播的标题, 主播名, 人气

      title = scrapy.Field()
      author = scrapy.Field()
      hot = scrapy.Field()
      
    3. pipelines文件
      文件格式和内容基本固定, 除了原本的一个管道类之外, 还可以自己添加, 但是内部函数名称固定,不可修改

      class spider_project_namePipeline(object):
          fp = None
          def open_spider(self, spider):
              print('我只会在爬虫开始的时候执行一次')
              self.fp = open('./data.txt', 'w', encoding='utf-8')
      
          def process_item(self, item, spider):
              # # 读取item对象中的content
              # title = item['title']
              # author = item['author']
              # hot = item['hot']
              # 该函数每次只能接受一个item对象,不用with...open防止打开文件多次
              self.fp.write(item['title'] + ':' + item['author'] + ':' + item['hot'] + '
      ')
              return item
      
          def close_spider(self, spider):
              self.fp.close()
              print('我只会在爬虫开始的时候执行一次')
      
    4. 核心spider_name文件

      • 一般需要注释掉allowed_domains

      • start_urls表示爬取的开始页面

      • parse函数里面是xpath解析

      def parse(self, response):
      	# xpath解析所要爬取的元素
      	#1.以爬取王者荣耀主播信息为例,单个主播的信息为//*[@id="js-live-list/li[1]"],去掉li后面的[1],则可以代表同一级的所以元素,也就是所有主播的信息,以列表的形式返回
         	li_list = response.xpath('//*[@id="js-live-list"]/li')
          #2.for循环遍历,可以再用定位器定位具体的元素信息,需要注意的是,parse()函数里面必须要加.extract()来获取文本内容
      #li.xpath('./a[2]/text()').extract_first()等价于li.xpath('./a[2]/text()')[0].extract()
          for li in li_list:
              title = li.xpath('./a[2]/text()').extract_first()
              author = li.xpath('./span/span[1]/i/text()').extract_first()
              hot = li.xpath('./span/span[2]/i[2]/text()').extract_first()
      
    5. spider_name第二部分:保存文件

      # 新建一个item对象,用于管道存储,后面写的都是为了存储
      item = SecondtestItem()
      #给对象属性赋值,似乎是因为对象调用属性不能直接用".",所以用['属性'] 
      item['hot'] = hot
      item['author'] = author
      item['title'] = title
      # 将item对象提交给管道,管道中的process_item负责接收item对象
      yield item
      
  • 相关阅读:
    【自然框架】 之 资源角色——列表过滤方案(思路篇)
    【自然框架】 之 主从表的添加、修改
    今天你进步了吗?
    【自然框架】通用权限的视频演示(一):添加角色,权限到功能节点和按钮
    【杂谈】您是以什么姿态来参与讨论、回帖的?
    【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图
    【自然框架】 页面里的父类—— 改进和想法、解释
    页面里的父类——BaseUI源代码下载(2009.10.15更新)
    【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。
    【自然框架】之通用权限:数据库设计的几种使用方式
  • 原文地址:https://www.cnblogs.com/yimeisuren/p/12405288.html
Copyright © 2011-2022 走看看