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
      
  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/yimeisuren/p/12405288.html
Copyright © 2011-2022 走看看