scrapy数据解析操作

– scrapy持久化存储
– 基于终端指令:
– 要求:只可以将parse方法的返回值存储到本地的文本文件中
– 注意:持久化存储对应的文本文件的类型只可以为:’json’, ‘jsonlines’, ‘jl’, ‘csv’, ‘xml’, ‘marshal’, ‘pickle
– 指令:scrapy crawl xxx -o filePath
– 好处:简介高效便捷
– 缺点:局限性比较强(数据只可以存储到指定后缀的文本文件中)
– 基于管道:
– 编码流程:
– 数据解析
– 在item类中定义相关的属性
– 将解析的数据封装存储到item类型的对象
– 将item类型的对象提交给管道进行持久化存储的操作
– 在管道类的process_item中要将其接受到的item对象中存储的数据进行持久化存储操作
– 在配置文件中开启管道
– 好处:
– 通用性强。

Scrapy框架

什么是框架

    就是一个集成了很多功能并且具有很强的通用性的项目模板。

如何学习框架

    专门学习框架封装的各种功能的详细用法。

什么是scrapy

    爬虫中封装的一个异步爬虫明※框架。功能:高性能的持久化存储,异步的数据下载,高性能的数据解析,分布式

scrapy框架的基本使用

    环境安装 mac or linux: pip install scrapy

                    windows : pip install wheel

                    下载twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

                    安装twisted

                    pip install pywin32

                    pip install scrapy

或者使用Anaconda

创建项目爬虫命令:
scrapy startproject 项目名字
创建爬虫文件命令:
scrapy genspider 文件名字 域名(比如www.douban.com 域名就是douban.com)
运行爬虫文件命令:
scrapy crawl 文件名

使用Anaconda:

    用spyder 创建一个python项目

    打开Anaconda prompt,    输入 cd  C:\Users\大哥\Desktop\python项目名称

    scrapy startproject 项目名字

    cd  项目名字

    在spyders子目录中创建一个爬虫文件

            scrapy genspider 爬虫name 域名(比如www.douban.com)

     执行工程:scrapy crawl 爬虫name 
import scrapy
 
class FirstSpider(scrapy.Spider):
    #爬虫文件的名称:就是爬虫原文件的唯一标识
    name = 'first'
    #允许的域名:用来限定start_urls 列表中哪些url可以进行请求发送,通常被注释掉
    #allowed_domains = ['www.douban.com']
    
    #启示的url列表:该列表中存放的url 会被scrapy自动进行方式请求
    start_urls = ['http://www.baidu.com/','http://www.ai8py.com/']
 
    #用作于数据解析,response参数就是请求成功后对应的响应对象,parse方法调用的次数等于请求的次数
    def parse(self, response):
        #response表示的就是服务器返回的响应对象
        print(response)

setting.py 中

更改 USER_AGENT ROBOTSTXT_OBEY

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62'
 
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'

scrapy数据解析

   使用:response.xpath()

    scrapy封装的xpath和etree中xpath的区别:

            scrapy中的xpath直接定位到标签类型中存储的值或者属性值取出,返回的是selector对象,且相关的数据值是存储selector对象中的data属性中,需要调用extract()、extract_first()取出的字符串数据。

scrapy 数据解析操作
import scrapy

import scrapy
 
 
class QiubaiSpider(scrapy.Spider):
    name = 'qiubai'
    #allowed_domains = ['www.xxx.com']
    start_urls = ['https://www.qiushibaike.com/text/']
 
    def parse(self, response):
        #作者的名称和段子的内容
        div_list = response.xpath('//*[@id="content"]/div/div[2]/div')
        for div in div_list:
            #etree中的xpath返回的是字符串
 
            #xpath返回的是列表,但是列表元素一定是selector类型的对象
            #extract()可以将selector对象中的data参数存储的字符串提取出来
            #author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
            #返回的列表只有一个值时可以使用extract_first()
            author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
            #列表调用了extract()之后,
            #则表示将列表中的每一个selector对象中data对应的字符串提取出来,组成一个列表
            content = div.xpath('./a[1]/div/span//text()').extract()
            content = ''.join(content)
            print(author,content)
            break

发表评论

邮箱地址不会被公开。 必填项已用*标注