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

相关文章
|
10月前
|
数据采集 弹性计算 Kubernetes
单机扛不住,我把爬虫搬上了 Kubernetes:弹性伸缩与成本优化的实战
本文讲述了作者在大规模爬虫项目中遇到的挑战,包括任务堆积、高失败率和成本失控。通过将爬虫项目迁移到Kubernetes并使用HPA自动伸缩、代理池隔离和Redis队列,作者成功解决了这些问题,提高了性能,降低了成本,并实现了系统的弹性伸缩。最终,作者通过这次改造学到了性能、代理隔离和成本控制的重要性。
325 2
单机扛不住,我把爬虫搬上了 Kubernetes:弹性伸缩与成本优化的实战
|
9月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
9月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1348 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
9月前
|
数据采集 机器学习/深度学习 人工智能
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
本文系统阐述了反爬虫技术的演进与实践,涵盖基础IP限制、User-Agent检测,到验证码、行为分析及AI智能识别等多层防御体系,结合代码实例与架构图,全面解析爬虫攻防博弈,并展望智能化、合规化的发展趋势。
3114 62
反爬虫机制深度解析:从基础防御到高级对抗的完整技术实战
|
11月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
9月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
10月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
1113 19
|
9月前
|
数据采集 人工智能 JSON
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
Prompt 工程实战:如何让 AI 生成高质量的 aiohttp 异步爬虫代码
|
11月前
|
数据采集 存储 NoSQL
Scrapy 框架实战:构建高效的快看漫画分布式爬虫
Scrapy 框架实战:构建高效的快看漫画分布式爬虫
|
10月前
|
数据采集 Web App开发 机器学习/深度学习
Selenium爬虫部署七大常见错误及修复方案:从踩坑到避坑的实战指南
本文揭秘Selenium爬虫常见“翻车”原因,涵盖浏览器闪退、元素定位失败、版本冲突、验证码识别等七大高频问题,结合实战案例与解决方案,助你打造稳定高效的自动化爬虫系统,实现从“能用”到“好用”的跨越。
1203 0

推荐镜像

更多