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
      
  • 相关阅读:
    Get IPv4 Address 2.0
    Apache Tomcat Manager 2.0
    Apache Tomcat Manager 1.0
    FTP自动登录脚本文件
    VMware Workstation 10 + CentOS-5.5-i386 + MySQL Server 5.5
    Copy Files Blurry 1.0
    Extract Chorus From Audio 1.0
    Refresh Baidu Zhidao Evaluate Num 2.0
    File Split 1.0
    其它有趣的事情分享
  • 原文地址:https://www.cnblogs.com/yimeisuren/p/12405288.html
Copyright © 2011-2022 走看看