当前位置: 首页 > article >正文

python爬虫从0到1 - Scrapy框架的实战应用

  • 2.查找数据

  • 3.定义数据

  • 4.将数据传入管道(pipelines)

  • 5.通过管道下载数据

  • (三)多条管道下载

    • 1.定义管道类
  • 2.在settings中开启管道

  • 3.下载数据

前言

=====================================================================

在上文中我们学习了Scrapy框架的介绍,以及如何在scrapy框架中创建项目和创建/运行爬虫文件,那么接下来我们一起进入scrapy的实战应用吧!!

(一)yield介绍

=============================================================================

  1. 带有yield的函数不再是一个普通函数,而是生成器generator,可用于迭代。

  2. yield是一个类似于return的关键字,迭代一次遇到yield时就返回yield后面的值。注:下一次迭代时,从上一次迭代遇到的yield后面的代码(下一行)执行。

  3. 简要理解:yield就是一个return返回的一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

(二)管道封装

==========================================================================

1 .创建项目和爬虫文件


首先我们根据上篇文章的方法创建项目以及爬虫文件

  1. 创建项目

scrapy startproject dangdang

  1. 创建爬虫文件

scrapy genspider dangtushu url

2.查找数据


通过xpath语法在网页中提取我们想要的数据(书名,图片,价格)

  1. 查找图片

src_list = response.xpath(“//div[@class=‘cover’]//a/img/@src”)

  1. 查找书名

name_list = response.xpath(“//div[@class=‘tushu’]//a/text()”)

  1. 查找价格

price_list = response.xpath(“//div[@class=‘goumai’]//span/span[@class=‘redC30’]/text()”)

  1. 输出内容

for i in range(len(name_list)):

src = src_list[i].extract()

name = name_list[i].extract()

price = price_list[i].extract()

3.定义数据


当我们使用Scrapy框架下载数据时,我们需先在items.py文件中说明我们要下载的数据。

在这里插入图片描述

src = scrapy.Field()

name = scrapy.Field()

price = scrapy.Field()

4.将数据传入管道(pipelines)


  1. 将items.py 文件中的类导入到爬虫文件中

from dangdang.items import DangdangItem

  1. 将数据出传入管道下载

book =DangdangItem(src = src , name =name ,price = price)

将book的值传给pipelines

yield book

5.通过管道下载数据


  1. 开启管道

在我们使管道下载数据之前,需要在settings.py文件中手动打开管道(将其注释打开)。

注:在scrapy中有很多管道 管道是有优先级的而优先级的范围通常为1-1000 值越小 优先级越高

在这里插入图片描述

  1. 下载数据

2.1.with open方法

注:这种方法有局限性:每传递一次对象就要打开一次文件,对于文件的额操作频繁,不推荐使用

#open方法中 w模式会对每一个对象打开一次并且覆盖上一个对象,因此需要用a模式(追加)

with open(‘tushu.json’,‘a’,encoding=‘utf-8’)as fp:

write 方法必须要写一个字符串,而不能为一个对象

fp.write(str(item))

2.2.定义函数的方法

在爬虫文件开始之前就执行的一个方法。

def open_spider(self,spider):

self.fp =open(‘book.json’,‘w’,encoding=‘utf-8’)

self.fp.write(str(item))

在爬虫文件结束后执行的一个方法

def close_spider(self,spider):

self.fp = close()


http://www.kler.cn/a/529472.html

相关文章:

  • 【Qt】Qt老版本解决中文乱码
  • Python Web框架比较:Flask与FastAPI的特性和应用场景
  • Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
  • WebForms DataList 深入解析
  • 告别复杂,拥抱简洁:用plusDays(7)代替plus(7, ChronoUnit.DAYS)
  • arkts bridge使用示例
  • 蓝桥杯备考:模拟算法之字符串展开
  • ubuntu22.04防火墙策略
  • VSCode设置颜色主题
  • 实体类实现Serializable接口
  • PyCharm中使用Ollama安装和应用Deepseek R1模型:完整指南
  • Vue.js组件开发-实现全屏图片文字缩放切换特效
  • SuccessFactors OData OAuth with SAP IAS-generated SAML assertion
  • gesp(C++六级)(10)洛谷:P10722:[GESP202406 六级] 二叉树
  • 深入解析Python机器学习库Scikit-Learn的应用实例
  • pandas(三)Series使用
  • SpringBoot 整合 Mybatis:提升你的Java项目开发效率
  • 游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目
  • 数据分析系列--[11] RapidMiner,K-Means聚类分析(含数据集)
  • 洛谷P1403 [AHOI2005] 约数研究
  • 构建医疗AI编程可控价值观罗盘:多维度融合导向
  • FIR滤波器:窗函数法
  • 医学图像分割任务的测试代码
  • C语言中的线程本地变量
  • 无用知识之:std::initializer_list的秘密
  • 【Java源码】基于SpringBoot+小程序的电影购票选座系统