Python爬虫——scrapy_当当网图书管道封装

news2024/11/21 2:35:29
  1. 创建爬虫项目
srcapy startproject scrapy_dangdang
  1. 进入到spider文件里创建爬虫文件(这里爬取的是青春文学,仙侠玄幻分类)
srcapy genspider dang http://category.dangdang.com/cp01.01.07.00.00.00.html
  1. 获取图片、名字和价格
# 所有的seletor的对象,都可以再次调用xpath方法
li_list = response.xpath('//div[@id="search_nature_rg"]//li')

for li in li_list:
	# 获取图片
    src = li.xpath('.//img/@data-original').extract_first()
    # 第一张图片和其他图片的标签的属性不一样
    # 第一张图片的src是可以使用的,其他图片的地址在data-original里
    if src:
    	src = src
    else:
        src = li.xpath('.//img/@src').extract_first()
    # 获取名字
    name = li.xpath('.//img/@alt').extract_first()
    # 获取价格
    price = li.xpath('.//p[@class="price"]/span[1]/text()').extract_first()
    
    print(src, name, price)
  1. 在items里定义要下载的数据
import scrapy


class ScrapyDangdang39Item(scrapy.Item):
    # 要下载的数据都有什么
    # 图片
    src = scrapy.Field()
    # 名字
    name = scrapy.Field()
    # 价格
    price = scrapy.Field()
  1. 在dang.py里导入items
from ..items import ScrapyDangdang39Item
  1. 在parse方法里定义一个对象book,然后把获取到的值传递到pipelines
book = ScrapyDangdang39Item(src=src, name=name, price=price)

# 获取一个book就将book传递给pipelines
yield book
  1. 开启管道
    在settings中,把这几行代码取消注释
    在这里插入图片描述
    管道可以有很多个,但是管道是有优先级的,优先级的范围是1到1000 值越小,优先级越高
  2. 下载数据
    打开piplines.py
class ScrapyDangdang39Pipeline:
    # 方法1
    # 在爬虫文件执行前执行的一个方法
    def open_spider(self, spider):
        self.fp = open('book.json', 'w', encoding='utf-8')


    def process_item(self, item, spider):
        # item就是yield后面的book对象
        
        # 1.write方法必须要写一个字符串,而不是其他的对象
        # 2.w模式,每一个对象都会打开一次文件,然后覆盖之前的内容,所以使用a模式
        with open('book.json', 'a', encoding='utf-8')as fp:
        	fp.write(str(item))
        	
        return item

但是这种模式不推荐,因为每传递过来一个数据,就要打开一次文件,对文件的操作太过频繁
换一种方法

class ScrapyDangdang39Pipeline:
    # 在爬虫文件执行前执行的一个方法
    def open_spider(self, spider):
        self.fp = open('book.json', 'w', encoding='utf-8')


    def process_item(self, item, spider):
        # item就是yield后面的book对象
        
        self.fp.write(str(item))

        return item

    # 在爬虫文件执行完后执行的一个方法
    def close_spider(self, spider):
        self.fp.close()
  1. 运行dang.py文件就可以把数据保存到本地了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android-网络访问技术Retrofit浅析

Retrofit是一种基于注解的网络请求库,专门用于在Android应用中进行网络访问。它使用简洁的方式定义了网络请求的接口,并自动将请求结果解析为Java对象。Retrofit的核心原理是利用了Java的动态代理技术,将网络请求接口的注解信息转化为具体的网…

使用冒泡排序模拟qsort

目录 冒泡排序🐒: 冒泡排序特点👀: 模拟&改造🔧: 1、让冒泡排序能够接受其他的数据类型,使用参数的改造。🚗 2、比较的方式进行改造❤ 思路分析🧠:…

unity中导入自定义模型

unity中导入自定义模型 准备软件步骤1从SoildWorks中导出模型为STEP格式2将STEP格式文件导入到3DS Max中,再导出为FBX格式3将FBX格式导入至unity中 准备软件 需要SoildWorks、3DS Max和Unity 3D软件步骤 1从SoildWorks中导出模型为STEP格式 2将STEP格式文件导入到…

[PyTorch][chapter 52][迁移学习]

前言: 迁移学习(Transfer Learning)是一种机器学习方法,它通过将一个领域中的知识和经验迁移到另一个相关领域中,来加速和改进新领域的学习和解决问题的能力。 这里面主要结合前面ResNet18 例子,详细讲解一…

如何用chatGPT回答女朋友的死亡问题

引言 在爱情的迷雾中,女友的死结问题常常令人犯难。然而,借助ChatGPT的智慧,或许能够开辟一片全新的天地。其独到的见解和无限的可能性,或将为我们的情感困惑带来意想不到的解答。正如科技在塑造我们的生活,也或许能为…

家居行业,瞄准软文营销

对于很多家居品牌来说,传统营销形式越来越无法打动他们,在以渠道为王的环境下,家居品牌更需要思考地是:要带给消费者新的价值和体验究竟是什么? 因为在目前的大环境下,在内容信息上展现的生动性、直接性上、…

Spark SQL优化:NOT IN子查询优化解决

背景 有如下的数据查询场景。 SELECT a,b,c,d,e,f FROM xxx.BBBB WHERE dt ${zdt.addDay(0).format(yyyy-MM-dd)} AND predict_type not IN ( SELECT distinct a FROM xxx.AAAAAWHERE dt ${zdt.addDay(0).format(yyyy-MM-dd)} ) 分析 通过查看SQL语句的执行计划基本…

全面管控企业资产,这个小妙招做到了!

随着全球金融市场的复杂性增加以及资产多样化的趋势,确保资产的最大价值和最小风险已经成为一个迫切的需求。资产管理系统能够更好地掌握自己的财务状况,做出明智的决策。 从个人投资者到大型企业,都可以从中受益,无论是实时监控投…

腾讯云GPU服务器GN7实例NVIDIA T4 GPU卡

腾讯云GPU服务器GN7实例搭载1颗 NVIDIA T4 GPU,8核32G配置,系统盘为100G 高性能云硬盘,自带5M公网带宽,系统镜像可选Linux和Windows,地域可选广州/上海/北京/新加坡/南京/重庆/成都/首尔/中国香港/德国/东京/曼谷/硅谷…

C#如何打包EXE程序生成setup安装文件

项目结束之后,有需要将winForm程序打包成.exe文件提供给用户。 这里记录一下打包过程。 1:首先获取打包插件,如果你的VS已经安装,忽略此步骤。 点击 工具->扩展和更新,选择联机,搜索installer&#x…

AntPro 模版代码

1 ProTable 实现选择和反显 页面1 页面2 选择页面2选择之后反显到页面1 &#xff0c;且支持跨页选择。同时下次进来页面1展示的数据要反显到页面2被选中。 页面2代码 <ProTablerowKey"id"columns{columns}request{(params: any) > {const newParams {pageI…

androidstudio引入jar包

如图&#xff0c;选择project 然后在src下创建一个lib文件夹&#xff0c;将要添加到项目中的jar包粘贴lib里面&#xff0c;如图 接着选中jar包&#xff0c;右击&#xff0c;会出一个弹窗&#xff0c;选择Add As Library…&#xff0c;如图 会出现一个弹窗&#xff0c;点击OK…

安防监控视频云存储平台EasyCVRH.265转码功能更新:新增分辨率配置

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…

<kernel>kernel 6.4 USB-之-hub_event()分析

&#xff1c;kernel&#xff1e;kernel 6.4 USB-之-hub_event()分析 本文是基于linux kernel 6.4版本内核分析&#xff1b;源码下载路径&#xff1a;linux kernel 本文主要分析hub_event()函数的内容&#xff1b;hub_event()函数是Linux内核USB子系统中的一个函数&#xff0c…

面试之ReentrantLock

一&#xff0c;ReentrantLock 1.ReentrantLock是什么&#xff1f; ReentrantLock实现了Lock接口&#xff0c;是一个可重入且独占式的锁&#xff0c;和Synchronized关键字类似&#xff0c;不过ReentrantLock更灵活&#xff0c;更强大&#xff0c;增加了轮询、超时、中断、公平锁…

侯捷 C++ part2 兼谈对象模型笔记——7 reference、const、new/delete

7 reference、const、new/delete 7.1 reference x 是整数&#xff0c;占4字节&#xff1b;p 是指针占4字节&#xff08;32位&#xff09;&#xff1b;r 代表x&#xff0c;那么r也是整数&#xff0c;占4字节 int x 0; int* p &x; // 地址和指针是互通的 int& r x;…

windows电脑简单实时tts语音播报wsay;python pyttsx3语言实时播报text-to-speech;微软edge-tts 音色自然离线不实时

1、wsay 参考&#xff1a; https://github.com/p-groarke/wsay 下载安装&#xff1a; https://github.com/p-groarke/wsay/releases/tag/v1.5.0 下载exe文件&#xff0c;并把加入环境变量就可 使用 # Say something. wsay "Hello there."wsay "你好"…

图书馆管理系统、学生管理系统、交通管理系统(C语言、数据结构、java、Javaweb)

图书馆管理系统作为一个经典的项目&#xff0c;在国家、学校、等每个地方或者作为期末作品都用的非常广泛&#xff1a; C语言程序设计&#xff1a;图书馆管理系统含说明文档。 大一时C综合设计&#xff0c;当时得了96。代码纯原创&#xff0c;可直接运行&#xff0c;包含详细注…

springboot多数据源配置,看这一篇就够了

springboot下多数据源配置实现 不管是两个mysql&#xff0c;还是一个mysql一个oracle&#xff0c;都是一样的操作 目录 springboot下多数据源配置实现配置application.yml文件数据源配置类创建mapper接口创建mapper的xml配置文件 你可能会遇到的问题 配置application.yml文件 …

无涯教程-Perl - study函数

描述 此功能需要花费额外的时间来研究EXPR,以改善在EXPR上执行的正则表达式的性能。如果省略EXPR,则使用$_。实际的速度增益可能非常小,具体取决于您希望搜索字符串的次数。 您一次只能学习一种表达式或标量。 语法 以下是此函数的简单语法- study EXPRstudy返回值 此函数…