为何我的网页爬虫脚本在特定网站失效?求原因与解决方案
问题分析与解决办法
明确结论:是反爬机制导致的问题
bovada.lv存在严格的反爬策略:
- 直接用
requests.get请求API时,服务器会拦截未通过验证的请求(比如缺少合法请求头、无会话标识),返回非JSON内容(如验证码页面、403响应),因此触发JSONDecodeError。 - 逐行运行webdriver能成功,但整脚本运行失败,是因为自动化工具的特征(如执行速度过快、浏览器指纹异常)被检测到。
可行解决办法
1. 优化requests请求,模拟合法浏览器行为
给请求添加完整的请求头,必要时复用浏览器的会话Cookie:
import requests import json headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', 'Accept': 'application/json, text/plain, */*', 'Referer': 'https://www.bovada.lv/sports/basketball', # 可从浏览器开发者工具中复制当前会话的Cookie、Origin等字段 } response = requests.get( 'https://www.bovada.lv/services/sports/event/v2/events/A/description/basketball', headers=headers ) # 先验证响应内容 print(response.status_code) print(response.text[:500]) # 查看返回是否为JSON格式 if response.status_code == 200: try: source = response.json() # 后续数据处理逻辑 except json.JSONDecodeError: print("请求被拦截,返回内容非JSON")
2. 优化Selenium配置,规避自动化检测
针对整脚本运行失败的问题,需要隐藏webdriver的自动化特征,模拟人类操作节奏:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time import random options = Options() # 隐藏自动化标识 options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 模拟正常窗口尺寸 options.add_argument('--window-size=1920,1080') # 自定义User-Agent options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36') browser = webdriver.Chrome(options=options) # 移除navigator.webdriver标识 browser.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") # 模拟正常用户路径:先访问主页,再跳转API页面 browser.get('https://www.bovada.lv/sports/basketball') time.sleep(random.uniform(2,4)) # 随机延迟,模拟浏览 browser.get('https://www.bovada.lv/services/sports/event/v2/events/A/description/basketball') time.sleep(random.uniform(1,2)) # 等待页面加载 page_source = browser.page_source # 解析页面中的JSON内容
3. 关键注意事项
- 控制请求频率,避免短时间内大量请求导致IP封禁。
- 定期更新请求头和webdriver配置,网站反爬规则会持续迭代。
- 严格遵守网站服务条款和
robots.txt规则,非法爬取可能引发法律风险。
内容的提问来源于stack exchange,提问作者timmy_pickens
相关产品推荐
相关产品推荐

