scrapy案例——当当网的爬取一

项目名称:当当网的爬取一——爬取青春文学的书籍数据

案例需求:

1.使用scrapy爬虫技术爬取当当网中青春文学的书籍数据,包括(标题、现价、定价、作者、出版日期、出版社、书本详情和书本图片url)

2.将获取到的数据保存在数据库中

3.实现分页爬取

分析

1.数据包的获取

2.准备工作:

# ROBOTSTXT_OBEY = True
ITEM_PIPELINES = {
   "Dangd.pipelines.DangdPipeline": 300,
}
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"

3.解析数据

同理

标题:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[3]/p[1]/a
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[4]/p[1]/a

/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[1]/a

现价:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[3]/span[1]
定价:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[3]/span[2]

作者:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[1]/a[1]

出版日期:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[2]

出版社:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[3]/a

书本详情:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[2]/text()

图片:
/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/a/img
title=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/a/img/@alt').extract()
        price_xz=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[3]/span[1]/text()').extract()
        price_dj=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[3]/span[2]/text()').extract()
        author=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[1]/a[1]/text()').extract()
        date=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[2]/text()').extract()
        cbs=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[5]/span[3]/a/text()').extract()
        detail=response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/p[2]/text()').extract()
        # url='http://'+response.xpath('/html/body/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li/a/img/@src').extract()
        url=response.xpath('//ul[@id="component_59"]/li')
        for t,px,pd,a,d,c,de,u in zip(title,price_xz,price_dj,author,date,cbs,detail,url):
            src = u.xpath('.//img/@data-original').extract_first()
            if src:
                src='http:'+src
            else:
                src = 'http:'+u.xpath('.//img/@src').extract_first()

            # print('标题:',title)
            # print('现价:',price_xz)
            # print('定价:',price_dj)
            # print('作者:',author)
            # print('出版日期:',date)
            # print('出版社:',cbs)
            # print('书本详情:',detail)
            # print('书本图片:',url)
            print('标题:', t)
            print('现价:', px)
            print('定价:', pd)
            print('作者:', a)
            print('出版日期:', d.replace('/',''))
            print('出版社:', c)
            print('书本详情:', de)
            print('书本图片:', src)
            print('=====================================')

items.py

class DangdItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()#标题
    price_xz = scrapy.Field()#现价
    price_dj = scrapy.Field()#定价
    author = scrapy.Field()#作者
    date = scrapy.Field()#出版日期
    cbs = scrapy.Field()#出版社
    detail = scrapy.Field()#书本详情
    url = scrapy.Field()#书本图片

4.翻页

第一页 http://category.dangdang.com/cp01.01.00.00.00.00.html

第二页 http://category.dangdang.com/pg2-cp01.01.00.00.00.00.html

第三页 http://category.dangdang.com/pg3-cp01.01.00.00.00.00.html

第四页 http://category.dangdang.com/pg4-cp01.01.00.00.00.00.html

所以总结:

http://category.dangdang.com/pg{}-cp01.01.00.00.00.00.html

        if self.page<10:#就不保存完了
            self.page=self.page+1
            url=self.base_url+str(self.page)+'-cp01.01.00.00.00.00.html'
            print('+++++++++++++++++第{}页++++++++++++++++++'.format(self.page))
            yield scrapy.Request(url=url,callback=self.parse)

5.保存至数据库

class DangdPipeline:
    def __init__(self):
        # 打开文件
        # 连接数据库
        self.conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='wx990826',
            db='dangdang',
        )
        self.cur = self.conn.cursor()

    def process_item(self, item, spider):
        sqli = "insert into qcwx(title,price_xz,price_dj,author,date,cbs,detail,url) values(%s,%s,%s,%s,%s,%s,%s,%s)"

        self.cur.execute(sqli, (
            item['title'], item['price_xz'], item['price_dj'], item['author'], item['date'], item['cbs'], item['detail'], item['url']))
        self.conn.commit()
        print('保存完毕')
        return item

6.运行

from scrapy import cmdline
cmdline.execute(['scrapy','crawl','dangd','--nolog'])

运行结果:

注意:该网站的图片为懒加载 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费开源的微信开发框架

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;聊天机器人在各个领域得到了广泛的应用。在社交媒体中&#xff0c;自动回复成为了一个流行的功能&#xff0c;让用户可以方便地与机器人进行互动。gewe框架&#xff0c;一个开源的微信聊天机器人框架&#xff0c;实现…

高刚性重切削数控走心机

高刚性重切削数控走心机&#xff0c;作为现代精密加工领域的佼佼者&#xff0c;以其卓越的性能和广泛的应用领域&#xff0c;赢得了众多行业的青睐。下面&#xff0c;我将从多个方面为您详细解析这种数控走心机。 ‌一、定义与特点‌ ‌定义‌&#xff1a;高刚性重切削数控走心…

【Java 并发编程】单例模式

前言 单例模式是一种十分常用但却相对而言比较简单的单例模式。虽然它简单但是包含了关于线程安全、内存模型、类加载机制等一些比较核心的知识点。本章会介绍单例模式的设计思想&#xff0c;会去讲解了几种常见的单例实现方式&#xff0c;如饿汉式、懒汉式、双重检锁、静态内部…

C++和OpenGL实现3D游戏编程【连载16】——详解三维坐标转二维屏幕坐标(向量和矩阵操作实战)

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节课要实现的内容 在上一课我们了解了着色器&#xff0c;了解了部分核心模式编程内容&#xff0c;从中接触到了线性代数中向量和矩阵相关知识&#xff0c;我们已经能够感受到向量和矩阵在OpenGL编程中的重要性。特别是后期…

Linux——传输层协议

目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…

MySQL数据库的高可用

一、MHA工作原理 1、MHA的工作原理 1、MHA利用 select 1 as value 指令判断master服务器的健康性&#xff0c;一旦master宕机&#xff0c;MHA从宕机崩溃idmaster保存二进制日志事件&#xff08;binlog events&#xff09; 2、识别含有最新更新的slave 3、应用差异的中继日志&a…

bcprov-jdk15on-1.52.0.jar has unsigned entries - org/bouncycastle/LICENSE

报错界面如上图 解决办法&#xff1a; 1.修改引用jar包&#xff0c;将build.gradle里面的依赖为 implementation org.bouncycastle:bcprov-jdk15on:1.52 2.到maven上下载最新的bcprov-jdk15on-1.52.0.jar,替换文件夹中原有的jar包

C/C++每日一练:实现一个环形队列

队列&#xff08;queue&#xff09; 队列是一种先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09; 的数据结构&#xff0c;类似于排队的场景。最先进入队列的元素最先被处理&#xff0c;而后加入的元素则排在队列的末尾。 常见的队列操作&#xff1a; 入队…

第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会在汉圆满落幕

10 月 19 日&#xff0c;“第二届中国楚域品牌文化创新发展大会暨楚域尚品发布会”在武汉市光谷九通海源大酒店隆重举行。本次大会由中国商业文化研究会传承创新工作委员会、楚域品牌文化传承创新工作委员会、华夏品牌文化创新发展大会组委会主办&#xff0c;湖北省企业文化促进…

python爬虫简易入门示例

版本环境 win11python 3.12.4 目标&#xff1a;爬取https://gitee.com/explore的列表内容&#xff0c;并写入txt文本 效果 开始 1.安装依赖 pip install requests beautifulsoup42.编写代码&#xff0c;如下&#xff0c;详见注释 import requests from bs4 import Beauti…

【PFGA】二选一数选器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 verilog FPGA 实验 一、实验原理 二、实验过程 三、实验结果 代码 module mux21(input s,input a,input b,output reg y); always(s or a or b) beginif (~s) beginy<a;end else beginy<…

ollama+ollama-webu在windos上部署的教程

ollamaollama-webu在windos上部署的教程 一、需要准备的环境和代码二、开始部署1. 修改系统变量&#xff1a; 常见问题 首先介绍一下ollama&#xff1a; Ollama 是一种为快速大规模语言模型推理所设计的框架和平台。它旨在帮助用户通过高效的方式运行和管理大型语言模型&#x…

使用AITemplate和AMD GPU的高效图像生成:结合Stable Diffusion模型

Efficient image generation with Stable Diffusion models and AITemplate using AMD GPUs 2024年1月24日&#xff0c;作者是[Douglas Jia] Stable Diffusion 已成为图像生成领域的突破性进展&#xff0c;帮助用户将文本描述转化为引人入胜的视觉输出。 Stable Diffusion 的…

SAP_通用模块-MASS批量操作技巧(二)

业务背景&#xff1a; 前两天写了一篇关于MASS批量操作的文档&#xff0c;当时测试批量扩充物料视图的时候失败了&#xff0c;就没记录进去&#xff0c;然后手头上刚好有一个需求&#xff0c;就是物料已经有基本视图等相关信息的情况下&#xff0c;需要扩充相关的物料视图。方法…

光纤光学——弱导光纤与线偏振模

一、基本思想 弱导光纤&#xff1a;n1≈ n2 , k0n1 ≈ k0n2&#xff0c;亦即&#xff1a; k0n1 ≈ k0 n2 ≈ 光线与纤轴的夹角小&#xff1b;芯区对光场的限制较弱&#xff1b; 消逝场在包层中延伸较远。 弱导光纤场的特点&#xff1a; HEι1,m模式与EHι-1,m色散曲线相近…

1024程序员节·城市聚会·西安,它来了

活动名称 CSDN 1024程序员节城市聚会西安 活动主题 智能进化&#xff1a; 开发者在AI时代的工作与生活变革 活动背景 CSDN一年一度的1024程序员节城市聚会&#xff08;西安站&#xff09;是一场专为程序员打造的盛会。这个活动旨在为西安的开发者们提供一个交流技术、分享…

每日OJ题_牛客_数组变换_贪心+位运算_C++_Java

目录 牛客_数组变换_贪心位运算 题目解析 C代码1暴力 C代码2位运算 Java代码位运算 牛客_数组变换_贪心位运算 数组变换__牛客网 (nowcoder.com) 描述&#xff1a; 牛牛有一个数组&#xff0c;里面的数可能不相等&#xff0c;现在他想把数组变为&#xff1a;所有…

MySQL数据库和表的基本操作

目录 一、数据库的基础知识 背景知识 数据库的基本操作 二、数据类型 字符串类型 数值类型 日期类型 三、表的基本操作 创建表 查看表结构 查看所有表 删除表 一、数据库的基础知识 背景知识 MySQL是一个客户端服务器结构的程序 主动发送数据的这一方&#xff0c;…

【Java】集合补充

常见基础集合汇总 数据结构&#xff1a;栈 数据结构分为&#xff1a; &#xff08;1&#xff09;逻辑结构 &#xff1a;--》思想上的结构--》卧室&#xff0c;厨房&#xff0c;卫生间 ---》线性表&#xff08;数组&#xff0c;链表&#xff09;&#xff0c;图&#xff0c;树&…

近期股市热潮,现有架构模块下金融交易系统如何应对“冲击”?优化思路如下

近期股市热情高涨&#xff0c;激增的交易量挑战的不止是券商&#xff0c;还有交易系统的基础架构是否稳固。9月底&#xff0c;股市牛抬头&#xff0c;瞬时的高并发量一把“撞”崩多家券商的交易应用系统&#xff0c;导致交易停滞。 在这场资本盛宴背后&#xff0c;稳定、高效、…