zoukankan      html  css  js  c++  java
  • Scrapy基于终端指令的持久化存储

    保证爬虫文件的parse方法中有可迭代类型对象(通常为列表or字典)的返回,该返回值可以通过终端指令的形式写入指定格式的文件中进行持久化操作。

    scrapy使用流程:
    创建工程:
    scrapy startproject ProName
    进入工程目录:
    cd ProName
    创建爬虫文件:
    scrapy genspider spiderName www.xxx.com
    编写相关操作代码
    执行工程:
    scrapy crawl spiderName
    执行指令:
    执行输出指定格式进行存储:将爬取到的数据写入不同格式的文件中进行存储
    scrapy crawl 爬虫名称 -o xxx.json
    scrapy crawl 爬虫名称 -o xxx.xml
    scrapy crawl 爬虫名称 -o xxx.csv

    将糗事百科作者和段子内容数据进行爬取切持久化存储

    创建工程和爬虫文件
    scrapy startproject QiuBai
    
    scrapy genspider QiuBaiSpider https://www.qiushibaike.com/

    代码

    class QiubaiSpider(scrapy.Spider):
        name = 'qiubai'  # 应用名称(唯一标识)
        # 允许爬取的域名(如果遇到非该域名的url则爬取不到数据)
        allowed_domains = ['https://www.qiushibaike.com/']
        # 起始爬取的url
        start_urls = ['https://www.qiushibaike.com/text']
    
        # 访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll
        def parse(self, response):
            # print(response.text)  # 获取字符串类型的响应内容
            # 获取作者名称和内容
            # print(response.body)  # 获取字节类型的相应内容
            # xpath为response中的方法,可以将xpath表达式直接作用于该函数中
            odiv = response.xpath('//div[@class="col1 old-style-col1"]/div')
            print(len(odiv))
            content_list = []  # 用于存储解析到的数据
            for div_item in odiv:
                # xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。
                # 我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。
                author = div_item.xpath('.//div[1]/a[2]/h2/text()')[0].extract()
                content = div_item.xpath('.//div[@class="content"]/span/text()').extract()
                content = ''.join(content)  # 列表转换为字符串
                # 打印展示爬取到的数据
                # print(author, content)
    
                dic = {
                    'author':author.strip(),
                    'content':content.strip()
                }
    
                content_list.append(dic)  # 内容列表
            return content_list

    执行

    scrapy crawl qiubai -o qiubai1.json -s FEED_EXPORT_ENCODING=utf-8
    
    其中 -s FEED_EXPORT_ENCODING=utf-8
    为解决中文乱码

    结果

  • 相关阅读:
    git生成sshkey
    Linux中假设系统丢失了ls命令
    Linux中rpm包管理器
    Linux软件包分类
    VI编辑器
    Java多线程——多线程方法详解
    Maven 无法下载依赖包的解决方法---三步dao!!!
    7. SOFAJRaft源码分析—如何实现一个轻量级的对象池?
    动手造轮子:实现简单的 EventQueue
    java中的string对象深入了解
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/12608075.html
Copyright © 2011-2022 走看看