【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

Python爬虫爬取电商商品及大数据分析

  • 目标概述
  • 1. 安装依赖
  • 2. 爬取京东和淘宝商品信息
    • 2.1 京东爬虫
    • 2.2 淘宝爬虫
  • 3. 数据清洗与对齐
  • 4. 数据分析
  • 5. 注意事项
  • 6. 免责声明

目标概述

  1. 选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。
  2. 编写爬虫:通过爬虫获取商品信息并保存数据。
  3. 数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。
  4. 数据分析:进行销量分析、好评与差评分析等。

1. 安装依赖

首先,确保你安装了所需的库:

pip install requests beautifulsoup4 pandas matplotlib seaborn

2. 爬取京东和淘宝商品信息

我们分别编写爬虫来抓取京东和淘宝的商品信息。为了演示,我们抓取商品名称、价格、销量和评价。

2.1 京东爬虫

京东商品页面一般由静态HTML和JavaScript生成,我们可以通过requestsBeautifulSoup来抓取一些基本的商品信息。

import requests
from bs4 import BeautifulSoup
import pandas as pd# 设置User-Agent防止请求被拒绝
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}# 京东商品页面URL(这里只是一个示例,实际应用时需要替换为目标商品页面URL)
url = "https://search.jd.com/Search?keyword=python&enc=utf-8"response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')# 解析商品名称和价格信息
products = []
prices = []
sales = []
reviews = []# 查找所有商品容器
product_containers = soup.find_all('div', class_='gl-i-wrap')for container in product_containers:# 获取商品名称product_name = container.find('div', class_='p-name').get_text(strip=True) if container.find('div', class_='p-name') else '无名称'# 获取商品价格price = container.find('div', class_='p-price').find('strong').get_text(strip=True) if container.find('div', class_='p-price') else '无价格'# 获取销量(假设销量信息位于class为"p-commit"的标签中)sale = container.find('div', class_='p-commit').get_text(strip=True) if container.find('div', class_='p-commit') else '无销量'# 获取评价信息review = container.find('div', class_='p-icons').get_text(strip=True) if container.find('div', class_='p-icons') else '无评价'products.append(product_name)prices.append(price)sales.append(sale)reviews.append(review)# 将数据存储到Pandas DataFrame
jd_data = pd.DataFrame({'商品名称': products,'价格': prices,'销量': sales,'评价': reviews
})jd_data.to_csv('jd_products.csv', index=False, encoding='utf-8')
print(jd_data.head())

2.2 淘宝爬虫

淘宝的商品页面使用了更多的JavaScript,因此我们可以使用Selenium来模拟浏览器加载页面并抓取数据。

pip install selenium
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import pandas as pd# 设置Selenium WebDriver(使用Chrome)
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无界面模式
driver = webdriver.Chrome(options=options)# 淘宝商品搜索页面URL
url = 'https://s.taobao.com/search?q=python'driver.get(url)
time.sleep(3)  # 等待页面加载# 获取页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')# 解析商品信息
products = []
prices = []
sales = []
reviews = []# 查找所有商品容器
product_containers = soup.find_all('div', class_='item J_MouserOnverReq')for container in product_containers:# 获取商品名称product_name = container.find('a', class_='J_ItemPic').get('title') if container.find('a', class_='J_ItemPic') else '无名称'# 获取商品价格price = container.find('strong').get_text(strip=True) if container.find('strong') else '无价格'# 获取销量(假设销量信息在一个包含“已售”字样的标签中)sale = container.find('div', class_='deal-cnt').get_text(strip=True) if container.find('div', class_='deal-cnt') else '无销量'# 获取评价信息review = container.find('div', class_='feedback').get_text(strip=True) if container.find('div', class_='feedback') else '无评价'products.append(product_name)prices.append(price)sales.append(sale)reviews.append(review)# 将数据存储到Pandas DataFrame
tb_data = pd.DataFrame({'商品名称': products,'价格': prices,'销量': sales,'评价': reviews
})tb_data.to_csv('tb_products.csv', index=False, encoding='utf-8')
driver.quit()
print(tb_data.head())

3. 数据清洗与对齐

由于京东和淘宝的商品数据结构不同,抓取的数据可能需要清洗和对齐。在这一步,我们可以统一格式,确保两个电商平台的数据可以对比。

# 数据清洗
# 删除空值
jd_data = jd_data.dropna()
tb_data = tb_data.dropna()# 将销量和价格转换为数字类型,去除不必要的字符
jd_data['价格'] = jd_data['价格'].str.replace('¥', '').astype(float)
tb_data['价格'] = tb_data['价格'].str.replace('¥', '').astype(float)# 将销量中的中文字符移除
jd_data['销量'] = jd_data['销量'].str.replace('人付款', '').astype(int)
tb_data['销量'] = tb_data['销量'].str.replace('已售', '').astype(int)# 去除评价中的非数字字符
jd_data['评价'] = jd_data['评价'].str.extract('(\d+)').astype(int)
tb_data['评价'] = tb_data['评价'].str.extract('(\d+)').astype(int)# 对齐两个数据集:合并并统一列名
jd_data['电商平台'] = '京东'
tb_data['电商平台'] = '淘宝'all_data = pd.concat([jd_data, tb_data], ignore_index=True)

4. 数据分析

现在我们已经将两个电商平台的数据对齐,可以进行一些基础的数据分析:

import seaborn as sns
import matplotlib.pyplot as plt# 基本统计分析
print(all_data.describe())# 1. 销量分析:哪个平台的销量更高?
plt.figure(figsize=(10, 6))
sns.boxplot(x='电商平台', y='销量', data=all_data)
plt.title('销量分析:京东与淘宝')
plt.show()# 2. 价格分析:京东与淘宝的价格分布对比
plt.figure(figsize=(10, 6))
sns.boxplot(x='电商平台', y='价格', data=all_data)
plt.title('价格分析:京东与淘宝')
plt.show()# 3. 好评分析:根据评价数量分析
plt.figure(figsize=(10, 6))
sns.histplot(all_data['评价'], bins=20, kde=True)
plt.title('评价数量分布')
plt.show()# 4. 销量与评价的关系分析:销量与评价是否相关
plt.figure(figsize=(10, 6))
sns.scatterplot(x='销量', y='评价', hue='电商平台', data=all_data)
plt.title('销量与评价数量的关系')
plt.show()

5. 注意事项

  • 电商网站的反爬虫机制非常严格。为了避免被封禁,建议在实际操作中:

  • 设置合理的请求间隔,避免发送过多请求。

  • 使用代理IP池。

  • 遵守目标网站的robots.txt规定。

  • 如果数据量较大,可以考虑分批抓取数据,并存储在数据库中进行更高级的分析。

6. 免责声明

  1. 内容准确性:本博客中的所有信息和内容仅供参考之用。尽管作者尽力确保所提供的信息准确无误,但不对其准确性、完整性或适用性作出任何明示或暗示的保证。作者不对因依赖或使用本博客内容而导致的任何直接或间接损失或损害负责。
  2. 版权声明:本博客中的所有内容,包括文字、图片和代码,均为作者原创或引用自公开的资源。若涉及到版权问题或引用的内容不符合版权规定,请及时联系作者以做出相应的处理。未经授权,禁止以任何形式复制、转载或商业使用本博客内容。
  3. 个人观点: 本博客中的观点和见解仅代表作者个人的观点,并不代表 CSDN或其他机构的观点。作者在博客中分享的技术知识和经验基于个人的学习和实践,读者在应用这些信息时需自行判断和承担风险。
  4. 法律责任:作者不对因使用本博客中的信息而产生的任何法律责任或纠纷承担责任。读者在依赖本博客内容时应自行进行充分的验证,并遵守相关的法律法规。
  5. 网站链接:本博客可能包含指向其他网站的链接,这些链接仅为方便读者而提供。作者不对这些网站的内容、准确性或可靠性负责。访问这些链接时,读者需自行承担风险。
  6. 技术变更: 由于技术和信息更新的速度,本博客中的技术信息和建议可能会有所变化。作者不对因技术变更或信息更新造成的任何问题或损失负责。
  7. 联系信息: 如果您对本博客内容有任何疑问或建议,欢迎通过作者提供的联系方式与作者沟通。作者会尽力解答您的问题并做出适当的修正。

推荐阅读:《Python 爬虫入门级教程之爬取小说》

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

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

相关文章

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-奇数序列排序

C L13 奇数序列排序 给定一个长度为N的正整数序列, 请将其中的所有奇数取出,并按增序(从小到大)输出。 输入: 共2行 第1行是一个正整数 N(不大于500); 第2行有 N 个正整数&#x…

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了,我基本上都是通过docker去管理一些容器如:mysql、redis、mongoDB等之类的镜像,还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…

英语中常见连词的介绍和比较

连词分为两大类:并列连词(Coordinating Conjunctions)和从属连词(Subordinating Conjunctions)。 1. 并列连词(Coordinating Conjunctions) 并列连词用于连接同等重要的词、短语或句子。常见的…

Three.js性能优化和实践建议

Three.js 是一个功能强大的 3D 引擎,当场景足够大的时候,就会出现卡顿的现象,首先要保证电脑的性能够用,然后看看下面方法,帮助你提高应用的运行效率。 1. 使用 stats.js 监视性能 在进行任何优化之前,首…

vue3字符串转整数

vue3字符串转整数 思路方法代码实现示例 思路方法 在 Vue 3(或任何 JavaScript 环境)中,将字符串转换为整数可以使用 JavaScript 的内置函数 parseInt()。这个函数可以将一个字符串解析为指定基数的整数。如果不指定基数,默认情况…

ima.copilot-腾讯智能工作台

一、产品描述 ima.copilot是腾讯推出的基于腾讯混元大模型技术的智能工作台,通过先进的人工智能技术,为用户提供了一个全新的搜读写体验,让知识管理变得更加智能和高效。它不仅是一个工具,更是一个智能的伙伴,能够帮助…

Jdbc学习笔记(二)核心API--ResultSet

ResultSet之滚动结果集 ResultSet默认只能往下移 ResultSet表示结果集,它是一个二维的表格!ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标: void beforeFirst():…

CSS Modules在框架中的使用

CSS Modules 是一种与框架无关的技术,然而不同的前端框架(如 React、Vue、Angular)对它的使用方式会有所不同。下面分别讲解如何在这几个框架中使用 CSS Modules。 1. React 中使用 CSS Modules React 是 CSS Modules 最常用的框架之一&…

RPA 机器人流程自动化

RPA(机器人流程自动化)机器人的部署通常包括以下几个主要步骤: 1. 准备工作 环境准备:确定机器人的运行环境,通常需要服务器或虚拟机,安装 RPA 软件(如 UiPath、Automation Anywhere、Blue …

深入解析TOML、XML、YAML和JSON:优劣对比与场景应用

摘要:本文将介绍四种常见的配置文件和数据交换格式:TOML、XML、YAML和JSON,通过具体的使用例子分析它们的优缺点,并探讨在不同场景下的应用选择。 正文: 一、TOML 优点: 易于阅读和编写:TOML的…

【服务器】本地安装X11 服务器-Windows

【服务器】本地安装X11 服务器-Windows X11 服务器概述X Window System 简介 本地安装X11 服务器另:采用 MobaXterm (自带 X server) 连接远程服务器简单说明流程: 参考 X11 服务器概述 X11 服务器 是 X Window System(简称 X11 或 X&#x…

Spring Boot 启动时自动配置 RabbitMQ 交换机、队列和绑定关系

在使用 Spring Boot 开发消息队列应用时,我们经常需要在应用启动时自动创建 RabbitMQ 的交换机、队列和绑定关系。本文将介绍如何通过 Spring Boot 的启动后执行方法来实现这一功能,并提供相应的演示代码和依赖配置。 一、添加依赖 为了在 Spring Boot…

【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)

3. 微积分 (Calculus) 导数和梯度:用于优化算法(如梯度下降)中计算损失函数的最小值。偏导数:在多变量函数中优化目标函数。链式法则:在反向传播算法中用于计算神经网络的梯度。 导数和梯度:用于优化算法…

Java 网络通信之 Socket 编程全解析

在当今数字化时代,网络通信已经成为各种应用程序不可或缺的一部分。Java 作为一种广泛应用的编程语言,提供了强大的网络编程能力,其中 Socket 编程是实现网络通信的重要手段。本文将详细介绍如何使用 Java 进行网络通信,重点聚焦于…

黎巴嫩和以色列的比较

现在两国战争进行的如火如荼,西瓜视频相关军事评论层出不穷。 ------------------------------------------ 黎巴嫩概况:1943年11月独立,国土面积10452平方公里,人口约607万,绝大多数为阿拉伯人,官方语言…

“Java面试必看:从基础到进阶的全方位准备指南“(2)

9. **String和StringBuffer, StringBuilder的区别有哪些?所有类名包含Buffer的类的内部实现原理是什么?有什么优势?** - **String**:String是不可变类,每次对字符串进行修改(如拼接、替换等)都会…

《EasyQuotation 与MongoDB在股市信息的奇妙融合》

《EasyQuotation 与MongoDB在股市信息的奇妙融合》 一、EasyQuotation 的强大功能二、数据存入 MongoDB(一)配置与连接(二)存储方法 三、K 线图监视股市信息(一)自定义性能趋势图表(二&#xff…

Kafka新节点加入集群操作指南

一、环境准备 1. Java环境安装 # 安装JDK apt-get update apt-get install openjdk-8-jdk -y2. 下载并解压 wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.tgz tar xf kafka_2.13-2.8.1.tgz mv kafka_2.13-2.8.1 kafka二、配置环境变量 1. 创建kafka…

git配置用户信息

在 Git 中配置用户信息,主要是设置你的用户名和电子邮件地址,这些信息会被 Git 用来记录提交的作者信息。以下是配置用户信息的步骤: 打开命令行工具。 设置你的用户名: git config --global user.name "你的名字"例如…

vue3项目初始化完整流程,vue3+TypeScript+vue-router+pinia+element-plus+axios+unocss+mock

2.1项目初始化 今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范,需要使用eslintstylelintprettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,…