Python爬虫---scrapy框架---当当网管道封装

2024-01-17 03:28

本文主要是介绍Python爬虫---scrapy框架---当当网管道封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目结构: 

dang.py文件:自己创建,实现爬虫核心功能的文件

import scrapy
from scrapy_dangdang_20240113.items import ScrapyDangdang20240113Itemclass DangSpider(scrapy.Spider):name = "dang"  # 名字# 如果是多页下载的话, 那么必须要调整的是allowed_domains的范围 一般情况下只写城名# allowed_domains = ["https://category.dangdang.com/cp01.01.00.00.00.00.html"]allowed_domains = ["category.dangdang.com"]start_urls = ["https://category.dangdang.com/cp01.01.00.00.00.00.html"]# 第1页:"https://category.dangdang.com/cp01.01.00.00.00.00.html"# 第2页: "https://category.dangdang.com/pg2-cp01.01.00.00.00.00.html"# 第3页: "https://category.dangdang.com/pg3-cp01.01.00.00.00.00.html"base_url = "https://category.dangdang.com/pg"page = 1def parse(self, response):print("========================================================================")# pipelines: 下载数据# items: 定义数据结构# xpath语法# src = //ul[@id='component_59']/li/a/img/@src# 除了第一张,其他做了懒加载 所以不能使用src,要使用这个data-original# src = //ul[@id='component_59']/li/a/img/@data-original# alt = //ul[@id='component_59']/li/a/img/@alt# price = //ul[@id='component_59']/li/p[@class='price']/span[1]/text()# 所有的seletor的对象都可以再次调用xpath语法li_list = response.xpath("//ul[@id='component_59']/li")for li in li_list:src = li.xpath(".//img/@data-original").extract_first()if src:src = srcelse: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)# 将爬取的数据放在对象里book = ScrapyDangdang20240113Item(src=src, name=name, price=price)# 获取一个book将book交给pipelines,将对象放在管道里yield book# 每一页的爬取业务的逻辑全都是一样的,所以我们只需要将执行的那个页的请求再次调用if self.page < 100:self.page = self.page + 1url = self.base_url + str(self.page) + "-cp01.01.00.00.00.00.html"# 调用parse万法# scrapy.Request就是scrpay的get请求 url就是请求地址# callback是你要执行的那个函数注意不需要加()yield scrapy.Request(url=url, callback=self.parse)

 items文件:定义数据结构的地方

import scrapyclass ScrapyDangdang20240113Item(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 通俗的说就是你要下载的数据都有什么src = scrapy.Field()name = scrapy.Field()price = scrapy.Field()

settings文件:配置文件,例如开启管道

# 开启管道
ITEM_PIPELINES = {# 管道可以有很多个,那么管道是有优先级的,优先级的范围是1到1000,值越小优先级越高"scrapy_dangdang_20240113.pipelines.ScrapyDangdang20240113Pipeline": 300,"scrapy_dangdang_20240113.pipelines.DangdangDownloadPipeline": 301,
}

 pipelines.py文件:管道文件,里面只有一个类,用于处理下载数据的,值越小优先级越高

# 下载数据# 如果想使用管道的话 那么就必须在settings中开启管道
class ScrapyDangdang20240113Pipeline:# item就是yield后面的book对象# 方式一:# 以下这种模式不推荐,因为每传递过来一个对象,那么就打开一次文件,对文件的作过于频繁# def process_item(self, item, spider):# (1)write万法必须要写一个字符串,而不能是其他的对象,使用str()强转# (2)w模式 会每一个对象都打开一次文件 覆盖之前的内容# with open("book.json","a",encoding="utf-8")as fp:#     fp.write(str(item))# return item# 方式二:# 在爬虫文件开始之前就执行的方法def open_spider(self, spider):print("++++++++++++++++++++++++++++++++++++++++++++++++++")self.fp = open("book.json", "w", encoding="utf-8")def process_item(self, item, spider):self.fp.write(str(item))return item# 在爬虫文件开始之后就执行的方法def close_spider(self, spider):print("----------------------------------------------------")self.fp.close()# 多条管道同时开启
# (1)定义管道类
# (2)在settings中开启管道
import urllib.request
class DangdangDownloadPipeline:def process_item(self, item, spider):# 下载图片url = "https:" + item.get("src")filename = "./books/" + item.get("name")[0:6] + ".jpg"urllib.request.urlretrieve(url=url, filename=filename)return item

这篇关于Python爬虫---scrapy框架---当当网管道封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614753

相关文章

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一