Python中scrapy框架的ltem和scrapy.Request详解

 更新时间:2023年09月20日 08:32:47   作者:松鼠爱吃饼干  
这篇文章主要介绍了Python中scrapy框架的ltem和scrapy.Request详解,Item是保存爬取数据的容器,它的使用方法和字典类似,不过,相比字典,Item提供了额外的保护机制,可以避免拼写错误或者定义字段错误,需要的朋友可以参考下

Item

Item是保存爬取数据的容器,它的使用方法和字典类似。不过,相比字典,Item提供了额外的保护机制,可以避免拼写错误或者定义字段错误。

创建Item需要继承scrapy.Item类,并且定义类型为scrapy.Field的字段。在创建项目开始的时候Item文件是这样的。

import scrapy
class Tutorial1tem(scrapy.Item):
    #define the fields for your item here 7ike:#参照下面这个参数定义你的字段
    #name = scrapy.Fie1d()
    pass

在保存数据的时候可以每次初始化一个字典等格式,但是最方便,最好的保存方式就是使用Scrapy自带的ltem数据结构了。

我们学习了从页面中提取数据的方法,接下来学习如何封装爬取到的数据。应该用怎样的数据结构来维护这些零散的信息字段呢?最容易想到是使用Python字典(dict)。

回顾之前的代码

class Quotesspider(scrapy.spider):
    name = 'quotes'
    a1lowed_domains = ['toscrape.com']
    start_ur1s = ['http: //quotes.toscrape.com/']
def parse(self,response):
    quotes = response.css( '.quote ' )
    for quote in quotes :
        text = quote.css('.text: :text ').get()
        author = quote.css( '.author : :text ').get()
        tags = quote.css( '.tag : :text ' ).getall()
    yield {
    'text':text,
    'author':author,
    'tags ' : tags,
    }

在该案例中,我们便使用了Python字典存储一本书的信息,但字典可能有以下缺点:

(1)无法一目了然地了解数据中包含哪些字段,影响代码可读性。

(2缺乏对字段名字的检测,容易因程序员的笔误而出错。

(3)不便于携带元数据(传递给其他组件的信息)。

ltem和Field

Scrapy提供了以下两个类,用户可以使用它们自定义数据类(如书籍信息),封装爬取到的数据:

1. ltem基类

数据结构的基类,在items.py中定义数据结构时,需要继承自该基类。

2. Field类

用来描述自定义数据类包含哪些字段(如name、price等)。

自定义一个数据类,只需继承ltem,并创建一系列Field对象的类属性即可。

以定义书籍信息quote为例,它包含个字段,分别为书的名字text、author和tags,代码如下:

#特殊的字典结构可以在scrapy中传递数据
class TutorialItem(scrapy.Item):
    #Field字段
    #就是类似于产生一个类似字典格式的数据拥有字典的一些属性
    #字段默认为空
    #我们可以通过实例化像着键赋值但是如果没有写这个键就不能赋值但是字典可以
    text = scrapy. Field()
    author = scrapy.Fie1d()
    tags = scrapy . Fie1d()

ltem支持字典接口,因此Tutorialltem在使用上和Python字典类似。

对字段进行赋值时,Tutorialltem内部会对字段名进行检测,如果赋值一个没有定义的字段,就会抛出异常(防止因用户粗心而导致错误)

scrapy.Request

Request和Response 对象,用于爬网网站。 Request对象用来描述一个HTTP请求,下面是其构造器方法的参数列表:

Request(url,ca11back=None,method='GET', headers=None,body=None,
        cookies=None,meta=None,encoding='utf-8 ',priority=O,
        dont_filter=False,errback=None,flags=None,cb_kwargs=None)
  • url(字符串) -此请求的URL
  • callback (callable)-将以请求的响应(一旦下载)作为第一个参数调用的函数。有关更多信息,请参见下面的将其他数据传递给回调函数。如果"请求'未指定回调,parse()则将使用"Spider"方法。请注意,如果在处理过程中引发异常,则会调用errback.
  • method(字符串)-此请求的HTTP方法。默认为‘GET'。
  • meta (dict) - Request.meta属性的初始值。如果给出,则在此参数中传递的字典将被浅表复制。
  • headers (dict)-请求头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。如果None作为值传递,则将根本不发送HTTP标头。
c1ass Quotesspider(scrapy.spider):
    name = 'quotes_3'
    allowed_domains = ['toscrape.com']
    start__ur1s = ['http://quotes.toscrape.com/']
def parse(self,response):
    quotes = response.css( '.quote ' )
    for quote in quotes:
        text = quote.css( '.text: :text ' ).get()
        author = quote.css( '.author : :text ' ).get()
        tags = quote.css( '.tag : :text ' ). geta11()
        yield Qd01QuotesItem(text=text,author=author,tags=tags)
    next_page = response.css( '.next a: :attr(href) ' ).get()
    if next_page:
        next__ur1 = 'http: //quotes.toscrape.com' + next_page
        yield scrapy. Request(next_url, cal7back=self.parse)

到此这篇关于Python中scrapy框架的ltem和scrapy.Request详解的文章就介绍到这了,更多相关scrapy框架的ltem、scrapy.Request内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入了解java.util.Arrays的使用技巧

    深入了解java.util.Arrays的使用技巧

    在这篇文章中,我们将来带大家看看 java.util.Arrays ,我们可以使用 Arrays 创建,比较,排序,搜索,stream 和转化数组,感兴趣的小伙伴可以了解一下
    2023-02-02
  • springboot查询全部部门流程分析

    springboot查询全部部门流程分析

    本文分析了在SpringBoot框架中前端如何请求DeptController的list()方法,并通过DeptService到DeptMapper接口查询数据库中的全部部门信息的流程,整个过程涉及前端到后端数据的获取和返回,是SpringBoot应用中常见的数据处理模式
    2024-10-10
  • java判断域名无法访问自行访问下一条

    java判断域名无法访问自行访问下一条

    这篇文章主要为大家介绍了java实现判断域名无法访问的时候自行访问下一条域名示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 使用Sharding-JDBC对数据进行分片处理详解

    使用Sharding-JDBC对数据进行分片处理详解

    这篇文章主要介绍了使用Sharding-JDBC对数据进行分片处理详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot中@Configuration和@Bean和@Component相同点详解

    SpringBoot中@Configuration和@Bean和@Component相同点详解

    这篇文章主要介绍了SpringBoot中@Configuration和@Bean和@Component相同点详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • spring中EventListener的使用方式

    spring中EventListener的使用方式

    这篇文章主要介绍了spring中EventListener的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法)

    IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法)

    这篇文章主要介绍了IDEA最新激活码2021(IDEA2020.3.2最新永久激活方法),本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Shiro:自定义Realm实现权限管理方式

    Shiro:自定义Realm实现权限管理方式

    这篇文章主要介绍了Shiro:自定义Realm实现权限管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 一文搞懂Mybatis中Mapper配置文件获取参数的五种方式

    一文搞懂Mybatis中Mapper配置文件获取参数的五种方式

    这篇文章主要介绍了Mybatis中Mapper配置文件获取参数的五种方式,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 详解Java的Spring框架下bean的自动装载方式

    详解Java的Spring框架下bean的自动装载方式

    这篇文章主要介绍了Java的Spring框架下bean的自动装载方式,Spring是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12

最新评论