【安全合规】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框架的基本使用,有不足的地方欢迎再评论区补充!!记得三连哦!!!!

相关文章
|
11月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1129 7
|
11月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
11月前
|
存储 分布式计算 测试技术
Python学习之旅:从基础到实战第三章
总体来说,第三章是Python学习路程中的一个重要里程碑,它不仅加深了对基础概念的理解,还引入了更多高级特性,为后续的深入学习和实际应用打下坚实的基础。通过这一章的学习,读者应该能够更好地理解Python编程的核心概念,并准备好应对更复杂的编程挑战。
286 12
|
11月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
11月前
|
存储 数据采集 监控
Python文件操作全攻略:从基础到高级实战
本文系统讲解Python文件操作核心技巧,涵盖基础读写、指针控制、异常处理及大文件分块处理等实战场景。结合日志分析、CSV清洗等案例,助你高效掌握文本与二进制文件处理,提升程序健壮性与开发效率。(238字)
770 1
|
11月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
890 0
|
11月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
887 0
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
763 6
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1703 31

推荐镜像

更多