Python爬虫获取双色球历史开奖数据
看到昨天大乐透的开奖数据心都凉了半截,全奇数,脑洞大开,所以今天不说选号,直接来硬核技术,教大家爬虫技术 取历史开奖数据
大致分为以下三步 确定目标网络
即,要找到一个有记录开奖数据的网站,有很多,具体在网上搜索一下 观察网站结构
通过访问网站,打开浏览器控制台,或者把鼠标点到浏览器地址栏,然后按下键盘的F12,仔细观察一下,网站的html结构特点,一般来讲数据类展示网站都会有一些固定的结构特点 最后编写代码
关于Python爬虫,最常见的反爬虫技术有以下几类,当然还有很多其他的方法: User-Agent伪装:将请求头中的User-Agent设置为浏览器的User-Agent,从而让服务器认为请求来自浏览器而不是爬虫程序。 IP代理:使用代理IP访问网站,降低被网站识别的概率。 验证码识别:有些网站会在登陆、注册、搜索等操作时强制进行验证码校验,可以使用第三方的验证码识别库或者打码平台来识别验证码。 访问频率控制:爬虫程序的访问频率过高可能会引起服务器的反感,因此可以采用一些方法控制访问频率,比如设置访问间隔、使用分布式爬虫等。 随机延时:在爬虫程序中设置随机延时,模拟人类的访问行为,从而减少被识别的概率。 动态解析:一些网站使用了一些JS渲染或者Ajax动态加载,这种情况下需要使用Selenium等工具模拟用户操作,获取到完整的页面数据。 隐藏身份:避免使用同一个IP或者同一个User-Agent等信息访问网站,可以采用多种手段,如使用Tor、VPN等来隐藏身份。
需要注意的是,反爬虫技术是一种违反网站协议和法律法规的行为,应该在遵守相关法律法规的前提下进行使用。
针对以上几点可能情况,简单的写一些示例 User-Agent伪装: import requests headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = requests.get("http://www.example.com", headers=headers)IP代理: import requests proxies = {"http": "http://123.123.1.10:3128", "https": "http://123.123.1.10:1080"} response = requests.get("http://www.example.com", proxies=proxies)验证码识别: import requests from PIL import Image from io import BytesIO # 获取验证码图片 response = requests.get("http://www.example.com/captcha") img = Image.open(BytesIO(response.content)) # 识别验证码 code = recognize_captcha(img) data = {"username": "your_username", "password": "your_password", "captcha": code} # 提交表单 response = requests.post("http://www.example.com/login", data=data)访问频率控制: import time import requests while True: response = requests.get("http://www.example.com") time.sleep(10) # 每隔10秒访问一次随机延时: import random import requests while True: response = requests.get("http://www.example.com") time.sleep(random.randint(1, 10)) # 随机延时1到10秒动态解析: from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.example.com") content = driver.page_source隐藏身份: import requests session = requests.session() session.proxies = {"http": "socks5h://localhost:9050", "https": "socks5h://localhost:9050"} session.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} response = session.get("http://www.example.com")直入正题,上代码Python代码Class部分如下 class ScraperDoubleColorData: def __init__(self, limit=None, sort=0): self.url = os.environ.get("SSQ_HISTORY_URL") self.limit = limit self.sort = sort self.options = webdriver.ChromeOptions() self.options.add_argument("headless") # 在无头模式下运行Chrome self.options.add_argument("window-size=1200x600") # 设置窗口大小 self.driver = webdriver.Chrome(options=self.options) def scrape_data(self): request_url = f"{self.url}?limit={self.limit}&sort={self.sort}" self.driver.get(request_url) # 在无头浏览器中打开网页 time.sleep(2) # 等待页面加载完成(根据需要可以调整延迟时间) # 使用BeautifulSoup解析页面源代码 soup = BeautifulSoup(self.driver.page_source, "html.parser") data = soup.find("tbody", id="tdata") # 找到包含数据的表格 results = {} for row in data.find_all("tr", class_="t_tr1"): # 遍历所有数据行 temp_data = {} t_tr1_text = row.find("td").text cfont2_text = [td.text for td in row.find_all( "td", class_="t_cfont2")] cfont4_text = row.find("td", class_="t_cfont4").text value = f"红球 {",".join(cfont2_text)} 蓝球 {cfont4_text}" temp_data["红球"] = ",".join(cfont2_text) temp_data["蓝球"] = cfont4_text # 将提取的数据存储为字典 results[f"第{t_tr1_text}期"] = temp_data # 打印提取的数据 print(f"第{t_tr1_text}期 {value}") return results def close_browser(self): self.driver.quit() # 关闭无头浏览器输出结果如下 第23001期 红球 09,16,18,22,28,32 蓝球 02 第23002期 红球 02,06,10,16,18,22 蓝球 13 第23003期 红球 05,08,18,25,30,32 蓝球 06 第23004期 红球 01,07,15,16,20,25 蓝球 16 第23005期 红球 02,06,08,13,14,19 蓝球 16 第23006期 红球 02,10,12,14,24,26 蓝球 05 第23007期 红球 05,06,09,22,25,31 蓝球 03 第23008期 红球 05,13,18,20,26,28 蓝球 06 第23009期 红球 03,04,19,23,30,32 蓝球 06 第23010期 红球 04,05,13,18,27,29 蓝球 12 第23011期 红球 06,07,16,17,21,22 蓝球 04 第23012期 红球 03,04,07,22,26,30 蓝球 06 第23013期 红球 06,10,14,22,23,33 蓝球 13 第23014期 红球 06,07,18,23,27,30 蓝球 05 第23015期 红球 02,03,14,21,29,32 蓝球 08 第23016期 红球 14,16,19,23,28,30 蓝球 03 第23017期 红球 05,11,18,20,26,28 蓝球 12 第23018期 红球 10,12,17,19,25,31 蓝球 13 第23019期 红球 06,12,26,28,29,32 蓝球 15 第23020期 红球 01,12,17,18,26,27 蓝球 05 第23021期 红球 02,05,06,19,21,27 蓝球 04 第23022期 红球 10,11,18,19,23,31 蓝球 03 第23023期 红球 05,08,10,15,24,25 蓝球 09Tips
可以通过调整 limit 参数来爬取数据范围,例如 设置为100 ,就会提取 最近100期 的数据,
另外可以通过 sort 参数来控制排序
sort=0 代表升序,即 1,2,3,4,5,6,7,8,9
sort=1 代表倒序,即 9,8,7,6,5,4,3,2,1 历史数据分析Python代码Class部分如下 class HistoryData: def __init__(self, big_nums, even_nums, area_1, area_2, area_3, data): """ 构造函数,初始化实例变量 :param big_nums: 大数正则表达式 :param even_nums: 偶数正则表达式 :param area_1: 区间一正则表达式 :param area_2: 区间二正则表达式 :param area_3: 区间三正则表达式 :param data: 数据 """ self.big_nums = big_nums self.even_nums = even_nums self.area_1 = area_1 self.area_2 = area_2 self.area_3 = area_3 self.data = data def analysis_data(self): """ 对 data 进行分析,并返回一个列表,其中包含每个记录的详细信息。 :return: 历史数据详情列表 """ history_data_detail = [] for key, value in self.data.items(): redball = value.get("红球") # 获取大数的数量 big_small = len(re.findall(self.big_nums, redball)) # 获取偶数的数量 odd_even = len(re.findall(self.even_nums, redball)) # 获取区间一的数量 first = len(re.findall(self.area_1, redball)) # 获取区间二的数量 second = len(re.findall(self.area_2, redball)) # 获取区间三的数量 third = len(re.findall(self.area_3, redball)) # 计算红球和值 redball_sum = sum(map(int, redball.split(","))) # 将历史数据的详细信息添加到列表中 history_data_detail.append((big_small, odd_even, first, second, third, key, redball, redball_sum)) # 返回历史数据详情列表 return history_data_detail输出结果如下 第23001期 红球: 09,16,18,22,28,32 奇偶比: 1:5, 大小比: 4:2, 区间比: 1:3:2 和值: 125 第23002期 红球: 02,06,10,16,18,22 奇偶比: 0:6, 大小比: 2:4, 区间比: 3:3:0 和值: 74 第23003期 红球: 05,08,18,25,30,32 奇偶比: 2:4, 大小比: 4:2, 区间比: 2:1:3 和值: 118 第23004期 红球: 01,07,15,16,20,25 奇偶比: 4:2, 大小比: 2:4, 区间比: 2:3:1 和值: 84 第23005期 红球: 02,06,08,13,14,19 奇偶比: 2:4, 大小比: 1:5, 区间比: 3:3:0 和值: 62 第23006期 红球: 02,10,12,14,24,26 奇偶比: 0:6, 大小比: 2:4, 区间比: 2:2:2 和值: 88 第23007期 红球: 05,06,09,22,25,31 奇偶比: 4:2, 大小比: 3:3, 区间比: 3:1:2 和值: 98 第23008期 红球: 05,13,18,20,26,28 奇偶比: 2:4, 大小比: 4:2, 区间比: 1:3:2 和值: 110 第23009期 红球: 03,04,19,23,30,32 奇偶比: 3:3, 大小比: 4:2, 区间比: 2:1:3 和值: 111 第23010期 红球: 04,05,13,18,27,29 奇偶比: 4:2, 大小比: 3:3, 区间比: 2:2:2 和值: 96 第23011期 红球: 06,07,16,17,21,22 奇偶比: 3:3, 大小比: 3:3, 区间比: 2:4:0 和值: 89 第23012期 红球: 03,04,07,22,26,30 奇偶比: 2:4, 大小比: 3:3, 区间比: 3:1:2 和值: 92 第23013期 红球: 06,10,14,22,23,33 奇偶比: 2:4, 大小比: 3:3, 区间比: 2:2:2 和值: 108 第23014期 红球: 06,07,18,23,27,30 奇偶比: 3:3, 大小比: 4:2, 区间比: 2:1:3 和值: 111 第23015期 红球: 02,03,14,21,29,32 奇偶比: 3:3, 大小比: 3:3, 区间比: 2:2:2 和值: 101 第23016期 红球: 14,16,19,23,28,30 奇偶比: 2:4, 大小比: 4:2, 区间比: 0:3:3 和值: 130 第23017期 红球: 05,11,18,20,26,28 奇偶比: 2:4, 大小比: 4:2, 区间比: 2:2:2 和值: 108 第23018期 红球: 10,12,17,19,25,31 奇偶比: 4:2, 大小比: 4:2, 区间比: 1:3:2 和值: 114 第23019期 红球: 06,12,26,28,29,32 奇偶比: 1:5, 大小比: 4:2, 区间比: 1:1:4 和值: 133 第23020期 红球: 01,12,17,18,26,27 奇偶比: 3:3, 大小比: 4:2, 区间比: 1:3:2 和值: 101 第23021期 红球: 02,05,06,19,21,27 奇偶比: 4:2, 大小比: 3:3, 区间比: 3:2:1 和值: 80 第23022期 红球: 10,11,18,19,23,31 奇偶比: 4:2, 大小比: 4:2, 区间比: 2:2:2 和值: 112 第23023期 红球: 05,08,10,15,24,25 奇偶比: 3:3, 大小比: 2:4, 区间比: 3:1:2 和值: 87
爬虫有风险,使用需谨慎!仅供参与学习使用,不作其他用途!
救下全部5人!这对父女找到了车辆落水,5人被困危急时刻,一对父女路过与众人展开生死救援近日,这对父女找到了!他们是父亲吕振康和女儿吕智慧车辆落水,5人被困路过父女参与救援27日,安徽阜阳一辆轿车意外翻入水沟内
36毫米的劳力士,男女通吃,但更适合男士腕表之家钟表技术36毫米,是劳力士一个经典且神奇的尺寸。现在,名表的尺寸普遍偏大,男表尺寸通常在40毫米左右,或40毫米以上女表尺寸,像罗杰杜彼沛纳海的女表都已经达到了36毫米38
狂飙看到结局才发现安长林是败笔,养子养女都是狼崽子我是原创作者小董乘风破浪。这部剧拍得挺好的,在我看来是鼓励生育的一部剧,以饺子开头,又以饺子结束。阿强最后还在试图挽回在妹妹心中的形象,阿兰让他说,他反过来让阿兰问,阿兰能知道什么
胡鑫宇案已经定型,为何还遭质疑?难道真的是公信力下降了么?经公安机关发布的详细材料来看,其中包括现场认定,遗体的各个器官完整度,还有公布录音笔内容,以及再用他杀推理的动机,以及推理他杀(伪造自杀现场)形式可能性都给排除了,在实事求是的证据
中国漫画第一人丰子恺儿童漫画选3丰子恺是中国引进漫画概念的第一人,其漫画作品多以儿童为题材,富有童趣幽默睿智反映社会现象。在头条看见彼此漫画分享青梅丰子恺人都说我是中国漫画的创始者,这话半是半非。我小时候,太平洋
不孕,做这类检查会痛吗?当今社会,不孕症的几率逐年上升,不孕的女性做输卵管造影和输卵管通液的几率也上升。输卵管是精子和卵子自然结合的必经之路,此路不通就会引起不孕。临床上如经过1年试孕后还不能怀孕,就得考
3次怀孕3次生化,泰国DHC试管1次成功!在成为母亲的路上,每一位女性都面临巨大的牺牲。X女士更是如此。她结婚6年,3次怀孕却3次生化妊娠(包括一次自怀两次试管)。每当满怀欣喜地期待宝宝降生时,幸福总是戛然而止。随之而来的
青春期脸上不同部位长痘痘,是什么原因呢?青春期是身体发育的关键时期,也是很多人面对脸上长痘痘的时期。青春期脸上长痘痘的原因主要是由于荷尔蒙的变化。在青春期,雄性激素和雌性激素的水平会增加,这可能会导致皮脂分泌增多,从而导
奋斗者正青春丨李华柏争做党建与学术带头人李华柏老师(右一)带领学生参加技能比赛。红网时刻新闻记者潘锦通讯员刘澎钰综合报道李华柏是湖南铁道职业技术学院机车车辆学院铁道车辆系主任,也是维修电工高级考评员轨道列车司机高级考评员
重磅!最新保险机构官方评级来了!这16家公司惨遭评级下调!北青金融记者了解到,近日,中国保险行业协会(以下简称保险业协会)于官网披露2021年度保险公司法人机构经营评价结果。据公告显示,本次披露涉及保险公司共160家,其中财产险公司79家
虚情假意!NBA裁判协会致歉詹姆斯,官方报告湖人仍2次获利一场经典的黄绿大战,裁判完美抢戏,詹姆斯突破上篮被塔图姆打手犯规惨遭无视,三旬老汉跪地祈求,当值裁判漠然置之,让人破防。尽管在赛后,NBA裁判官方迅速向湖人表态詹姆斯确实被塔图姆犯