福彩双色球开奖数据爬虫工具-Python彩票数据爬虫实实战(附上所有代码)

简介

        这个Python脚本用于从中国福利彩票官方网站爬取双色球开奖结果,并将数据保存到CSV文件中。该脚本使用requests库发送HTTP请求,使用pandas库处理和保存数据,仅供参考学习使用。

        爬虫,也称为网络爬虫或网页爬虫,是一种自动化的网络机器人,其主要原理是按照一定的规则自动浏览万维网并抓取信息的程序或脚本。以下是爬虫的基本工作原理:

  1. 初始URL:爬虫开始工作时,通常会有一组初始的URL列表,这些是爬虫开始抓取数据的起点。

  2. 请求网页:爬虫通过HTTP或HTTPS协议向特定的URL发送请求,就像普通用户使用浏览器访问网页一样。

  3. 解析内容:一旦网页响应,爬虫会下载网页内容,并从中提取有用的信息。这通常涉及到HTML和CSS的解析。

  4. 数据提取:爬虫会根据预设的规则解析HTML文档,提取出需要的数据,如文本、图片、链接等。

  5. 数据存储:提取出的数据会被存储起来,常见的存储方式包括数据库、文件系统或者内存中。

  6. 遵循链接:爬虫会分析当前页面的链接,并将这些链接添加到待爬取的队列中,以便接下来访问。

  7. 去重复:为了效率和避免重复工作,爬虫会检查新发现的URL是否已经被访问过,通常使用一个大型的集合数据结构来存储已访问的URL。

  8. 遵守规则:爬虫在抓取过程中会遵守robots.txt文件中的规则,这是网站管理员指定哪些部分可以被爬虫访问的标准。

  9. 错误处理:在爬取过程中,爬虫会遇到各种异常情况,如404错误、服务器错误等,良好的爬虫设计会包括错误处理机制。

  10. 用户代理:爬虫通常会设置一个用户代理(User-Agent),模仿浏览器的行为,有时候也会进行伪装,以避免被服务器识别为爬虫。

爬虫的设计和实现可以根据需求的不同而有很大的变化,但上述是大多数爬虫的基本工作流程。在设计爬虫时,应当考虑到效率、并发、网络延迟、数据处理和法律等多方面的因素。

环境要求

  • Python 3.x
  • requests库
  • pandas库

安装依赖

在运行脚本之前,需要安装必要的Python库。可以使用以下命令安装:

pip install requests pandas

文件结构

  • catch(i): 一个函数,用于爬取指定页码的开奖数据。
  • try...except: 主逻辑块,用于循环调用catch函数,并处理数据。

使用方法

  1. 确保所有依赖已安装。
  2. 在命令行或IDE中运行脚本。
  3. 脚本会自动爬取数据,并将反序后的数据保存到reversed_data.csv文件中。

参数说明

  • url: 目标网站的URL。
  • params: 用于请求的参数字典。
  • header: 自定义的HTTP头部信息。
  • pageNo: 当前爬取的页码。
  • pageSize: 每页显示的记录数。

注意事项

  • 请合理设置爬取间隔,避免对服务器造成过大压力。
  • 确保遵守目标网站的爬虫政策和法律法规。
  • 脚本中的time.sleep(1)被注释掉了,建议根据实际情况取消注释以设置合理的请求间隔。

代码附上:

# coding=gbk
import time
import requests
import pandas as pd

url = "https://www.cwl.gov.cn/cwl_admin/front/cwlkj/search/kjxx/findDrawNotice"
params = {
    'name': 'ssq',
    'issueCount': '',
    'issueStart': '',
    'issueEnd': '',
    'dayStart': '',
    'dayEnd': '',
    'pageNo': 1,
    'pageSize': 30,
    'week': '',
    'systemType': 'PC',
}

header = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    'Cookie': 'HMF_CI=c5e50c6669ec97153ed140ea30f3eb070d8faea96fbcdf670ed7e2d8931d52333b32cced986c96d2e15287f95c0b17c77e9928eadb1275b99291225d5bbd4ca230; 21_vq=5',
    'Host': 'www.cwl.gov.cn',
    'Referer': 'https://www.cwl.gov.cn/ygkj/wqkjgg/ssq/',
    'Sec-Ch-Ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': '"Windows"',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
    'X-Requested-With': 'XMLHttpRequest',
}


def catch(i):
    params['pageNo'] = i
    try:
        response = requests.get(url=url, params=params, headers=header)
        if response.status_code == 200:
            result = response.json()['result']
            if not result:  # 如果结果为空,说明没有更多数据
                return None
            data = [[int(a['code'])] + [int(k) for k in a['red'].split(',')] + [int(a['blue'])] for a in result]
            return pd.DataFrame(data, columns=['code', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'b1'])
        else:
            print('请求错误:', response.status_code)
    except Exception as e:
        print('发生异常:', e)

try:
    data_frames = []  # 创建一个空列表来存储数据帧
    page = 1
    while True:
        print("正在爬取第{}页数据....".format(page))
        new_data = catch(page)  # 假设 catch() 函数返回一个数据帧
        if new_data is not None:
            print("爬取成功,正在整合数据...")
            data_frames.append(new_data)  # 将新数据帧添加到列表中
        else:
            print("已经没有更多数据,爬取结束。")
            break  # 如果没有新数据,则退出循环
        page += 1
        # time.sleep(1)
    df = pd.concat(data_frames, ignore_index=True)  # 循环结束后一次性合并所有数据帧
    # 反序DataFrame
    df = df.iloc[::-1]
    # 保存反序后的DataFrame到新的CSV文件
    df.to_csv('reversed_data.csv', index=False, encoding='gbk')
except Exception as e:
    print('出错或到达页数最底层:', e)

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值