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'] + '\n')
            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
    
posted @ 2020-03-03 22:43  逸枚俗人  阅读(390)  评论(0编辑  收藏  举报