【小白学爬虫连载(8)】--scrapy框架入门教程

【小白学爬虫连载(13)】--Scrapy如何突破反爬虫 欢迎关注【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连载(8)】... 阅读详情


在本篇分享中,假定您已经安装好Scrapy。如若不然,请参考 Scrapy安装 。接下来将通过爬取scrapy官方提供的一个网站,演示如何利用scrapy爬取网页信息。可能有的朋友有疑问,之前已经介绍过requests库,为啥还要用scrapy呢?简单来讲就是requests库适合小批量爬取网页内容,如若需要高频次、大批量爬取网页还是scrapy比较好用,而且很多公司要求熟练掌握scrapy框架,所以技多不压身嘛,接下来咱们就好好学学scrapy。

爬取流程分析

目标网站:http://quotes.toscrape.com/


爬取目标:获取所有名言、其作者和标签

爬取流程:首先获取首页目标信息,其次注意到页面中存在下一页的链接,采用递归调用的方式进行翻页爬取,最后保存爬取信息。

接下来介绍如何用scrapy框架实现以上流程。

创建项目

在开始爬取之前,您必须创建一个新的Scrapy项目。 在命令窗口中进入您打算存储代码的目录中,运行下列命令:

scrapy startproject tutorial quotes.toscrape.com

该命令将会创建包含下列内容的 tutorial 目录:

tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

这些文件分别是:

scrapy.cfg: 项目的配置文件

tutorial/: 该项目的python模块。之后您将在此加入代码。

tutorial/items.py: 项目中的item文件.

tutorial/pipelines.py: 项目中的pipelines文件.

tutorial/settings.py: 项目的设置文件.

tutorial/spiders/: 放置spider代码的目录.

定义Item

Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

类似在ORM中做的一样,您可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field 的类属性来定义一个Item。 (如果不了解ORM, 不用担心,您会发现这个步骤非常简单)

首先根据需要从quotes.toscrape获取到的数据对item进行建模。 我们需要从quotes.toscrape中获取名言,作者以及标签。 对此,在item中定义相应的字段。编辑 tutorial 目录中的 items.py 文件:

import scrapy
class QuoteItem(scrapy.Item):
   # define the fields for your item here like:
   # name = scrapy.Field()
   text = scrapy.Field()
   author = scrapy.Field()
   tags = scrapy.Field()

一开始这看起来可能有点复杂,但是通过定义item,您可以很方便的使用Scrapy的其他方法。而这些方法需要知道您的item的定义。

编写第一个爬虫(Spider)

命令窗口中,在 tutorial/spiders 目录下,输入命令:

scrapy genspider quotes quotes.toscrape.com

在该目录下得到quotes.py文件,初始代码如下:

# -*- coding: utf-8 -*-
import scrapy
class QuotesSpider(scrapy.Spider):
   name = "quotes"
   allowed_domains = ["quotes.toscrape.com"]
   start_urls = ['http://quotes.toscrape.com/']
   def parse(self, response):
       pass

完成爬取任务的完整代码如下:

# -*- coding: utf-8 -*-
import scrapy
from quotetutorial.items import QuoteItem
class QuotesSpider(scrapy.Spider):
   # spider的名字,该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
   name = "quotes"
   allowed_domains = ["quotes.toscrape.com"]
   # 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
   start_urls = ['http://quotes.toscrape.com/']
   # parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
   def parse(self, response):
       # 从网页中提取数据有很多方法。Scrapy使用了一种基于 XPath 和 CSS 表达式机制,有以下四个基本方法:
       #1. xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
       #2. css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
       #3. extract(): 序列化该节点为unicode字符串并返回list。
       #4. re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
       quotes = response.css('.quote')
       for quote in quotes:
           item = QuoteItem()
           text = quote.css('.text::text').extract_first()
           author = quote.css('.author::text').extract_first()
           tags = quote.css('.tags .tag::text').extract()
           item['text'] = text
           item['author'] = author
           item['tags'] = tags
           yield item
       # 获取下一页的链接
       next = response.css('.pager .next a::attr(href)').extract_first()
       # 补全链接
       url = response.urljoin(next)
       # 利用Request函数实现递归调用parse解析下一页内容
       yield scrapy.Request(url=url, callback=self.pars

提取数据

从网页中提取数据有很多方法。Scrapy使用了一种基于 XPath 和 CSS 表达式机制,有以下四个基本方法:

  • xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。

  • css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.

  • extract(): 序列化该节点为unicode字符串并返回list。

  • re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。

    具体的用法及语法格式可查看:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/selectors.html#topics-selectors


爬取并保存爬取到的数据

进入项目根目录,执行以下命令启动爬虫:

scrapy crawl quotes -o items.json #保存为json格式

scrapy crawl quotes -o items.jl #保存为json格式

scrapy crawl quotes -o items.csv #保存为json格式

这是简单的保存几种数据的方法,后面分享如何将数据保存到MongoDB数据库中。


小结

本次分享简单介绍Python重要的爬虫框架scrapy如何入门,如何创建项目,编写第一个爬虫,提取数据,保存数据,后面会用scrapy框架编写一个爬取新闻的爬虫,届时将分享如何将数据保存到MongoDB数据库中。



Python爬虫基础教程(57)Python Scrapy爬虫框架实战:获取起点小说信息之目标分析:Python爬虫实战:Scrapy框架轻松爬取起点小说,入门到精通! 本篇教程通过Scrapy框架实现起点小说热销榜信息的爬取,从环境配置到项目实战,详细讲解了目标分析、创建项目、页面解析、数据提取与存储的完整流程。通过具体代码示例,解决反爬虫策略、数据导出等常见问题,帮助初学者快速掌握Scrapy爬虫技能,高效获取小说名称、作者、类型和形式等关键信息。 阅读详情

相关推荐

Scrapy爬取网站:Quotes to Scrape

这是一个scrapy官方提供的网站:http://quotes.toscrape.com/ ,网页很简单,麻雀虽小五脏俱全。就用这个网站详细演示下Scrapy基础使用方法。参见博客:https://blog.csdn.net/qq_42776455/article/details/83116164

超详细的Scrapy框架的基本使用教程

scrapy框架;Python爬虫

什么时候才不是菜鸟.... 1万+

洛奇 服务器文件,MabinogiG20S2 [洛奇G20服务端]

Code:Titles:>set_title /id: /add /remove Parameters for titles>set_title /id:60001 /add add devcat title>set_title /id:60001 /remove remove devcat title===========================...

weixin_30813385的博客 4306

Scrapy爬虫框架,入门案例(非常详细)

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试. 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 后台也应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫. Scrapy吸引人的地...

ck784101777的博客 21万+

ESP32、MicroPython、天问ASR-PRO,串口发送数据并播报

天问ASRPRO语音芯片内置脑神经网络处理器,支持DNN、TDNN、RNN等神经网络及卷积运算硬件运算,非软件运算,支持语音识别、声纹识别、语音增强、语音检测、单麦克风降噪增强、单麦克风回声消除、360度全方位拾音等功能。ASR-PRO可以图形化编程,降低开发难度,对小白友好。之前使用ASRPRO与ESP32进行过语音控制,这次由于一个项目需要对ESP处理过后的数据进行播报,就想到利用该模块。以下程序主要为测试代码,并非实际项目,仅供参考学习(若有错误,欢迎指正)。二者通过串口通信,波特率为9600。

weak_student的博客 5951

vcpkg管理OpenCASCADE的5个高效技巧:从多版本共存到离线部署

本文详细介绍了使用vcpkg高效管理OpenCASCADE的5个实用技巧,包括多版本共存、性能优化、团队共享、CI/CD集成和离线部署。通过自动配置和版本控制,vcpkg显著简化了OpenCASCADE的开发环境管理,特别适合工业级CAD开发场景。

rain6的博客 188

Scrapy框架新手入门教程

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。目录安装测试新建工程创建spider文件(以豆瓣电影为...

xfxuezhang.cn 2万+

全志T113 Tina5.0开发:(一)添加自己的板级支持包

3.验证 先执行 source build/envsetup.sh ,然后lunch,下图可见9就是我们自己添加的板子。2. 1)修改 t113-evb1.mk重命名为t113-ws_devboard。我使用的spinand,只需要修改openwrt里面的文件即可。以下内容仅作为自己笔记,如果错误欢迎留言指出。修改t113-ws_devboard。

u014428915的博客 1164

爬虫框架scrapy,手把手带入门

一个一个跟着复制,了解scrapy的使用

Ataoker的博客 1869

Python爬虫实战:使用最新技术爬取新华网新闻数据

在当今信息爆炸的时代,网络爬虫技术已经成为获取互联网数据的重要手段。作为国内权威新闻媒体,新华网每天发布大量高质量的新闻内容,这些数据对于舆情分析、市场研究、自然语言处理等领域具有重要价值。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的新华网新闻爬虫系统。本文详细介绍了如何使用Python最新技术栈构建一个高效、稳定的新华网新闻爬虫系统。我们从基础爬虫开始,逐步添加了代理支持、用户代理轮换、请求延迟、重试机制、动态页面渲染、数据存储等高级功能,最终实现了一个生产可用的分布式爬虫系统。

2201_76125261的博客 1771

把 Client 当成 ABAP 系统的多租户底座:从 sy-mandt 到 CDS_CLIENT 的隔离机制与工程实践

本文深入解析SAP ABAP系统中Client概念的本质与应用。Client不仅是数据表的MANDT字段,更是会话级别的隔离边界,贯穿用户登录、授权和数据访问控制全过程。文章从ABAP SQL的隐式Client处理机制出发,详细介绍了USING CLIENT、USING ALL CLIENTS等安全跨客户端访问方式,并对比了传统CLIENT SPECIFIED的风险。同时阐述了ABAP CDS中@ClientHandling注解的类型与算法选择,包括#AUTOMATED自动拼接和#SESSION_VARIA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 182

2023scrapy教程,超详细(附案例)

scrapy教程

weixin_53696212的博客 3846

【WRFDA第三期】OBSPROC namelist 变量总结

OBSPROC namelist 变量总结

WW、forever的博客 1120

【小白学爬虫连载(7)】--scrapy框架的安装

欢迎大家关注公众号【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连...

HashData2018的博客 281

11年电赛综合测评——单运放三角波发生器

目录 背景知识科普: 原理:局部负反馈+大环负反馈+积分器 仿真图如下: 背景知识科普: 反馈电路是将放大器输出信号(电压或电流)的一部分或全部,回收到放大器输入端与输入信号进行比较(相加或相减),并用比较所得的有效输入信号去控制输出,这就是放大器的反馈过程。 一、反馈放大器反馈极性的经验分析法—符号法 分析步骤1.在输入端上加上一个“+”或“-”的输入信号,按瞬时极性法标出反馈放大器中各个电极(基极b,集电极c,发射极e)电压的瞬时性。 2.判断经放大和反馈后得到的反馈信号Xf的瞬时极性

沉迷单车的追风少年 9905

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python网络爬虫的开发环境_Python连载(一):网络爬虫基础及pythpon环境搭建

原标题:Python连载(一):网络爬虫基础及pythpon环境搭建从今天开始,我们的Python连载正式开始啦~接下来我们会给大家分享Python网络爬虫的相关技术课程。一、我们先来了解下什么是网络爬虫?网络爬虫又被称为网页蜘蛛、网络蚂蚁、网络机器人等,可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络爬虫算法。 爬虫的对象较丰富:文字、图片、视频、...

weixin_39818727的博客 320

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【小白学爬虫连载(14)】--scrapy分布式部署

欢迎关注【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连载(8)】...

HashData2018的博客 589

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【小白学爬虫连载(1)】-爬虫框架简介

欢迎大家关注公众号【哈希大数据】【小白学爬虫连载(1)】-爬虫框架简介【小白学爬虫连载(2)】--Requests库介绍【小白学爬虫连载(3)】--正则表达式详细介绍【小白学爬虫连载(4)】-如何使用chrome分析目标网站【小白学爬虫连载(5)】--Beautiful Soup库详解【小白学爬虫连载(6)】--Selenium库详解【小白学爬虫连载(7)】--scrapy框架的安装【小白学爬虫连...

HashData2018的博客 528

小白学爬虫(七 Scrapy)

已有实现,不需要用户编写 需要用户编写

weixin_43299529的博客 189

python网络爬虫_Python连载(一):网络爬虫基础及pythpon环境搭建

原标题:Python连载(一):网络爬虫基础及pythpon环境搭建从今天开始,我们的Python连载正式开始啦~接下来我们会给大家分享Python网络爬虫的相关技术课程。一、我们先来了解下什么是网络爬虫?网络爬虫又被称为网页蜘蛛、网络蚂蚁、网络机器人等,可以自动化浏览网络中的信息,当然浏览信息的时候需要按照我们制定的规则进行,这些规则我们称之为网络爬虫算法。爬虫的对象较丰富:文字、图片、视频、任...

weixin_39664456的博客 141

Python爬虫框架Scrapy入门(二)第一个爬虫程序:使用xpath爬取起点中文网

一、需求分析 爬取起点中文网24小时热销榜的小说:https://www.qidian.com/rank/hotsales?style=1 作为第一个爬虫程序,我们只爬取第一页每本小说的名称、作者、类型、以及是否连载。 二、创建项目 打开命令行,切换到要保存工程的文件路径后,输入scrapy startproject qidian_hot创建一个名为qidian_hot的项目工程。 打开该文件路...

带火星的小木条的博客 1731

python网络爬虫之初识网络爬虫

第一次接触到python是一个很偶然的因素,由于经常在网上看连载小说,很多小说都是上几百的连载。因此想到能不能自己做一个工具自动下载这些小说,然后copy到电脑或者手机上,这样在没有网络或者网络信号不好的时候都可以看。当时还不知道网络爬虫的概念。工作学习中用得最多的是C编程,但是对于网络世界而言,C确实不是一个好的语音,C更多面向硬件和内核。基于想自己下载网络小说的念头,认识到了pyth...

dianjie9145的博客 174

Scrapy第一个网络爬虫

Scrapy入门创建自己的项目用cmd检查一下自己是否有scrapy模块:pip list在Terminal中进行命令创建scrapy项目编写自己的代码在spiders中编写自己的爬 虫文 件下面为qidian_hot_spider.py源代码使用Terminal进行命令运行使用下面命令进行把数据存入hot.csv中 创建自己的项目 用cmd检查一下自己是否有scrapy模块:pip list 在Terminal中进行命令创建scrapy项目 编写自己的代码 在spiders中编写自己的爬 虫文 件

weixin_44356081的博客 177

scrapy+mysql实现小说连载更新

平常看小说总是有更新,网站上百度到的都是增量式爬虫,用scrapy-redis,可是我是mysql啊(我能怎么办,我也很绝望....),于是就搞搞搞,搞了个用mysql+scrapy实现的连载更新 首先,在用这个连载之前,mysql数据库里必须有一些小说的信息,比如上次小说A的最新章节,上次小说A的章节数量,小说A的来源网址(来源目录) 接来下说正题: 一,因为用到了Mysql,所以要关联m...

zz001357的博客 661

Python爬虫之scrapy框架-爬取小说信息

我们要得到起点中文网中小说热销榜的数据,每部小说的提取内容为:小说名字、作者、类型、形式。然后将得到的数据存入CSV文件。创建一个scrapy爬虫项目方式如下: (4)创建一个名为qidian_hot的项目 (5)用pycharm打开qidian_hot项目 其他文件暂时不用管,在spiders文件夹下创建一个Python文件qidian_hot_spider.py. 在这个文件下编写代码。 4、终端运行爬虫程序 (1)将文件夹改到项目文件夹下 (2)输入爬虫执行命令,回车 hot是爬虫名称,- o

编程小鹏的博客 1940
上一篇: 【小白学爬虫连载(7)】--scrapy框架的安装
下一篇: 【小白学爬虫连载(9)】--scrapy构架设计分析
哈希大数据
博客等级 码龄9年 331粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值