Firebase Cloud Functions问题:已指定欧洲区域,爬虫函数仍运行在美国服务器
问题分析与解决方案
看起来你的函数确实部署在了法兰克福(europe-west3)区域,但目标网站(bwin)并不是根据函数的部署区域来判断访问者地域,而是通过HTTP请求头、时区设置、IP地理归属这些更细节的标识来返回对应区域的内容。从爬取结果的赔率格式差异来看,网站把你的爬虫请求识别成了美国地区访问,所以返回了美式金钱线格式。
第一步:先确认函数的实际运行区域
先做个简单验证,确保函数真的在法兰克福运行。在你的scraper.js里添加一段代码,打印函数的出口IP并检查归属地:
const fetchData = async (url) => { const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], }); // 新增:检查出口IP const ipPage = await browser.newPage(); await ipPage.goto('https://icanhazip.com/'); const ipText = await ipPage.evaluate(() => document.body.textContent.trim()); console.log(`函数出口IP: ${ipText}`); await ipPage.close(); // 原有爬虫逻辑 const page = await browser.newPage(); await page.goto(url); // ... 剩余代码不变 }
部署后查看Cloud Functions日志,把打印的IP放到IP归属地查询工具里验证:
- 如果IP属于德国法兰克福,说明问题出在请求标识上;
- 如果IP是美国的,那可能是部署配置有遗漏(但你已确认控制台设置正确,这种概率很低)。
第二步:修改Puppeteer请求,模拟德国地区访问
针对bwin这类网站,主要通过以下几个维度识别地域,我们逐个模拟:
1. 设置德国地区的HTTP请求头
在page.goto时添加语言和地区相关的请求头:
await page.goto(url, { headers: { 'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8', // 优先德语 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } });
2. 设置页面时区与浏览器语言
Puppeteer默认时区可能是UTC或美国时区,我们强制设置为柏林时区,并修改浏览器的语言标识:
const browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--timezone=Europe/Berlin' // 直接设置浏览器时区 ], }); const page = await browser.newPage(); // 修改浏览器语言标识 await page.evaluateOnNewDocument(() => { Object.defineProperty(navigator, 'language', { get: () => 'de-DE' }); Object.defineProperty(navigator, 'languages', { get: () => ['de-DE', 'de', 'en'] }); });
3. 模拟欧洲用户的User-Agent(可选)
部分网站会通过User-Agent判断设备和地域,你可以使用一个贴近欧洲用户的Chrome UA:
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36');
第三步:验证修改结果
把以上修改整合后重新部署函数,再测试爬取结果。此时网站应该会识别到你的请求来自德国,返回你预期的倍数格式赔率。
补充说明:Cloud Functions的区域设置确实决定了函数的运行服务器位置,但出口IP属于GCP对应区域的IP池,只要IP是欧洲的,再配合正确的请求标识,就能触发网站返回对应区域的内容。
内容的提问来源于stack exchange,提问作者hnnngwdlch
相关产品推荐
相关产品推荐

