雙色球網頁歷史資料爬取
阿新 • • 發佈:2018-12-12
存在問題: 該文中將同一個單元格中的開獎資料沒有提取出來
解決方案: 將開獎資料單元格中的七個號碼分別提取存入七個單元格中
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檔案中插入一行