如何解决BeautifulSoup抓取六合彩官网日期返回空的问题?需抓20期数据
六合彩开奖信息抓取问题解决
问题根源
你的代码返回空列表,核心原因是网站的基础反爬机制拦截了默认的requests请求——服务器识别出请求并非来自浏览器,因此返回的页面不包含目标开奖元素。
修正方案(抓取最近20期日期及号码)
添加浏览器请求头模拟正常访问,同时正确提取日期、普通号码和特别号码:
from bs4 import BeautifulSoup import requests # 模拟浏览器请求头,避免被反爬拦截 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" } url = "https://bet.hkjc.com/marksix/Results.aspx?lang=ch" response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 获取所有开奖记录行(页面默认加载最近多期,足够提取20期) result_rows = soup.find_all("div", class_="resultMainRow") # 提取前20期数据 for idx, row in enumerate(result_rows[:20], 1): # 提取开奖日期 draw_date = row.find("div", class_="resultDrawDate").get_text(strip=True) # 提取期号 draw_no = row.find("div", class_="resultDrawNo").get_text(strip=True) # 提取普通开奖号码 normal_nums = [ball.get_text(strip=True) for ball in row.find_all("div", class_="resultBall")] # 提取特别号码 special_num = row.find("div", class_="resultSpecialBall").get_text(strip=True) print(f"第{idx}期 {draw_no}") print(f"开奖日期: {draw_date}") print(f"普通号码: {' '.join(normal_nums)}") print(f"特别号码: {special_num}") print("-" * 30)
关键说明
- 若后续抓取失败,先检查页面元素类名是否被网站修改(这类站点会不定期调整结构)。
- 不要频繁发送请求,建议添加
time.sleep(1)之类的间隔,避免触发更严格的反爬限制。
内容的提问来源于stack exchange,提问作者harry harry
相关产品推荐
相关产品推荐

