如何修复Python+Beautiful Soup爬取Bet Explorer赔率时找不到表格的问题?
修复Bet Explorer赔率爬取代码
原代码找不到表格的核心原因是表格选择器class错误,且未模拟浏览器请求导致页面内容未正常加载。以下是修复后的代码,可生成包含赛事名称、主胜赔率、平局赔率、客胜赔率及赛事时间的Pandas DataFrame:
import pandas as pd import requests from bs4 import BeautifulSoup # 目标网站URL URL = "https://www.betexplorer.com/" # 模拟浏览器请求头,规避基础反爬拦截 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" } # 发送带请求头的GET请求 response = requests.get(URL, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # 修正表格选择器:首页赛事表格实际class为table-main table_matches = soup.find('table', attrs={'class': 'table-main'}) if table_matches: data = [] # 仅遍历数据行(跳过表头) rows = table_matches.find_all('tr', attrs={'class': 'table-main__row'}) for row in rows: cols = row.find_all('td') # 过滤掉列数不足的无效行 if len(cols) >= 6: # 提取赛事名称(优先取a标签文本,避免冗余内容) match_name = cols[1].find('a').get_text(strip=True) if cols[1].find('a') else cols[1].get_text(strip=True) # 提取对应位置的赔率数据 home_odds = cols[3].get_text(strip=True) draw_odds = cols[4].get_text(strip=True) away_odds = cols[5].get_text(strip=True) # 提取赛事时间 match_time = cols[0].get_text(strip=True) data.append({ "赛事名称": match_name, "主胜赔率": home_odds, "平局赔率": draw_odds, "客胜赔率": away_odds, "赛事时间": match_time }) # 生成结构化DataFrame df = pd.DataFrame(data) print(df) else: print("未找到赛事表格") else: print(f"请求失败,HTTP状态码: {response.status_code}")
关键修改说明:
- 添加请求头:模拟真实浏览器请求,绕过网站基础反爬机制,确保获取完整页面内容。
- 修正表格选择器:将原错误的class替换为网站实际使用的
table-main,准确定位赛事表格。 - 精准字段提取:针对页面DOM结构,从对应列中提取目标数据,优先取赛事名称的a标签文本以避免冗余信息。
- 过滤无效行:仅处理包含完整数据的行,保证最终DataFrame的有效性。
内容的提问来源于stack exchange,提问作者Anthony Kinyua
相关产品推荐
相关产品推荐

