【安全合规】python爬虫从0到1 - Scrapy框架的实战应用

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

文章目录

前言

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


(一)yield介绍

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

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

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

(二)管道封装

1 .创建项目和爬虫文件

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

  1. 创建项目image.png创建爬虫文件image.png

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 值越小 优先级越高

下载数据

2.1.with open方法

self.fp.write(str(item))

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

#open方法中 w模式会对每一个对象打开一次并且覆盖上一个对象,因此需要用a模式(追加)
 with open('tushu.json','a',encoding='utf-8')as fp:
            # write 方法必须要写一个字符串,而不能为一个对象
            fp.write(str(item))

2.2.定义函数的方法image.png

 def open_spider(self,spider):
        self.fp =open('book.json','w',encoding='utf-8')

image.png

def close_spider(self,spider):
    self.fp = close()

在控制台输入scrapy crawl dangtushu 执行爬虫文件就可以下载数据啦!!


(三)多条管道下载

在上述下载了json数据,我们还需要下载图片到本地,因此我们需要再开启另一条管道。


1.定义管道类

多条管道的开启,和上面一条管道类似,但我们需要重新定义一个类:


class Dangdangsrcdownload:
    def process_item(self, item, spider):
     return item

2.在settings中开启管道

 'dangdang.pipelines.Dangdangsrcdownload': 301,

3.下载数据

在这里我们可以应用之前学到的urllib库来下载图片

import urllib.request
class Dangdangsrcdownload:
    def process_item(self, item, spider):
        # 下载图片
        url = item.get('src')
        filename ='./booksrc/' + item.get('name') + '.jpg'
        urllib.request.urlretrieve(url = url ,filename= filename)
        return item

同样再控制台输入指定来执行爬虫文件

运行结果:

感兴趣的小伙伴,可以私聊我要全部源码哦!

本篇文章到这里就结束啦,这里也是详细的给大家讲解的scrapy框架的基本使用,有不足的地方欢迎再评论区补充!!记得三连哦!!!!

相关文章
|
6月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
483 0
|
7月前
|
数据采集 监控 Java
Python 函数式编程的执行效率:实际应用中的权衡
Python 函数式编程的执行效率:实际应用中的权衡
330 102
|
6月前
|
机器学习/深度学习 算法 安全
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
【强化学习应用(八)】基于Q-learning的无人机物流路径规划研究(Python代码实现)
420 6
|
6月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
414 0
|
7月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
397 0
|
7月前
|
存储 程序员 数据处理
Python列表基础操作全解析:从创建到灵活应用
本文深入浅出地讲解了Python列表的各类操作,从创建、增删改查到遍历与性能优化,内容详实且贴近实战,适合初学者快速掌握这一核心数据结构。
628 0
|
7月前
|
中间件 机器人 API
Python多态实战:从基础到高阶的“魔法”应用指南
Python多态机制通过“鸭子类型”实现灵活接口,使不同对象统一调用同一方法,自动执行各自行为。它简化代码逻辑、提升扩展性,适用于数据处理、策略切换、接口适配等场景。掌握多态思维,能有效减少冗余判断,使程序更优雅、易维护。
336 0
|
7月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
268 0
|
8月前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍如何利用Python的clipboard-monitor库实现剪贴板监控系统,涵盖文本与图片的实时监听、防重复存储、GUI界面开发及数据加密等核心技术,适用于安全审计与自动化办公场景。
293 0
|
8月前
|
数据采集 API 调度
Python爬虫框架对比:Scrapy vs Requests在API调用中的应用
本文对比了 Python 中 Scrapy 与 Requests 两大爬虫框架在 API 调用中的差异,涵盖架构设计、调用模式、性能优化及适用场景,并提供实战建议,助力开发者根据项目需求选择合适工具。

推荐镜像

更多