ltem

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

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

import scrapyclass 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中定义数据结构时,需要继承自该基类。

  1. 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_pageyield scrapy. Request(next_url, cal7back=self.parse)

尾语

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

Python爬虫基础:scrapy 框架—ltem和scrapy.Request相关推荐

  1. python基础知识整理-python爬虫基础知识点整理

    首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...

  2. python爬虫基础知识点整理

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  3. python爬虫基础(二)

    文章目录 python爬虫 1.异步爬虫 异步爬虫之多进程and多线程(不建议使用) 异步爬虫之线程池and进程池(适当使用) 单线程+异步协程(推荐) 补充:回调函数 补充:yield 多任务异步协 ...

  4. Scrapy 框架介绍 [Scrapy 框架概述][Scrapy 框架的特点][Scrapy 框架的架构概述]

    您的"关注"和"点赞",是信任,是认可,是支持,是动力- 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 文章目录 1 S ...

  5. Python爬虫基础-如何获取网页源代码

    Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler),又称网页蜘蛛(Web Spider),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.爬虫程序根据一组特定的规则 ...

  6. python基础代码库-python爬虫基础教程:requests库(二)代码实例

    get请求 简单使用 import requests ''' 想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载! ''' respons ...

  7. python爬虫基础(一)~爬虫概念和架构

    目录 1. 爬虫 1.1 概念 1.2 分类 2. 爬虫架构 2.1 url管理器 2.2 网页(html)下载(download)器 2.2.1 urllib下载html源码 2.2.2 reque ...

  8. 掌握Python爬虫基础,仅需1小时!

    随着互联网的发展,google.百度等搜索引擎让我们获取信息愈加方便.但需求总会不断涌现,纯粹地借助百度等收集信息是远远不够的,因此编写爬虫爬取信息的重要性就越发凸显. 比如有人为了炒股,专门爬取了多 ...

  9. Day2:python爬虫基础学习(大嘘)

    Day2:python爬虫基础学习(大嘘)) 教材&参考: 学习过程 Sublime配置教程 下载&安装 语言(设置中文) 设置字体/配色 配置Python环境 使用python官方编 ...

  10. python爬虫——基础知识

    python爬虫--基础知识 一.网页基础知识 二.爬虫的思路 1.HTML文档(超文本) 三.ROBOTS协议 四.浏览器发送HTTP请求的过程 1.http请求过程 2.请求 五.SSL连接错误 ...

最新文章

  1. java学习笔记(十二)----集合
  2. 解决margin塌陷的问题_margin塌陷问题及解决
  3. 从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(三)
  4. 经典笔试题:用C写一个函数测试当前机器大小端模式
  5. 动漫风html源码,CSS3动画制作一个卡通风格的404错误页面代码
  6. CookiePolicy 原理解析
  7. Scala-Spark digamma stackoverflow问题
  8. 详解Linux下通过yum安装Mariadb/MySQL数据库(腾讯云也适用)
  9. 织梦在线报名平台php,DedeCMSv5
  10. c++ 舞伴配对问题_挑战新物体描述问题,视觉词表解决方案超越人类表现
  11. R7-12 h0008.卡片延伸长度 (15 分)
  12. 一本通网站 1378:最短路径(shopth)
  13. fasterrcnn论文_论文笔记:Fast(er) RCNN
  14. 英特尔傲腾驱动下载_什么是英特尔傲腾内存?
  15. 基于组态王6.55的电能监测系统
  16. Neo4j 示例:三国志人物关系图谱
  17. java日志篇(2)-JUL(java.util.logging)
  18. SpringBoot优雅停机的正确姿势!
  19. Excel怎么转换成PDF?这两种转换方法看到就是赚到
  20. Nginx 静态压缩/缓存

热门文章

  1. 计算机社团活动照片,电脑绘画兴趣小组活动记录表Word版
  2. 别再吐槽12306了!有本事你来写架构
  3. ByteArrayInputStream和ByteArrayOutputStream的使用
  4. Linux下pppd拨号脚本配置
  5. dtmf拨号原理matlab,matlab综合实验dtmf拨号器设计.doc
  6. HTML页面转PDF导出加水印并解决字被截断的问题
  7. AUTOSAR接口类型及访问规则
  8. Saliency map (fixation map) 生成热点图-python实现
  9. 部分古钱知识--(4)
  10. GraphSage:Inductive Representation Learning on Large Graphs