【Scrapy】京东商品数据可视化

本文介绍了如何使用Scrapy爬虫库抓取京东商品数据,包括数据爬取、分析网页结构、保存数据至MySQL,以及后续的数据处理、分析和可视化过程,通过条形图和词云展示了价格分布和用户评论情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Scrapy】京东商品数据可视化

  👉引言💎

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
热爱写作,愿意让自己成为更好的人…


在这里插入图片描述

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

一、爬取数据:

1.1 scrapy爬虫库简介:

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.

其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 后台也应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持.

1.2 技术实现:

1.2.1搭建框架结构

首先搭建scrapy库项目,运行如下代码生成代码框架:

scrapy startproject crawler
cmdline.execute('scrapy crawl jd'.split())

spiders文件夹中的py文件即为主要爬虫代码,当获取网页请求后,在该文件的主类中重写parse方法,即请求解析代码。

spiders上级目录下的items文件即为获取到的字段,也就是爬取的属性值,示例如下:

class CrawljingdongItem(scrapy.Item):
    id=scrapy.Field()
    comment=scrapy.Field()
    productName=scrapy.Field()
    storeName=scrapy.Field()
    address=scrapy.Field()
    price=scrapy.Field()
    UserComments=scrapy.Field()
    pass

1.2.2 分析网页结构

在重写parse请求时,首先需要对网页进行结构分析,这里以京东商品页面进行展示。

首先打开京东界面,得到网址,填入starturls中。然后使用xpath进行HTML的解析,此时可以获取静态页面中的所有内容

请添加图片描述

于是使用data = ans_html.xpath("//*[@class='gl-warp clearfix']/li") 可以得到所有的列表标签,可以看到,里面存放了所有的单位商品信息。随后使用for循环遍历每个列表,对商品信息进行单独提取,并使用item类进行存储。

这里需要注意的是,对于评论等数据是无法直接从HTML中提取出来的,因为这些数据通常是基于ajax技术进行异步传输,即滑动时会进行加载(动态加载),所以必须找到保存评论信息的json文件。通过网页检查器,可以发现文件位置,根据该URL使用request库进行请求即可。

请添加图片描述

主要逻辑代码完成后,下一步会进入spiders上级目录下的pipelines文件中进行数据的存储级操作,这里使用mysql数据库进行数据的存储。

二、数据保存:

首先需要导入pymsql库,其次进行主要连接属性的配置

 def dbHandle(self):
        conn = pymysql.connect(
            host="localhost",
            user="root",
            passwd="135157",
            charset="utf8",
            use_unicode=False
        )
        return conn

然后根据sql语法,使用pymysql的execute方法将查询语句传入到sql中进行查询,可以看到数据存储如下:

请添加图片描述

下一步使用pandas库的read_sql_query方法从mysql数据库中读取数据,同时进行分析以及处理。

三、数据读取以及分析:

将数据读取后得到一个DataFrame对象,然后分别进行数据处理,最终得到 商品价格区间的划分,不同价格区间范围内的商品数量,用户的评论集合,商品名称的集合等数据信息,进行下一步数据可视化。

四、数据可视化:

首先使用matplotlib的plot方法进行相关的操作。

对商品价格区间内的商品数量使用条形图进行可视化:

请添加图片描述

对店铺地址进行统计并使用饼图进行可视化:

请添加图片描述

将所有评论连接起来成一段文章,使用jieba中文分词库进行关键词提取,然后拼接起来调用WordCloud对象的wc.generate方法生成词云:

请添加图片描述

将所有商品名称连接起来成一段文章,使用jieba中文分词库进行关键词提取,然后拼接起来调用WordCloud对象的wc.generate方法生成词云:

请添加图片描述

五、全部代码

jd.py
import re

import sys
import json
import scrapy
from crawlJingDong import items
import requests as rq
from lxml import etree
header = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'}


class JdSpider(scrapy.Spider):
    name = 'jd'
    allowed_domains = [
<think>好的,我现在需要帮助用户解决如何使用Python对京东商品数据进行分析和可视化的问题。首先,我得回顾一下用户的问题和提供的引用内容。用户提到了几个引用,都是关于基于Python的系统,使用Django、Vjango、Scrapy、Vue等技术,以及数据采集、清洗、存储、分析和可视化的流程。用户的主要需求是进行数据分析和可视化,所以需要把重点放在这两个部分。 首先,我应该分解步骤。根据引用内容,系统通常包括数据采集、清洗、存储、分析和可视化这几个步骤。用户可能已经了解这些步骤,但需要具体的实现方法。我需要先确认用户是否已经完成了数据采集,或者是否需要指导如何爬取数据。但根据用户的问题,重点在分析和可视化,所以可能假设数据已经采集好了。不过,为了全面起见,可能还是需要简要提到数据采集的方法,比如使用Scrapy或requests库,如引用2和4提到的。 接下来,数据清洗部分,引用2、3、4都提到了数据清洗。可能需要使用pandas处理缺失值、重复数据,格式转换等。然后存储到MySQL数据库,如引用2提到的。之后是数据分析,使用pandas进行统计计算,比如销售总量、销售额、排名等,如引用3所述。最后是可视化,使用Echarts、Matplotlib或Seaborn,结合Flask或Django框架搭建前端展示,如引用4提到的Vue和Echarts。 用户可能需要具体的代码示例,比如如何用pandas分析数据,如何用Matplotlib绘图,或者如何整合到Django或Flask中。但根据示例中的代码结构,可能需要提供Python代码块,比如数据清洗和分析的部分。同时,用户可能需要知道如何将可视化结果展示在网页上,这涉及到前后端的交互,如引用3和4提到的视图函数和Flask框架。 另外,引用中提到的系统功能包括数据概览、类别分析、价格分析、店铺分析等,这些可以作为分析的维度。需要建议用户如何分组数据,计算统计量,并生成相应的图表。 可能还需要考虑使用Jupyter Notebook进行初步的数据探索,然后再将分析过程集成到Web应用中。同时,机器学习部分可能不是用户当前的重点,但引用3提到机器学习,可以作为扩展建议。 现在需要组织这些思路,分步骤回答,确保每个部分都有对应的代码示例和解释。同时,按照用户的要求,生成相关问题,放在最后。要注意使用中文,数学公式用$...$,独立公式用$$...$$,但当前问题可能涉及较少数学公式,但如果有的话需要正确应用。例如,在统计部分可能需要计算平均值、回归分析等,这时候需要正确使用LaTeX格式。 最后,检查引用标记是否正确,每个引用对应的内容是否恰当。例如,引用1提到系统结合了Python、Django、Vue和Scrapy,引用2提到数据处理和可视化的库,引用3提到视图函数和pandas分析,引用4提到Flask和Echarts。在回答过程中,适当引用这些内容,以支持建议的步骤和方法。 总结步骤: 1. 数据采集:使用Scrapy或requests爬取京东数据。 2. 数据清洗:pandas处理缺失值、去重、格式转换。 3. 数据存储:保存到MySQL或其他数据库。 4. 数据分析:pandas进行统计计算,分组聚合。 5. 数据可视化:Matplotlib/Seaborn生成图表,或集成到Web使用Echarts。 6. 系统搭建:使用Django或Flask构建前后端,展示可视化结果。 在代码示例部分,可能需要展示数据清洗和分析的具体操作,比如读取数据、处理缺失值、计算销售额等。可视化部分可以给出绘制折线图或柱状图的代码。同时,提及如何将可视化嵌入到Web应用中,比如通过Flask传递数据到前端模板,使用Echarts渲染。 确保回答结构清晰,分步骤说明,并引用相关的引用标记。最后生成相关问题,比如关于爬虫优化、可视化库选择、处理大数据量的方法等。</think>### 如何用Python对京东商品数据进行分析和可视化 以下是基于Python的京东商品数据分析与可视化实现步骤,结合数据采集、清洗、存储、分析和展示全流程: --- #### **1. 数据采集与清洗** **步骤1.1 数据爬取** 使用`requests`或`Scrapy`框架爬取京东商品数据,获取商品名称、价格、销量、评价、店铺、产地等信息[^4]。 ```python import requests from bs4 import BeautifulSoup url = "https://search.jd.com/xxxx" headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 解析商品数据并存储到列表或字典中 ``` **步骤1.2 数据清洗** 通过`pandas`处理缺失值、重复项和格式转换: ```python import pandas as pd df = pd.DataFrame(raw_data) # 删除重复项 df.drop_duplicates(inplace=True) # 填充缺失值 df['price'].fillna(df['price'].mean(), inplace=True) # 转换数据类型 df['sales'] = df['sales'].astype(int) ``` --- #### **2. 数据存储** 将清洗后的数据存入MySQL数据库(需提前配置连接): ```python from sqlalchemy import create_engine engine = create_engine('mysql://user:password@localhost/jd_data') df.to_sql('products', engine, if_exists='replace', index=False) ``` --- #### **3. 数据分析** 使用`pandas`进行统计分析,例如计算商品价格分布、销量排名等[^3]: ```python # 计算平均价格和总销量 mean_price = df['price'].mean() total_sales = df['sales'].sum() # 按店铺分组统计 shop_stats = df.groupby('shop_name').agg({ 'price': 'mean', 'sales': 'sum' }).reset_index() # 商品价格区间分析 price_bins = [0, 50, 100, 200, 500, 1000] df['price_group'] = pd.cut(df['price'], bins=price_bins) price_distribution = df['price_group'].value_counts() ``` --- #### **4. 数据可视化** **方法1:静态图表(适合报告生成)** 使用`matplotlib`或`seaborn`生成图表: ```python import matplotlib.pyplot as plt # 绘制价格分布直方图 plt.figure(figsize=(10, 6)) plt.hist(df['price'], bins=20, edgecolor='black') plt.title('商品价格分布') plt.xlabel('价格(元)') plt.ylabel('商品数量') plt.show() ``` **方法2:动态可视化(适合Web展示)** 结合`Flask`+`Echarts`实现交互式图表[^4]: ```python from flask import Flask, render_template import json app = Flask(__name__) @app.route('/') def index(): # 从数据库获取数据并处理 price_data = df['price'].tolist() return render_template('dashboard.html', prices=json.dumps(price_data)) if __name__ == '__main__': app.run() ``` 前端模板(`dashboard.html`)中使用Echarts: ```html <div id="price-chart" style="width: 600px;height:400px;"></div> <script> var chart = echarts.init(document.getElementById('price-chart')); var option = { title: { text: '价格分布直方图' }, xAxis: { type: 'category' }, yAxis: { type: 'value' }, series: [{ type: 'bar', data: {{ prices|safe }} }] }; chart.setOption(option); </script> ``` --- #### **5. 系统集成** 使用`Django`或`Flask`框架搭建完整系统: - **后端**:Django处理数据接口[^1] - **前端**:Vue.js + Echarts展示可视化结果[^2] - **功能模块**:数据概览、类别分析、价格趋势、店铺对比等[^4] --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想new的出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值