【Web-Crawler-Steamdt】以项目文件steamdt_crawler.py学习python爬虫

【Web-Crawler-Steamdt】以项目文件steamdt_crawler.py学习python爬虫

https://github.com/stefanokratzdisteln-hash/Web-Crawler-Steamdt

在这里插入图片描述

以下是 steamdt_crawler.py 中的主要知识点整理,适合有 Python 基础的学习者学习爬虫:


一、爬虫基础与工具选择

1. 动态 vs 静态网页爬取

  • Playwright:用于处理 JavaScript 动态渲染的网页(现代 SPA 应用)
  • Requests + BeautifulSoup:用于静态 HTML 页面(传统网页)
  • 代码中通过 PLAYWRIGHT_AVAILABLE 判断并自动降级

2. 环境与编码处理

# Windows 控制台编码修复if sys.platform =='win32': sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  • 解决 Windows 下中文乱码问题
  • 使用 io.TextIOWrapper 重定向标准输出编码

二、Playwright 爬虫框架

1. 基本使用流程

with sync_playwright().start()as playwright: browser = playwright.chromium.launch(headless=True) page = browser.new_page() page.goto(url)
  • 无头浏览器headless=True
  • 模拟用户代理:设置 user_agent
  • 页面等待策略wait_for_load_state('networkidle')

2. 元素定位与交互

  • page.inner_text('body'):获取页面文本
  • page.query_selector_all('tr, div'):CSS 选择器查找元素
  • page.evaluate():执行 JavaScript 代码

三、数据提取与解析

1. 正则表达式(re 模块)

  • 提取数字模式:r'([\d,]+\.\d+)'
  • 提取百分比:r'([+-]?\d+\.?\d*%)'
  • 提取带单位的值:r'([\d,]+\.\d+[万亿])'

2. 数据清洗与验证

def_extract_numeric_candidates(self, text:str)-> List[str]:# 过滤干扰项(如百分比)if'%'in before or'%'in after:continue
  • 避免提取到环比数据等干扰项
  • 通过位置判断数据类型

3. 多级板块数据解析

  • 板块结构:热门板块 → 一级板块 → 二级板块 → 三级板块
  • 数据格式:排名 + 名称 + 涨跌幅
  • 去重机制:使用 set() 避免重复数据

四、错误处理与调试

1. 异常捕获

try:# 可能出错的操作except PlaywrightTimeoutError:print("[WARNING] 页面加载超时")except Exception as e:print(f"[ERROR] 其他错误: {e}") traceback.print_exc()
  • 区分不同类型的异常
  • 使用 traceback.print_exc() 打印完整堆栈

2. 调试信息输出

debug_filename =f"debug_page_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"withopen(debug_filename,'w', encoding='utf-8')as f: f.write(page_text)
  • 将页面内容保存到文件,便于分析网页结构
  • 使用时间戳命名,避免覆盖

五、数据存储与管理

1. JSON 格式存储

withopen(filename,'w', encoding='utf-8')as f: json.dump(data, f, ensure_ascii=False, indent=2)
  • ensure_ascii=False:保留中文字符
  • indent=2:格式化输出,便于阅读

2. 文件管理

old_files = glob.glob("steamdt_data_*.json") old_files.sort(key=os.path.getmtime, reverse=True)
  • 使用 glob 查找匹配的文件
  • 按修改时间排序,保留最新文件
  • 自动清理旧数据文件

六、代码结构与设计模式

1. 面向对象编程

  • 类封装SteamDTCrawler 类封装所有爬虫功能
  • 上下文管理器__enter____exit__ 管理资源
  • 类型注解:提高代码可读性和 IDE 提示

2. 模块化设计

  • 分离关注点
    • extract_market_stats():提取大盘数据
    • extract_sections():提取板块数据
    • save_to_json():保存数据
  • 辅助方法_extract_numeric_candidates() 等私有方法

七、高级技巧与最佳实践

1. 多策略数据提取

# 方法1:正则表达式匹配# 方法2:DOM 元素查找# 方法3:JavaScript 执行# 方法4:文本行分析
  • 多种方法互补,提高爬虫健壮性
  • 逐步降级策略

2. 等待与加载策略

  • wait_for_load_state('networkidle'):等待网络空闲
  • time.sleep(3):显式等待 JS 执行
  • window.scrollTo():滚动页面触发懒加载

3. 防反爬虫策略

args=['--disable-blink-features=AutomationControlled']
  • 禁用自动化控制特征
  • 模拟真实浏览器行为

学习建议

  1. 先掌握基础:Requests + BeautifulSoup 处理静态页面
  2. 再学动态爬虫:Playwright/Selenium 处理 JS 渲染页面
  3. 重视正则表达式:数据清洗的关键工具
  4. 学会调试:保存页面内容,分析网页结构
  5. 注意反爬虫:合理设置请求间隔,尊重 robots.txt

代码亮点总结

知识点应用场景学习价值
Playwright动态网页爬取现代爬虫必备技能
正则表达式数据提取与清洗文本处理核心能力
错误处理爬虫稳定性生产级代码要求
数据存储结果持久化数据处理完整流程
模块化设计代码可维护性工程化思维培养

这份代码是一个完整的生产级爬虫示例,涵盖了从爬取、解析、清洗到存储的全流程,非常适合作为学习爬虫的进阶案例。

Read more

AI调参技巧:贝叶斯优化Optuna

AI调参技巧:贝叶斯优化Optuna

AI调参技巧:贝叶斯优化Optuna 📝 本章学习目标:本章聚焦性能优化,帮助读者提升模型效率。通过本章学习,你将全面掌握"AI调参技巧:贝叶斯优化Optuna"这一核心主题。 一、引言:为什么这个话题如此重要 在人工智能快速发展的今天,AI调参技巧:贝叶斯优化Optuna已经成为每个AI从业者必须掌握的核心技能。Python作为AI开发的主流语言,其丰富的生态系统和简洁的语法使其成为机器学习和深度学习的首选工具。 1.1 背景与意义 💡 核心认知:Python在AI领域的统治地位并非偶然。其简洁的语法、丰富的库生态、活跃的社区支持,使其成为AI开发的不二之选。掌握Python AI技术栈,是进入AI行业的必经之路。 从NumPy的高效数组运算,到TensorFlow和PyTorch的深度学习框架,Python已经构建了完整的AI开发生态。据统计,超过90%的AI项目使用Python作为主要开发语言,AI岗位的招聘要求中Python几乎是标配。 1.2 本章结构概览 为了帮助读者系统性地掌握本章内容,我将从以下几个维度展开: 📊 概念解析 → 原理推导 → 代

造相-Z-Image本地AI绘画:RTX 4090打造个人写实图像工作室

造相-Z-Image本地AI绘画:RTX 4090打造个人写实图像工作室 1. 这不是又一个SDXL套壳——Z-Image为什么值得你腾出显存? 你是不是也试过:花半小时下载模型、改十次配置、调八遍参数,最后生成一张灰蒙蒙的图,还带着诡异的肢体扭曲?或者更糟——刚点“生成”,显存就爆了,控制台刷出一长串红色报错,连错误在哪都找不到。 造相-Z-Image不是这样。 它不包装旧模型,不堆砌插件,不做“兼容所有卡”的妥协。它从第一天起,就只为你桌面上那块沉甸甸的RTX 4090而生。 这不是一句宣传语。当你把项目克隆下来、执行python app.py,它不会去网上拉模型权重,不会弹出一堆依赖报错,也不会要求你手动编译CUDA扩展。它直接从你指定的本地路径加载通义千问官方发布的Z-Image模型文件,30秒内完成BF16精度加载,UI界面自动弹出——你看到的第一个提示,是「 模型加载成功 (Local Path)」。 没有云服务、没有API密钥、没有后台上传。你的提示词不会离开显卡,你的草图不会传到服务器,你调试时删掉的17张失败稿,永远只存在你自己的SSD里。

Stable Diffusion 3.5 FP8模型推理耗时统计图表展示

Stable Diffusion 3.5 FP8 模型推理性能全解析:如何用一半显存跑出两倍速度?⚡️ 你有没有遇到过这种情况:满怀期待地输入一段精美的提示词,点击“生成”——然后眼睁睁看着 GPU 显存飙到 14GB,风扇狂转,等了整整 6 秒钟才出图……🤯 而隔壁同事用某个神秘模型,2秒搞定、画质还一样好? 别怀疑人生,他们可能只是悄悄升级到了 Stable Diffusion 3.5 FP8。这可不是简单的版本号更新,而是一次从“能用”到“快用”的工业级跃迁。 最近 Stability AI 推出的 SD3.5 FP8 模型,正以惊人的效率重新定义文生图的边界。它到底凭什么让 H100 上的推理时间直接砍半?FP8 又是不是听起来像某种新型充电协议?🔌 咱们今天就来扒一扒这个“

安卓端 AI 绘画新突破:local-dream 项目让 Stable Diffusion 在手机端高效运行,骁龙 NPU 加速加持

安卓端AI绘画新突破:local-dream项目让Stable Diffusion在手机端高效运行,骁龙NPU加速加持 在AI绘画技术飞速发展的当下,Stable Diffusion作为主流模型,凭借出色的图像生成能力备受青睐。然而,其对硬件性能的较高要求,使得多数用户只能在电脑端体验。不过,随着“local-dream”项目的出现,这一局面被彻底打破。该项目专注于让安卓设备流畅运行Stable Diffusion模型,不仅支持高通骁龙NPU加速,还兼容CPU/GPU推理,为移动设备AI绘画开辟了全新路径。 项目核心目标与基础信息 “local-dream”项目的核心目标清晰明确,就是打破硬件限制,让安卓用户无需依赖高性能电脑,在手机或平板上就能轻松体验Stable Diffusion模型的强大图像生成功能。无论是日常创作、创意设计,还是简单的图像生成需求,用户都能随时随地通过安卓设备完成。 对于想要了解和使用该项目的用户,关键信息必不可少。项目的GitHub地址为https://github.com/xororz/local-dream,用户可以在这里获取项目的源代码、详细