You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

希腊IP下用Python Requests爬取网站仍连美服获非希语内容的解决求助

问题描述

我身处希腊,持有希腊IP地址,尝试使用Python的requests库进行网页爬取,但发现请求连接的是美国服务器,且返回的内容并非希腊语。我已设置请求头(headers)和User-Agent以模拟希腊地区用户,但未产生效果。以下是我使用的Python脚本:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import time
import firebase_admin
from firebase_admin import credentials, db
import asyncio

# Initialize Firebase with your credentials JSON file and database URL
cred = credentials.Certificate("C:\Users\alexl\OneDrive\Desktop\Cook Group\Scripts\SNS\creds.json")
firebase_admin.initialize_app(cred, {
    'databaseURL': 'https://sns-database-default-rtdb.europe-west1.firebasedatabase.app/'
})

# Function to load data from Firebase
# (snipped for brevity)

# Function to save data to Firebase
# (snipped for brevity)

# Your bot should be running inside an async function
async def main():
    while True:
        print("Refreshing data...")  # Debug message

        # Specify the URL you want to scrape
        url = "https://www.sneakersnstuff.com/en/176/nike-dunk"

        headers = {
            'accept-language': 'en-GR-0-0',
            "sns.state": "en-GR-0-0",
            "Cookie": "sns.state=en-GR-0-0",       
            'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
        }
        # Load the previously scraped data from Firebase
        # (snipped for brevity)

        # Send an HTTP GET request to the URL
        response = requests.get(url, headers=headers)

        # Check if the request was successful (status code 200)
        # (snipped for brevity)

        print("Waiting for the next refresh...")  # Debug message

        # Wait for 60 seconds before the next refresh
        await asyncio.sleep(60)

# Ensure that the main function is run
if __name__ == "__main__":
    asyncio.run(main())

网站Cookie截图:
网站Cookie截图

解决方法
  • 修正accept-language格式:标准的语言头格式应为el-GR,el;q=0.9,en;q=0.8,你当前使用的en-GR-0-0不符合规范,替换后可让服务器优先返回希腊语内容。
  • 补充完整Cookie信息:从截图看,网站Cookie包含sns.state以外的多个字段(如currency、追踪类Cookie),建议用浏览器开发者工具复制完整的请求Cookie,替换代码中硬编码的Cookie值,确保与浏览器访问时的会话一致。
  • 改用Session维持会话:静态Cookie容易过期,用requests.Session()先获取初始会话Cookie,再更新headers和地区相关Cookie,模拟浏览器的完整访问流程:
    async def main():
        while True:
            print("Refreshing data...")
            url = "https://www.sneakersnstuff.com/en/176/nike-dunk"
            session = requests.Session()
            # 先获取初始会话Cookie
            session.get("https://www.sneakersnstuff.com/")
            # 更新请求头和地区Cookie
            session.headers.update({
                'accept-language': 'el-GR,el;q=0.9,en;q=0.8',
                'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
            })
            session.cookies.set('sns.state', 'en-GR-0-0')
            # 发送请求
            response = session.get(url)
            # 后续处理逻辑...
            await asyncio.sleep(60)
    
  • 验证IP有效性:通过requests.get("https://httpbin.org/ip")确认当前请求使用的IP确实是希腊地区的,排除代理或VPN失效的问题。
  • 检查服务器响应标识:打印response.headers查看是否有地区相关字段(如X-Server-Region),或解析返回HTML中的地区标签,确认服务器是否识别到你的地区设置。

内容的提问来源于stack exchange,提问作者Alex Leontaridis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:52:16