当前位置:首页 > 热点

实战Scrapy,手把手教你爬取Steam热门游戏数据

susu2026-07-26 20:49:32热点114
本文是一篇Scrapy框架的实战教程,详细讲解如何手把手爬取Steam热门游戏数据,内容涵盖环境搭建、项目创建、Items定义、Spider编写及数据存储等核心环节,通过具体代码示例,帮助初学者掌握Scrapy工作流程,高效提取游戏名称、价格及评价等关键信息,是学习Python网络爬虫的优质实践指南。

在当今的游戏世界中,Steam 无疑是最大的数字发行平台之一,对于游戏开发者、数据分析师或者仅仅是狂热的游戏玩家来说,Steam 上庞大的游戏数据库是一个巨大的信息金矿,无论是想分析游戏价格趋势,还是想研究玩家评价机制,获取这些数据的第一步就是“爬虫”。

本文将介绍如何使用 Python 强大的爬虫框架 Scrapy,高效、合规地抓取 Steam 商店页面的游戏数据。

实战Scrapy,手把手教你爬取Steam热门游戏数据

为什么选择 Scrapy?

虽然 requests + BeautifulSoup 是入门爬虫的经典组合,但在面对像 Steam 这样数据量大、结构复杂的网站时,Scrapy 的优势显而易见:

  1. 异步处理:Scrapy 基于 Twisted 异步网络框架,抓取速度极快。
  2. 内置功能:自动处理重试、Cookies、Session 和并发控制。
  3. 数据管道:方便地将清洗后的数据保存为 JSON、CSV 或存入数据库。

准备工作

在开始之前,请确保你已经安装了 Python 环境,并通过 pip 安装 Scrapy:

pip install scrapy

分析 Steam 页面结构

我们要抓取的目标是 Steam 的搜索结果页面(动作类游戏列表)。

  1. 打开浏览器开发者工具(F12)。
  2. 观察 Steam 的搜索结果列表,你会发现每个游戏通常包裹在一个特定的 div 标签中(div.search_result_row)。
  3. 我们需要提取的关键信息包括:
    • 游戏名称:通常在标题标签中。
    • 发布日期:在 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 中进行配置:

  1. 添加 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'
  2. 设置下载延迟:这是最重要的,不要给服务器造成压力。

    DOWNLOAD_DELAY = 2  # 每次请求间隔 2 秒
  3. 禁用 Cookies(可选):有些情况下禁用 Cookies 可以减少被追踪的概率,但在 Steam 上可能需要保持 Session 以维持某些状态,视情况而定。

    COOKIES_ENABLED = False
  4. 遵守 Robots.txt

    ROBOTSTXT_OBEY = True

运行与保存数据

代码编写完成后,我们可以运行爬虫并将数据保存为 JSON 文件:

scrapy crawl steam_store -o games.json

通过 Scrapy,我们可以轻松地构建一个能够自动追踪 Steam 游戏信息的系统,但在享受数据带来的便利时,请务必遵守 Robots 协议 和相关的法律法规,合理的抓取频率和对服务器的尊重是每一个开发者应有的素养。

获取数据只是第一步,你可以利用 Pandas 对这些数据进行清洗,甚至制作一个属于自己的游戏推荐或价格监控网站,快去试试吧!

标签: ScrapySteam
分享给朋友:

“实战Scrapy,手把手教你爬取Steam热门游戏数据” 的相关文章

国足VS泰国,沈阳生死战,绝地反击还是彻底崩盘?

国足VS泰国,沈阳生死战,绝地反击还是彻底崩盘?

国足将在沈阳主场迎战泰国队,迎来这场备受瞩目的生死战,尽管名义上为友谊赛,但比赛性质已超越普通热身,成为检验球队实力的关键战役,面对严峻挑战,国足究竟是能知耻后勇、完成绝地反击,还是将陷入低谷、遭遇彻底崩盘,结局引人关注。…

足球大小球规则详细表,新手必看投注指南与盘口解析

足球大小球规则详细表,新手必看投注指南与盘口解析

本文提供足球大小球规则详细表,专为新手打造的投注指南,内容深入解析了各类盘口含义及结算方式,结合图片直观展示,通过阅读,新手可快速掌握大小球核心玩法与投注技巧,理解盘口逻辑,是初学者入门足球竞彩的必备参考手册。…

巅峰对决荣耀三秦,2021全运会篮球赛广东队全景回顾

巅峰对决荣耀三秦,2021全运会篮球赛广东队全景回顾

本文全景回顾了2021年在陕西举办的第十四届全运会篮球赛,作为一场万众瞩目的巅峰对决,赛事汇聚了全国顶尖球队,展现了三秦大地的荣耀时刻,文章重点聚焦广东队的精彩表现,记录了球员们在赛场上的激烈角逐与顽强拼搏,生动诠释了全运体育精神,为读者呈现了一场篮球盛宴的辉煌篇章。…

球迷必看,如何找到巴萨比赛免费直播地址?红蓝军团观赛全攻略

球迷必看,如何找到巴萨比赛免费直播地址?红蓝军团观赛全攻略

本文专为巴萨球迷打造,重点解答了如何寻找红蓝军团比赛免费直播地址的难题,作为一份详尽的观赛全攻略,文章指导球迷快速定位并获取各类巴萨赛事的免费直播资源,通过本攻略,球迷能够轻松解决看球渠道问题,不错过红蓝军团的每一场精彩对决,享受极致的观赛体验。…

朱婷首发建功!女排3-0横扫意大利终结连败昂首晋级

朱婷首发建功!女排3-0横扫意大利终结连败昂首晋级

在女排对阵意大利的半决赛关键战役中,中国女排状态神勇,核心球员朱婷首发出场并发挥关键作用,带领球队以3-0的比分横扫劲敌意大利队,这场酣畅淋漓的胜利不仅终结了中国女排此前的连败颓势,更帮助球队昂首晋级下一轮,全队士气大振,展现了强大的竞技实力与必胜信念。…

红色风暴与德甲巨人的宿命对决,利物浦VS拜仁录像

红色风暴与德甲巨人的宿命对决,利物浦VS拜仁录像

回顾了英超豪门利物浦与德甲霸主拜仁慕尼黑之间的经典对决,这场被誉为“红色风暴”与“德甲巨人”的较量,承载着安菲尔德与安联两大球场的宿命恩怨,视频记录了双方在赛场上的激烈交锋,展现了欧洲足坛顶级俱乐部之间的巅峰对抗,是一场不容错过的足球盛宴。…