当前位置: 首页 > news >正文

python基础入门:8.1项目1:爬虫与数据分析

Python爬虫与数据分析全流程实战:从数据采集到可视化呈现

# 综合案例:电商价格监控分析系统
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt# 配置参数
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'
}def scrape_products(url):"""爬取商品信息"""products = []try:response = requests.get(url, headers=HEADERS, timeout=10)soup = BeautifulSoup(response.content, 'html.parser')items = soup.select('div.product-item')for item in items:name = item.select_one('h2.product-title').text.strip()price = item.select_one('span.price').text.strip()rating = item.select_one('div.rating').attrs['data-score']reviews = item.select_one('a.reviews-count').text.split()[0]products.append({'name': name,'price': price,'rating': float(rating),'reviews': int(reviews.replace(',', ''))})except Exception as e:print(f"爬取失败: {str(e)}")return productsdef clean_data(df):"""数据清洗处理"""# 价格处理df['price'] = df['price'].str.replace('$', '').astype(float)# 过滤异常值df = df[(df['price'] > 0) & (df['price'] < 10000)]# 分类处理df['category'] = df['name'].str.extract(r'([A-Za-z]+) Pro')df['category'] = df['category'].fillna('Other')return dfdef visualize_data(df):"""数据可视化展示"""plt.figure(figsize=(15, 8))# 价格分布直方图plt.subplot(2, 2, 1)df['price'].plot(kind='hist', bins=20, color='skyblue')plt.title('价格分布')plt.xlabel('价格 ($)')# 评分与价格散点图plt.subplot(2, 2, 2)plt.scatter(df['rating'], df['price'], alpha=0.6)plt.title('评分 vs 价格')plt.xlabel('评分')plt.ylabel('价格 ($)')# 类别销量柱状图plt.subplot(2, 2, 3)df['category'].value_counts().plot(kind='bar', color='salmon')plt.title('商品类别分布')plt.xticks(rotation=45)# 价格趋势折线图plt.subplot(2, 2, 4)df.sort_values('rating').groupby('rating')['price'].mean().plot(marker='o', color='green')plt.title('不同评分的平均价格')plt.xlabel('评分')plt.ylabel('平均价格 ($)')plt.tight_layout()plt.savefig('product_analysis.png', dpi=300)plt.show()# 主程序
if __name__ == "__main__":# 示例电商网站(需替换实际目标网站)base_url = "https://example-store.com/products?page="all_products = []for page in range(1, 6):  # 爬取前5页url = f"{base_url}{page}"print(f"正在爬取: {url}")all_products.extend(scrape_products(url))df = pd.DataFrame(all_products)df = clean_data(df)print("\n数据概览:")print(df.describe())print("\n保存数据到products.csv")df.to_csv('products.csv', index=False)visualize_data(df)
一、高效爬虫开发技巧
  1. 网页解析优化策略
# 使用CSS选择器最佳实践
def optimized_parser(html):soup = BeautifulSoup(html, 'lxml')  # 使用更快的解析器# 选择器优化技巧products = soup.select('div[data-product-id]')  # 通过属性选择for product in products:# 链式查找减少查询次数name = product.find(class_='title').get_text(strip=True)# 使用data属性获取信息price = product.find('meta', {'itemprop': 'price'})['content']# 异常处理try:rating = product.select_one('.stars').attrs['title']except (AttributeError, KeyError):rating = None
  1. 反爬虫应对方案
# 高级请求配置
session = requests.Session()
session.proxies = {'http': 'http://10.10.1.10:3128','https': 'http://10.10.1.10:1080',
}# 随机延迟
from random import uniform
from time import sleepdef safe_request(url):sleep(uniform(1, 3))  # 随机延迟1-3秒return session.get(url)# 使用代理中间件示例
class ProxyMiddleware:def process_request(self, request, spider):request.meta['proxy'] = "http://user:pass@proxy_ip:port"
二、数据清洗实战技巧
  1. 常见数据问题处理
def advanced_cleaning(df):# 处理缺失值df['rating'] = df['rating'].fillna(df['rating'].median())# 处理重复值df = df.drop_duplicates(subset=['name'], keep='last')# 处理异常值q_low = df['price'].quantile(0.01)q_high = df['price'].quantile(0.99)df = df[(df['price'] > q_low) & (df['price'] < q_high)]# 日期处理df['release_date'] = pd.to_datetime(df['release_date'], errors='coerce', format='%Y-%m')# 文本清洗df['name'] = df['name'].str.replace(r'[^\w\s]', '', regex=True)return df
  1. 数据转换技巧
# 创建价格分段
bins = [0, 50, 100, 200, 500, 1000]
labels = ['<50', '50-100', '100-200', '200-500', '500+']
df['price_range'] = pd.cut(df['price'], bins=bins, labels=labels)# 计算价格指数
df['price_index'] = (df['price'] / df.groupby('category')['price'].transform('mean')).round(2)# 时间序列转换
monthly_sales = df.resample('M', on='date')['price'].sum()
三、可视化进阶技巧
  1. 交互式可视化(使用Plotly)
import plotly.express as px# 创建交互式散点图
fig = px.scatter(df, x='rating', y='price', color='category',hover_data=['name'], title='商品分布分析')
fig.show()# 创建桑基图(Sankey Diagram)
category_flow = df.groupby(['category', 'price_range']).size().reset_index(name='count')
fig = px.sankey(category_flow, nodes={'label': list(df['category'].unique()) + labels},link=dict(source=category_flow['category'],target=category_flow['price_range'],value=category_flow['count']))
fig.show()
  1. 自动化报告生成
from pandas_profiling import ProfileReport# 生成数据分析报告
profile = ProfileReport(df, title="商品数据分析报告")
profile.to_file("product_report.html")# 使用Jupyter Notebook集成
from IPython.display import HTML
HTML(profile.to_html())

性能优化指南

  1. 使用lxml解析器替代默认的html.parser
  2. 批量处理数据时使用pandas向量化操作
  3. 避免在循环中多次访问DataFrame
  4. 使用Dask处理超大规模数据
  5. 缓存已爬取的页面内容
  6. 使用异步请求(aiohttp)提升爬虫效率
  7. 对数值型数据使用category类型节省内存
  8. 使用内存映射文件处理超大数据集
开始
发送HTTP请求
成功?
解析HTML内容
错误处理
提取数据
存储原始数据
数据清洗
数据分析
可视化呈现
生成报告
结束

项目扩展方向

  1. 增加自动化邮件报警功能
  2. 集成数据库存储(MySQL/MongoDB)
  3. 开发Web仪表盘(Flask/Django)
  4. 添加机器学习价格预测模块
  5. 实现分布式爬虫架构
  6. 构建RESTful API数据接口
  7. 开发浏览器扩展程序
  8. 制作自动化日报系统

避坑指南

  1. 遵守robots.txt协议
  2. 设置合理的请求间隔(>2秒)
  3. 处理SSL证书验证问题
  4. 注意网站内容的版权限制
  5. 使用try-except处理网络异常
  6. 定期检查选择器有效性
  7. 监控数据质量异常
  8. 做好数据备份机制

相关文章:

python基础入门:8.1项目1:爬虫与数据分析

Python爬虫与数据分析全流程实战&#xff1a;从数据采集到可视化呈现 # 综合案例&#xff1a;电商价格监控分析系统 import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt# 配置参数 HEADERS {User-Agent: Mozilla/5.0 (Wind…...

git 克隆指定 tag 的项目

git 克隆指定 tag 的项目 一、克隆指定tag的项目二、验证克隆结果 一、克隆指定tag的项目 以 tinyxml2项目 为例说明&#xff1a; git clone --branch V10.0.0 https://github.com/leethomason/tinyxml2.git解释&#xff1a; git clone&#xff1a;这是克隆一个远程仓库的命…...

DeepSeek学习笔记之——初识DeepSeek

春节假期回来已经有一周时间了&#xff0c;这假期综合症的症状是一点没减~~~ 假期期间除了这个欢乐详和的节日气氛&#xff0c;就数DeepSeek最火热了&#xff01;&#xff01;&#xff01; 什么是DeepSeek? DeepSeek是一款由国内人工智能公司研发的大型语言模型&#xff0c;…...

Linux 调用可执行程序

Linux 调用可执行程序 1. system() 函数1.1 system() 函数的声明1.2 system() 函数的不同场景返回值1.3 system() 函数的代码示例 2. exec() 函数族2.1 exec() 函数族的声明2.2 exec() 函数族执行失败的情况2.3 exec() 函数族的代码示例 3. exec() 与 system() 的区别以及使用注…...

MVCC面试怎么答

说到mvcc这个比较抽象的概念&#xff0c;很多人都有点束手无策。因为它实际上偏理论&#xff0c;实际应用中很难用到。但在面试中出现频率又很高&#xff0c;一问大部分都G。所以怎么精简回答并且能抓住重点就很关键了。往上详细解说MVCC的太多了&#xff0c;我这里没那么多废话…...

用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4

目录 简介 工作原理 例子 使用场景 简介 SSE&#xff08;Server - Sent Events&#xff09;是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制&#xff0c;服务器可以在客户端建立连接后&#xff0c;持续不断地向客户端发送事件流。客…...

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 0基础…...

vue3:动态渲染后端返回的图片

问&#xff1a; div classleft-png 这里我用css设置了他的背景图片&#xff0c;但是现在我希望改为后端返回的图片&#xff0c;怎么写&#xff1f; 后端返回数据&#xff1a; const centerdata {img:;xxxx,title,xxxx,num:xxxx}&#xff1f; 回答&#xff1a; 好的&#xff…...

DeepSeek小白初识指南

1.什么是DeepSeek&#xff1f; DeepSeek是一个基于大语言模型&#xff08;LLM&#xff09;的智能助手&#xff0c;能够处理自然语言理解、生成、对话等任务。它广泛应用于聊天机器人、内容生成、数据分析等领域。 2.DeepSeek和OpenAI等大模型差异&#xff1f; 虽然DeepSeek和Op…...

图像锐化(QT)

如果不使用OpenCV&#xff0c;我们可以直接使用Qt的QImage类对图像进行像素级操作来实现锐化。锐化算法的核心是通过卷积核&#xff08;如拉普拉斯核&#xff09;对图像进行处理&#xff0c;增强图像的边缘和细节。 以下是一个完整的Qt应用程序示例&#xff0c;展示如何使用Qt…...

38.社区信息管理系统(基于springboothtml)

目录 1.系统的受众说明 2.需求分析及相关技术 2.1设计目的 2.2社区信息管理系统的特点 2.3可行性分析 2.3.1技术可行性 2.3.2运行可行性 2.4系统设计 2.4.1系统功能分析 2.4.2管理员权限功能设计 2.4.3业主权限功能设计 2.5系统的技术介绍 2.5.1 Html 2.5.2 Aja…...

游戏引擎学习第98天

仓库:https://gitee.com/mrxiao_com/2d_game_2 开始进行一点回顾 今天的目标是继续实现正常贴图的操作&#xff0c;尽管目前我们还没有足够的光照信息来使其完全有用。昨日完成了正常贴图相关的基础工作&#xff0c;接下来将集中精力实现正常贴图的基本操作&#xff0c;并准备…...

音频知识基础

音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受&#xff1b; 主要和声波的振幅相关&#xff0c;同时也和频率有一定关系&#xff1b; 音调 音调是人耳对声音高低的主观感受&#xff1b; 主要与频率相关&#…...

【AI赋能】蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手

蓝耘智算平台实战指南&#xff1a;3步构建企业级DeepSeek智能助手 引言&#xff1a;AI大模型时代的算力革命 在2025年全球AI技术峰会上&#xff0c;DeepSeek-R1凭借其开源架构与实时推理能力&#xff0c;成为首个通过图灵测试的中文大模型。该模型在语言理解、跨模态交互等维…...

LabVIEW无人机飞行状态监测系统

近年来&#xff0c;无人机在农业植保、电力巡检、应急救灾等多个领域得到了广泛应用。然而&#xff0c;传统的目视操控方式仍然存在以下三大问题&#xff1a; 飞行姿态的感知主要依赖操作者的经验&#xff1b; 飞行中突发的姿态异常难以及时发现&#xff1b; 飞行数据缺乏系统…...

DeepSeek模型架构及优化内容

DeepSeek v1版本 模型结构 DeepSeek LLM基本上遵循LLaMA的设计&#xff1a; 采⽤Pre-Norm结构&#xff0c;并使⽤RMSNorm函数. 利⽤SwiGLU作为Feed-Forward Network&#xff08;FFN&#xff09;的激活函数&#xff0c;中间层维度为8/3. 去除绝对位置编码&#xff0c;采⽤了…...

html语义化

常见语义化标签有&#xff1a; &#xff08;1&#xff09;页面结构标签&#xff1a;<header>、<nav>、<main>、<article>、<section>、<aside>、<footer> &#xff08;2&#xff09;文本语义标签&#xff1a;<h1>-<h6>…...

python学习第十四天之机器学习名词介绍

名词介绍 1. 常用术语解释2.常见机器学习任务3. 机器学习常见算法1. 监督学习&#xff08;Supervised Learning&#xff09;2. 非监督学习&#xff08;Unsupervised Learning&#xff09;3.深度学习4.**对比总结** 1. 常用术语解释 拟合&#xff08;Fit&#xff09;&#xff1…...

天津三石峰科技——汽车生产厂的设备振动检测项目案例

汽车产线有很多传动设备需要长期在线运行&#xff0c;会出现老化、疲劳、磨损等 问题&#xff0c;为了避免意外停机造成损失&#xff0c;需要加装一些健康监测设备&#xff0c;监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡&#xff08;下图 1&#xff09;对…...

汽车与AI深度融合:CES Asia 2025前瞻

在科技飞速发展的当下&#xff0c;汽车与AI的融合正成为行业变革的关键驱动力。近日&#xff0c;吉利、极氪、岚图、智己等多家车企纷纷官宣与DeepSeek模型深度融合&#xff0c;其中岚图知音更是将成为首个搭载该模型的量产车型&#xff0c;这无疑是汽车智能化进程中的重要里程…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...