从Epic Games Store获取游戏价格时遭遇403错误求助
解决Epic Games Store页面请求403错误并提取游戏价格的方案
403错误是因为Epic的服务器识别出你的请求来自爬虫程序,直接拒绝了访问。下面是具体的解决步骤:
1. 添加模拟浏览器的请求头
最直接的解决方法是给请求加上User-Agent头,模拟真实浏览器的请求。服务器会通过这个字段判断请求来源,添加后大概率能绕过基础反爬拦截。
修改后的代码如下:
import requests from bs4 import BeautifulSoup url = "https://store.epicgames.com/ru/p/cities-skylines" # 模拟Chrome浏览器的请求头,可根据自己的浏览器版本调整 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # 注意:Epic页面的CSS类名经常变动,需要确认当前页面的正确类名 price_element = soup.find(class_='css-119zqif') if price_element is not None: price = price_element.get_text(strip=True) print("《城市:天际线》价格:", price) else: print("未找到价格元素,可能CSS类名已更新") else: print("请求错误,状态码:", response.status_code)
2. 注意CSS类名的变动
Epic Games Store的页面样式会不定期更新,你代码里用的css-119zqif这个类名可能随时失效。如果运行后提示“未找到价格元素”,可以打开浏览器的开发者工具(F12),定位价格元素,复制最新的类名或其他选择器替换。
3. 动态渲染页面的处理(如果上述方法无效)
如果添加请求头后还是无法获取到价格,说明页面采用了动态渲染(比如通过JavaScript加载内容),这时候需要用浏览器自动化工具模拟真实浏览行为。下面是用Selenium实现的示例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager url = "https://store.epicgames.com/ru/p/cities-skylines" # 自动安装Chrome驱动并初始化浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) # 可以添加显式等待,确保元素加载完成(示例中简化处理) try: price_element = driver.find_element(By.CLASS_NAME, 'css-119zqif') print("《城市:天际线》价格:", price_element.text.strip()) except: print("未找到价格元素,可能选择器已失效") driver.quit()
内容的提问来源于stack exchange,提问作者MichaelPetrov
相关产品推荐
相关产品推荐

