【python】当当书籍数据抓取分析与可视化(代码+报告)【独一无二】

news2024/11/16 21:29:25

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


当当书籍数据抓取分析与可视化(代码+报告)


目录

  • 当当书籍数据抓取分析与可视化(代码+报告)
  • 1. 数据抓取
  • 2. 数据收集
  • 3. 数据存储
    • 3.1 excel存储
    • 3.2 数据库存储
  • 4. 数据清洗
  • 5. 数据可视化
    • 5.1单价前十名的书籍可视化
    • 5.2 数据占据前十名的出版社
    • 5.3出版年份可视化


本项目旨在研究和分析当当网上的书籍信息。当当网作为中国领先的在线零售平台之一,其上架的书籍种类繁多,涵盖了从文学、科技到教育等多个领域。这些书籍信息不仅能反映出市场上的流行趋势,还可以揭示消费者的购买偏好和出版业的发展动态。
项目的第一阶段集中在通过网络爬虫技术从当当网上爬取书籍数据。使用Python语言,结合requests和lxml库,项目团队成功地爬取了书名、作者、单价、出版日期、出版社和书籍简介等关键信息。在这个过程中,团队克服了多种网络爬虫的常见挑战,如网页编码处理、动态加载的内容、反爬机制的规避,以及数据的有效提取。
收集到的原始数据经过清洗和整理,移除了不完整或不符合要求的记录,以确保后续分析的准确性。这一步骤使用pandas等数据处理工具完成,有效地筛选出了高质量的数据集。

1. 数据抓取

发送HTTP请求:使用requests库发送HTTP GET请求,向当当网的多个页面获取网页内容。通过指定URL和参数,可以获取不同页面的图书信息。解析网页内容:使用lxml库对网页内容进行解析。通过使用XPath表达式,可以定位和提取所需的数据。在这段代码中,使用XPath表达式提取了书名、作者、价格、出版日期和出版社等信息。循环遍历页面:通过在代码中使用for循环,可以循环遍历多个页面。在每个页面上执行相同的爬取和解析操作,以获取更多的图书信息。处理异常情况:通过使用try-except语句,可以捕获可能的异常情况,例如在解析页面时出现的XPath定位错误。在这段代码中,使用try-except语句来处理可能出现的异常,并在出现异常时将相应字段设置为默认值。数据存储:图书信息被添加到一个二维列表data中,以便后续写入Excel文件。

from lxml import etree
import requests
import csv
from openpyxl import Workbook

data = [['书名', '作者', '单价', '出版日期', '出版社', '简介']]
for m in range(1, 6):
    url = 'https://search.xxxx.com/?key=xxxxxx.page_index={}'.format(m)
    response = requests.get(url)
    if response.status_code == 200:
        pass

👇👇👇 关注公众号,回复 “当当书籍数据抓取” 获取源码👇👇👇


2. 数据收集

从当当网爬取的数据包括书籍的各种信息。具体爬取的数据字段包括:
书名:每本书的标题。
作者:书籍的作者。
单价:书籍的价格。
出版日期:书籍的出版时间。
出版社:出版书籍的出版社。
简介:书籍的简短描述。


3. 数据存储

3.1 excel存储

通过如下代码,存储到excel表格中:

👇👇👇 关注公众号,回复 “当当书籍数据抓取” 获取源码👇👇👇

# 创建一个新的 Excel 文件
wb = Workbook()
sheet = wb.active

# 逐行写入数据
for row_index, row_data in enumerate(data, start=1):
    for column_index, value in enumerate(row_data, start=1):
        sheet.cell(row=row_index, column=column_index, value=value)

# 保存文件
wb.save('处理前数据.xlsx')

在这里插入图片描述

3.2 数据库存储

安装和配置:MySQL可以通过官方网站下载并按照指南进行安装。安装完成后,可以通过配置文件对MySQL进行各种设置,如端口号、字符集、缓冲区等。
连接数据库:在Python中,可以使用多个库(如mysql-connector-python、PyMySQL、MySQLdb)来连接MySQL数据库。需要提供主机地址、用户名、密码和数据库名等连接信息。连接成功后,可以创建游标对象用于执行SQL语句。
执行SQL语句:可以使用SQL语句对数据库进行各种操作,如创建表、插入数据、查询数据、更新数据和删除数据等。通过游标对象的execute()方法执行SQL语句,可以使用参数绑定来安全地插入数据。
事务处理:MySQL支持事务,可以使用commit()方法提交事务,将更改保存到数据库中,或使用rollback()方法回滚事务,撤销未提交的更改。
查询数据:可以使用SELECT语句从表中检索数据。执行查询后,可以使用fetchone()、fetchall()或fetchmany()等方法获取查询结果。
数据类型:MySQL提供了多种数据类型,如整数、浮点数、字符串、日期和时间等。合理选择和使用适当的数据类型有助于提高数据库性能和数据存储的效率。

在这里插入图片描述


4. 数据清洗

导入库:import pandas as pd:导入了pandas库,它是一个强大的数据处理库,常用于数据分析。
文件路径设置:excel_file_path:设置了原始数据文件(data.xlsx)的路径。output_excel_file_path:定义了清洗后数据要保存的文件路径(处理后的数据.xlsx)。
读取Excel文件:使用pd.read_excel(excel_file_path, engine=“openpyxl”)读取Excel文件。这里指定了openpyxl作为引擎,因为它支持.xlsx格式的文件。
数据清洗:df_filtered = df[~df.apply(lambda x: x.astype(str).str.contains(‘无’)).any(axis=1)]:这一行代码是数据清洗的关键。
它将DataFrame中包含“无”的行排除。apply(lambda x: x.astype(str).str.contains(‘无’))将DataFrame的每个元素转换为字符串,然后检查是否包含“无”字样。
~符号表示否定,因此这行代码的含义是选择那些不包含“无”字样的行。
any(axis=1)确保任何列中出现“无”的行都将被排除。
保存清洗后的数据:df_filtered.to_excel(output_excel_file_path, index=False):将清洗后的数据保存到Excel文件。index=False表示在保存时不包括行索引。
打印DataFrame:print(df)将打印原始数据的DataFrame。这可能用于检查数据载入是否正确,但在实际的数据处理脚本中可能不是必要的。
清洗后的数据如下:
在这里插入图片描述


5. 数据可视化

5.1单价前十名的书籍可视化

top_10_prices = df.nlargest(10, ‘单价’):这行代码使用pandas的nlargest方法从DataFrame df 中提取单价最高的前10本书。这个方法根据单价列的值排序并选择前10个最大值。

绘制柱状图:plt.figure(figsize=(10, 6)):设置图表的大小为10x6英寸。这有助于确保图表在展示时有足够的空间来清晰地显示所有信息。
plt.bar(top_10_prices[‘书名’], top_10_prices[‘单价’], color=‘skyblue’):使用柱状图(bar)来展示数据。top_10_prices[‘书名’] 和 top_10_prices[‘单价’] 分别指定了X轴和Y轴的数据。color='skyblue’设置了柱子的颜色为天蓝色。

设置图表细节:plt.xlabel(‘书名’) 和 plt.ylabel(‘单价’):分别设置X轴和Y轴的标签为“书名”和“单价”。plt.title(‘单价前十名的书籍’):设置图表的标题。
plt.xticks(rotation=45, ha=‘right’):设置X轴的刻度标签(即书名)旋转45度,并且对齐方式为右对齐。这样做可以防止标签文字相互重叠,确保每个书名都清晰可读。plt.tight_layout():这个方法用于自动调整子图参数,确保图表的元素(如标题、轴标签)都被整齐地展示,而不会发生重叠或遮挡的情况。

在这里插入图片描述

👇👇👇 关注公众号,回复 “当当书籍数据抓取” 获取源码👇👇👇

5.2 数据占据前十名的出版社

计算出版社出现频率:top_publishers = df[‘出版社’].value_counts().head(10):这行代码首先对df中的出版社列使用value_counts方法,该方法统计了每个独特出版社出现的次数。随后,通过.head(10)提取了频率最高的前10个出版社。
绘制折线图:plt.figure(figsize=(10, 6)):设置图表的大小为10x6英寸,以确保图表的可读性。plt.plot(top_publishers.index, top_publishers.values, marker=‘o’, linestyle=‘-’, color=‘green’):绘制折线图。这里,top_publishers.index代表出版社名称,top_publishers.values代表相应的出现次数。marker=‘o’设置了数据点的标记为圆形,linestyle=’-'设置了线型为实线,color='green’设置了线条颜色为绿色。
设置图表细节:plt.xlabel(‘出版社’) 和 plt.ylabel(‘数量’):分别为X轴和Y轴设置标签,分别表示出版社和对应的出版数量。plt.title(‘前十名出版社’):设置图表的标题。plt.xticks(rotation=45, ha=‘right’):将X轴的刻度标签(即出版社名称)旋转45度,并设置为右对齐。这有助于防止标签文字相互重叠,确保每个出版社名称都清晰可读。plt.tight_layout():调整子图参数,确保图表的元素(如标题、轴标签)整齐展示,避免重叠或遮挡。
在这里插入图片描述

5.3出版年份可视化

转换出版日期为年份:df[‘出版年份’] = pd.to_datetime(df[‘出版日期’]).dt.year:这行代码首先使用pandas的to_datetime函数将出版日期列转换为datetime对象,随后通过.dt.year属性获取每个日期的年份部分。这样,每本书的出版年份就被提取并存储在新的出版年份列中。
计算年份分布:year_counts = df[‘出版年份’].value_counts():使用value_counts方法计算出版年份列中每个年份出现的次数,即每个年份出版的书籍数量。
绘制饼图:plt.figure(figsize=(8, 8)):设置饼图的大小为8x8英寸,保证足够的展示空间。plt.pie(year_counts, labels=year_counts.index, autopct=‘%1.1f%%’, startangle=140):使用pie方法绘制饼图。year_counts为各年份的书籍数量,labels=year_counts.index设置了饼图中每部分的标签为年份,autopct='%1.1f%%'设置了每部分的百分比格式,startangle=140设定了饼图的起始角度。设置图表标题和布局:plt.title(‘出版年份分布’):为饼图设置标题“出版年份分布”。plt.tight_layout():调整子图参数,确保图表的元素(如标题)整齐展示,避免重叠或遮挡。
在这里插入图片描述

👇👇👇 关注公众号,回复 “当当书籍数据抓取” 获取源码👇👇👇

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

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

相关文章

Java多线程-第20章

Java多线程-第20章 1.创建线程 Java是一种支持多线程编程的编程语言。多线程是指在同一程序中同时执行多个独立任务的能力。在Java中,线程是一种轻量级的子进程,它是程序中的最小执行单元。Java的多线程编程可以通过两种方式实现:继承Threa…

【李肯C语言小册.目录】小册价值、内容目录汇总、加群方法 | 必看收藏.

小册订阅戳这里:【C语言小册 必读】为什么有这份专栏?解决什么问题?有哪些价值?是否值得订阅?-CSDN社区 订阅后,记得加微VX找我,发zhi付截图,备注【C语言小册】,拉你进本…

关于 SLO,我们需要了解什么?

什么是 SLO? SLO(Service Level Objective)是服务质量目标的短语缩写。它通常指的是维护系统的最高级别的目标,或服务等级协议(SLA)中的服务质量目标。它能够定义客户和用户在使用软件系统时所期望的服务质…

在直播间抢到好多实惠东东,全靠抖音支付

前不久我特别喜欢的一位主播的直播间做活动,很多我放在购物车里好久的心仪好物都有秒杀惊喜价。更让我开心的是,在拼手速抢这些秒杀好物的时候,我都成功了!这主要是因为我用了抖音支付,付款环节特别丝滑顺畅,让我在抖音的购物体验直接原地提升了几个level! 可能有朋友现在还是…

使用Docker安装Jenkins,解决插件安装失败,版本太低等问题

如果已经遇到插件安装部分失败,Jenkins版本太低,又要换什么清华镜像地址,不要犹豫,直接以下步骤卸载重装就好了 开始安装 yum 更新到最新 yum update到Jenkins官网查找最新的LST版本 最后的版本号一定要带,指定下载具…

9款高效绘图神器,提升你的工作效率

在日常工作或生活中,我们必须绘制各种图表、流程图、思维导图等图形,或者想用画笔描述自己的想法。然而,我们在许多绘图软件面前感到困惑。我们不知道哪个绘图软件好,也没有足够的时间一一尝试 在接下来的空间里,我们…

jmeter做接口自动化测试,你可能只是个新手!

jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。 你有没有想过呢? 下面我就给大家讲…

深入了解小程序设计,六个关键要点全解析!

微信小程序开启了互联网软件的新使用模式。在各种微信小程序争相抢占流量的同时,如何设计微信小程序?让用户感到舒适是设计师在产品设计初期应该考虑的问题。那么如何做好微信小程序的设计呢?即时设计总结了以下设计指南,希望对准…

ProgrammingError: nan can not be used with MySQL

该错误怎么发生的? 我们先在本地创建测试表: CREATE TABLE users_test (id int NOT NULL AUTO_INCREMENT COMMENT 主键,trade_account varchar(50) DEFAULT NULL COMMENT 交易账号,username varchar(50) DEFAULT NULL,email varchar(100) DEFAULT NULL…

Cesium.CustomShader颜色值显示错误

官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…

手把手教会你--办公软件--Word--持续更新

有什么问题,请尽情问博主,QQ群796141573 1.1 Word排版基础1 保存和命名Ⅰ自动保存 2 建立标准的编辑环境(1)显示编辑标记(2)打开标尺(3)打开导航窗格 3 高效的鼠标/键盘手势(1)连续选中内容--shift(2)跳选内容--ctrl(3)矩形选择内容--alt(4)回到文档开头…

全球79%的程序员都在考虑跳槽,你呢?

​在最近二十年中,全球行业都经历了一次数字化变革,各行各业对于技术开发的比重越来越高,而作为技术开发核心的开发人员们对于一个企业的未来发展也变得越来越重要。因此各企业对于技术人才的竞争变得火热,并且这个热度一年高过一…

SSM框架详解:结构创建与注解应用

文章目录 1. 引言2. SSM框架项目结构创建2.1 目录结构2.2 说明 3. 注解的应用3.1 Controller3.2 Service3.3 Repository3.4 Autowired3.5 RequestMapping3.6 Select、Insert等 4. 结语 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢…

传统家装“死气沉沉”?VR智慧家装提供VR可视化方案

传统家装市场虽然处于成熟期,但是对于装修小白的户主来说,难以解决的痛点依旧还有很多。很多家装公司所谓的设计师,不一定全都具备设计知识,也不懂得从客户的需求出发,多重因素导致家装行业“死气沉沉”。 为了打破装修…

振南技术干货集:各大平台串口调试软件大赏(4)

注解目录 (串口的重要性不言而喻。为什么很多平台把串口称为 tty,比如 Linux、MacOS 等等,振南告诉你。) 1、各平台上的串口调试软件 1.1Windows 1.1.1 STCISP (感谢 STC 姚老板设计出 STCISP 这个软件。&#xf…

如何熟练使用vim工具?

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 &#x1f…

宠物店管理系统服务预约会员小程序效果如何

很多人都会养宠物,随着生活品质提升,尤其以年轻人为主的消费者在宠物食品、医疗、购买消费等方面有较高的消费属性,而在线下也有大量从业者,互联网程度及智慧化门店提升及客户赋能,线下经营的同时还需要线上发展拓客引…

C/C++ 实现FTP文件上传下载

FTP(文件传输协议)是一种用于在网络上传输文件的标准协议。它属于因特网标准化的协议族之一,为文件的上传、下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinINet库,WinINet&#xff…

设计模式-创建型模式之工厂设计模式

文章目录 五、工厂方法六、抽象工厂 五、工厂方法 工厂方法,使用工厂可以像使用人员屏蔽对象创建的细节,使用者无需指定具体的类即可使用功能,达到信息隐蔽的作用,便于后期的维护,修改和扩展。 在看工厂方法前还有一…

低代码究竟有何特别之处?为什么很多企业倾向于用低代码开发软件?

目录 一、低代码是什么 二、低代码有哪些核心能力? 三、低代码能做哪些事情? 1、软件开发快效率高 2、满足企业的多样化需求 3、轻松与异构系统集成 4、软件维护成本低 5、为企业实现降本增效 四、结语 低代码平台正高速发展中,越来越多的企业…