1. 程式人生 > >雙色球網頁歷史資料爬取

雙色球網頁歷史資料爬取

存在問題: 該文中將同一個單元格中的開獎資料沒有提取出來

解決方案: 將開獎資料單元格中的七個號碼分別提取存入七個單元格中

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檔案中插入一行