实战Scrapy,手把手教你爬取Steam热门游戏数据
本文是一篇Scrapy框架的实战教程,详细讲解如何手把手爬取Steam热门游戏数据,内容涵盖环境搭建、项目创建、Items定义、Spider编写及数据存储等核心环节,通过具体代码示例,帮助初学者掌握Scrapy工作流程,高效提取游戏名称、价格及评价等关键信息,是学习Python网络爬虫的优质实践指南。
在当今的游戏世界中,Steam 无疑是最大的数字发行平台之一,对于游戏开发者、数据分析师或者仅仅是狂热的游戏玩家来说,Steam 上庞大的游戏数据库是一个巨大的信息金矿,无论是想分析游戏价格趋势,还是想研究玩家评价机制,获取这些数据的第一步就是“爬虫”。
本文将介绍如何使用 Python 强大的爬虫框架 Scrapy,高效、合规地抓取 Steam 商店页面的游戏数据。

为什么选择 Scrapy?
虽然 requests + BeautifulSoup 是入门爬虫的经典组合,但在面对像 Steam 这样数据量大、结构复杂的网站时,Scrapy 的优势显而易见:
- 异步处理:Scrapy 基于 Twisted 异步网络框架,抓取速度极快。
- 内置功能:自动处理重试、Cookies、Session 和并发控制。
- 数据管道:方便地将清洗后的数据保存为 JSON、CSV 或存入数据库。
准备工作
在开始之前,请确保你已经安装了 Python 环境,并通过 pip 安装 Scrapy:
pip install scrapy
分析 Steam 页面结构
我们要抓取的目标是 Steam 的搜索结果页面(动作类游戏列表)。
- 打开浏览器开发者工具(F12)。
- 观察 Steam 的搜索结果列表,你会发现每个游戏通常包裹在一个特定的
div标签中(div.search_result_row)。 - 我们需要提取的关键信息包括:
- 游戏名称:通常在标题标签中。
- 发布日期:在
div.search_released中。 - 价格:在
div.search_price中。 - 评价简述:在
span.search_review_summary中。
注意:Steam 的页面结构可能会随时间更新,编写代码时请以实际 HTML 结构为准。
编写 Scrapy Spider
创建一个新的 Scrapy 项目:
scrapy startproject steam_spider cd steam_spider scrapy genspider steam_store store.steampowered.com
打开生成的 steam_store.py 文件,我们来编写核心逻辑,以下是一个简化的示例代码:
import scrapy
from steam_spider.items import SteamSpiderItem
class SteamStoreSpider(scrapy.Spider):
name = "steam_store"
# Steam 的搜索 URL,这里以 'action' 类游戏为例,支持翻页
start_urls = [
'https://store.steampowered.com/search/?term=&category1=998&start=0&count=50'
]
def parse(self, response):
# 遍历每一个游戏块
for game in response.css('div.search_result_row'):
item = SteamSpiderItem()
# 提取数据
item['title'] = game.css('span.title::text').get()
item['url'] = game.css('a::attr(href)').get()
item['release_date'] = game.css('div.search_released::text').get().strip()
# 价格处理(Steam 价格格式较复杂,需清洗)
price_str = game.css('div.search_price::text').getall()
item['price'] = "".join(price_str).strip()
# 提取评价
item['review_summary'] = game.css('span.search_review_summary::attr(data-tooltip-html)').get()
yield item
# 处理翻页逻辑
# 查找“下一页”的链接
next_page = response.css('a.pagebtn::attr(href)').getall()
# Steam 翻页逻辑较特殊,通常通过构造 URL 或查找特定的 'Next' 按钮
# 这里简化处理:如果存在下一页链接则继续
if next_page:
# 简单的逻辑判断,实际需更严谨
yield response.follow(next_page[-1], callback=self.parse)
设置与反爬策略
Steam 对爬虫比较敏感,如果直接运行,很容易遇到 429 Too Many Requests 或被直接重定向到错误页面,我们需要在 settings.py 中进行配置:
-
添加 User-Agent:伪装成浏览器。
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'
-
设置下载延迟:这是最重要的,不要给服务器造成压力。
DOWNLOAD_DELAY = 2 # 每次请求间隔 2 秒
-
禁用 Cookies(可选):有些情况下禁用 Cookies 可以减少被追踪的概率,但在 Steam 上可能需要保持 Session 以维持某些状态,视情况而定。
COOKIES_ENABLED = False
-
遵守 Robots.txt:
ROBOTSTXT_OBEY = True
运行与保存数据
代码编写完成后,我们可以运行爬虫并将数据保存为 JSON 文件:
scrapy crawl steam_store -o games.json
通过 Scrapy,我们可以轻松地构建一个能够自动追踪 Steam 游戏信息的系统,但在享受数据带来的便利时,请务必遵守 Robots 协议 和相关的法律法规,合理的抓取频率和对服务器的尊重是每一个开发者应有的素养。
获取数据只是第一步,你可以利用 Pandas 对这些数据进行清洗,甚至制作一个属于自己的游戏推荐或价格监控网站,快去试试吧!





