双色球网页历史数据爬取

借鉴博客
《十行代码用pandas的read_html爬取中彩网双色球历年全部数据》https://blog.csdn.net/wwivywwivy/article/details/81810067
数据来源:
http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html

存在问题:
该文中将同一个单元格中的开奖数据没有提取出来


解决方案:
将开奖数据单元格中的七个号码分别提取存入七个单元格中

import pandas as pd
import csv
import linecache

def get_one_page(page):
    url = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_%s.html' % (str(page))
    tb = pd.read_html(url, skiprows=[0, 1])[0]  # 跳过前两行 (去除前两行开奖日期	期号	中奖号码	销售额(元)	等信息,后面自己定义标题)
    return tb.drop([len(tb)-1])  # len(tb)是抓取的网页行数,去掉最后一行(去掉最后一行共116 页 /2318 条记录 首页 上一页 下一页 末页 当前第 1 页等信息)

with open(r'F:\PythonFiles\PycharmFile\ssq.csv', 'w', encoding='utf-8-sig', newline='') as csvFile:  #此行注意缩进,不是def定义中的代码#打开文件的方法
    csv.writer(csvFile).writerow(['开奖日期', '期号', '红1',  '红2', '红3', '红4', '红5', '红6', '蓝球','销售额(元)', '中奖注数一等奖', '中奖注数二等奖'])  #给csv文件中插入一行

    '''
for i in range(1,2):  # range(其实编号,总共)目前116页数据
    #第一种方法,整体写入数据,但不能把同单元格内各球数据分开
    get_one_page(i).to_csv(r'F:\PythonFiles\PycharmFile\ssq.csv', mode='a', encoding='utf_8_sig', header=0, index=0)
    print('第'+str(i)+'页抓取完成')
    '''
    #第二种方法,逐个写入数据
for i in range(1,2):  # range(其实编号,总共)目前116页数据
    reader=get_one_page(i)  #接收到第i页所有数据
    #print(reader[2][1])   #第二列第一行
    length=len(reader)  #获取该页数据的行数
    for j in range(0,length):
        col1=reader[0][j] #每一行第一列开奖日期给数据col1,后面存放到新的数据表中
        col2=reader[1][j]  #该行第二列开奖期号数据给col2
        col=list(filter(None,reader[2][j].split(" ")))  #将第三个存有号码的单元格进行拆分
        col3=col[0]  #第一个红球
        col4=col[1]  #第二个红球
        col5 = col[2]
        col6 = col[3]
        col7 = col[4]
        col8 = col[5]  #蓝球
        col9 = col[6]  # 蓝球
        col10 = reader[3][j]  #销售额
        col11 = reader[4][j]  #一等奖中奖注数
        col12 = reader[5][j]  #二等奖中奖注数
        with open(r'F:\PythonFiles\PycharmFile\ssq.csv', 'a', encoding='utf-8-sig', newline='') as csvFile:
            csv.writer(csvFile).writerow([col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11])  # 给csv文件中插入一行

猜你喜欢

转载自blog.csdn.net/coberup/article/details/82871660