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)
一、高效爬虫开发技巧
- 网页解析优化策略
# 使用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
- 反爬虫应对方案
# 高级请求配置
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"
二、数据清洗实战技巧
- 常见数据问题处理
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
- 数据转换技巧
# 创建价格分段
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()
三、可视化进阶技巧
- 交互式可视化(使用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()
- 自动化报告生成
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())
性能优化指南:
- 使用
lxml
解析器替代默认的html.parser - 批量处理数据时使用pandas向量化操作
- 避免在循环中多次访问DataFrame
- 使用Dask处理超大规模数据
- 缓存已爬取的页面内容
- 使用异步请求(aiohttp)提升爬虫效率
- 对数值型数据使用category类型节省内存
- 使用内存映射文件处理超大数据集
项目扩展方向:
- 增加自动化邮件报警功能
- 集成数据库存储(MySQL/MongoDB)
- 开发Web仪表盘(Flask/Django)
- 添加机器学习价格预测模块
- 实现分布式爬虫架构
- 构建RESTful API数据接口
- 开发浏览器扩展程序
- 制作自动化日报系统
避坑指南:
- 遵守robots.txt协议
- 设置合理的请求间隔(>2秒)
- 处理SSL证书验证问题
- 注意网站内容的版权限制
- 使用try-except处理网络异常
- 定期检查选择器有效性
- 监控数据质量异常
- 做好数据备份机制
相关文章:
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 (Wind…...
git 克隆指定 tag 的项目
git 克隆指定 tag 的项目 一、克隆指定tag的项目二、验证克隆结果 一、克隆指定tag的项目 以 tinyxml2项目 为例说明: git clone --branch V10.0.0 https://github.com/leethomason/tinyxml2.git解释: git clone:这是克隆一个远程仓库的命…...

DeepSeek学习笔记之——初识DeepSeek
春节假期回来已经有一周时间了,这假期综合症的症状是一点没减~~~ 假期期间除了这个欢乐详和的节日气氛,就数DeepSeek最火热了!!! 什么是DeepSeek? DeepSeek是一款由国内人工智能公司研发的大型语言模型,…...
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这个比较抽象的概念,很多人都有点束手无策。因为它实际上偏理论,实际应用中很难用到。但在面试中出现频率又很高,一问大部分都G。所以怎么精简回答并且能抓住重点就很关键了。往上详细解说MVCC的太多了,我这里没那么多废话…...

用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4
目录 简介 工作原理 例子 使用场景 简介 SSE(Server - Sent Events)是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制,服务器可以在客户端建立连接后,持续不断地向客户端发送事件流。客…...

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 0基础…...
vue3:动态渲染后端返回的图片
问: div classleft-png 这里我用css设置了他的背景图片,但是现在我希望改为后端返回的图片,怎么写? 后端返回数据: const centerdata {img:;xxxx,title,xxxx,num:xxxx}? 回答: 好的ÿ…...
DeepSeek小白初识指南
1.什么是DeepSeek? DeepSeek是一个基于大语言模型(LLM)的智能助手,能够处理自然语言理解、生成、对话等任务。它广泛应用于聊天机器人、内容生成、数据分析等领域。 2.DeepSeek和OpenAI等大模型差异? 虽然DeepSeek和Op…...
图像锐化(QT)
如果不使用OpenCV,我们可以直接使用Qt的QImage类对图像进行像素级操作来实现锐化。锐化算法的核心是通过卷积核(如拉普拉斯核)对图像进行处理,增强图像的边缘和细节。 以下是一个完整的Qt应用程序示例,展示如何使用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 开始进行一点回顾 今天的目标是继续实现正常贴图的操作,尽管目前我们还没有足够的光照信息来使其完全有用。昨日完成了正常贴图相关的基础工作,接下来将集中精力实现正常贴图的基本操作,并准备…...
音频知识基础
音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受; 主要和声波的振幅相关,同时也和频率有一定关系; 音调 音调是人耳对声音高低的主观感受; 主要与频率相关&#…...

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

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

DeepSeek模型架构及优化内容
DeepSeek v1版本 模型结构 DeepSeek LLM基本上遵循LLaMA的设计: 采⽤Pre-Norm结构,并使⽤RMSNorm函数. 利⽤SwiGLU作为Feed-Forward Network(FFN)的激活函数,中间层维度为8/3. 去除绝对位置编码,采⽤了…...
html语义化
常见语义化标签有: (1)页面结构标签:<header>、<nav>、<main>、<article>、<section>、<aside>、<footer> (2)文本语义标签:<h1>-<h6>…...
python学习第十四天之机器学习名词介绍
名词介绍 1. 常用术语解释2.常见机器学习任务3. 机器学习常见算法1. 监督学习(Supervised Learning)2. 非监督学习(Unsupervised Learning)3.深度学习4.**对比总结** 1. 常用术语解释 拟合(Fit)࿱…...

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

汽车与AI深度融合:CES Asia 2025前瞻
在科技飞速发展的当下,汽车与AI的融合正成为行业变革的关键驱动力。近日,吉利、极氪、岚图、智己等多家车企纷纷官宣与DeepSeek模型深度融合,其中岚图知音更是将成为首个搭载该模型的量产车型,这无疑是汽车智能化进程中的重要里程…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...