鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zhongyong6899

利用PYTHON导出双色球数据

[复制链接]
发表于 2020-1-15 15:04:54 | 显示全部楼层
# coding=utf-8

'''
福利彩票,抓取2018年全年中奖号码
'''

import requests
import time
import random
import openpyxl as opxl
from lxml import etree

class lottery() :
        def __init__(self, *avgr):
                self.saveLocation = saveLocation
                self.wb = opxl.Workbook()
                self.sheet = self.wb.active

        def getLottery(self) :
                # 设置sheet页名称
                self.sheet.title = '彩票中奖号码'
                # 为Excel当前页添加标题栏
                self.sheet.append(['开奖日期', '期号', '中奖号码'])
                # 实际地址,经过浏览器捕捉,发现是这个地址后面带上页码再加上.html
                url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'
                headers = {
                        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'
                }
                for i in range(8, 17) :
                        realURL = url + str(i) + '.html'
                        response = requests.get(realURL, headers = headers)
                        content = etree.HTML(response.text)
                        # 这里是以表格来排布,前两行是表头,无需抓取,
                        # 从第三行到倒数第二行为开奖信息,这里用循环处理
                        for j in range(3, 23) :
                                # 初始化各信息所在的具体位置,为获取信息复用
                                # 初始化临时列表,后续用作写入Excel
                                label_td, tempList = 1, []

                                # 获取开奖日期、期号和中奖号码的标签位置
                                lotteryDatePath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td) + "]/text()"
                                dateNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 1) + "]/text()"
                                ballNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 2) + "]/em/text()"

                                # 获取各标签位的内容
                                lotteryDate = content.xpath(lotteryDatePath)[0]
                                dateNum = content.xpath(dateNumPath)[0]
                                ballNum = content.xpath(ballNumPath)
                                realBallNum = ' '.join(ballNum)

                                # 数据临时装载,为写入Excel做准备
                                tempList.append(lotteryDate)
                                tempList.append(dateNum)
                                tempList.append(realBallNum)

                                # 写入Excel
                                data_temp=int(tempList[0].replace("-",""))  #将日期中的“-”去掉,转换为数值型。
                                if 20180101<data_temp<20181028:   #比较日期
                                    self.sheet.append(tempList)           #将范围内的数据写入表格
                                
                        # 为防止网站禁用 IP,没抓取一页,休眠3到5秒
                        time.sleep(random.randint(3, 5))

                # 保存Excel,并将其关闭
                self.wb.save(self.saveLocation)
                self.wb.close()
                del tempList
                print("Excel写入完毕!")


if __name__ == "__main__" :
        # 设置保存路径
        saveLocation = r'C:\Users\Administrator\Desktop\彩票.xlsx'
        lc = lottery(saveLocation)
        lc.getLottery()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-15 15:06:23 | 显示全部楼层
zhongyong6899 发表于 2020-1-15 11:45
data_temp=int(tempList[0].replace("-",""))  #将日期中的“-”去掉,转换为数值型。
if20180101

# coding=utf-8

'''
福利彩票,抓取2018年全年中奖号码
'''

import requests
import time
import random
import openpyxl as opxl
from lxml import etree

class lottery() :
        def __init__(self, *avgr):
                self.saveLocation = saveLocation
                self.wb = opxl.Workbook()
                self.sheet = self.wb.active

        def getLottery(self) :
                # 设置sheet页名称
                self.sheet.title = '彩票中奖号码'
                # 为Excel当前页添加标题栏
                self.sheet.append(['开奖日期', '期号', '中奖号码'])
                # 实际地址,经过浏览器捕捉,发现是这个地址后面带上页码再加上.html
                url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'
                headers = {
                        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'
                }
                for i in range(8, 17) :
                        realURL = url + str(i) + '.html'
                        response = requests.get(realURL, headers = headers)
                        content = etree.HTML(response.text)
                        # 这里是以表格来排布,前两行是表头,无需抓取,
                        # 从第三行到倒数第二行为开奖信息,这里用循环处理
                        for j in range(3, 23) :
                                # 初始化各信息所在的具体位置,为获取信息复用
                                # 初始化临时列表,后续用作写入Excel
                                label_td, tempList = 1, []

                                # 获取开奖日期、期号和中奖号码的标签位置
                                lotteryDatePath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td) + "]/text()"
                                dateNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 1) + "]/text()"
                                ballNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 2) + "]/em/text()"

                                # 获取各标签位的内容
                                lotteryDate = content.xpath(lotteryDatePath)[0]
                                dateNum = content.xpath(dateNumPath)[0]
                                ballNum = content.xpath(ballNumPath)
                                realBallNum = ' '.join(ballNum)

                                # 数据临时装载,为写入Excel做准备
                                tempList.append(lotteryDate)
                                tempList.append(dateNum)
                                tempList.append(realBallNum)

                                # 写入Excel
                                data_temp=int(tempList[0].replace("-",""))  #将日期中的“-”去掉,转换为数值型。
                                if 20180101<data_temp<20181028:   #比较日期
                                    self.sheet.append(tempList)           #将范围内的数据写入表格
                                
                        # 为防止网站禁用 IP,没抓取一页,休眠3到5秒
                        time.sleep(random.randint(3, 5))

                # 保存Excel,并将其关闭
                self.wb.save(self.saveLocation)
                self.wb.close()
                del tempList
                print("Excel写入完毕!")


if __name__ == "__main__" :
        # 设置保存路径
        saveLocation = r'C:\Users\Administrator\Desktop\彩票.xlsx'
        lc = lottery(saveLocation)
        lc.getLottery()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-20 16:21:02 From FishC Mobile | 显示全部楼层
18楼的gywjj您说的
data_temp=int(tempList[0].replace("-",""))  #将日期中的“-”去掉,转换为数值型。
if20180101<data_temp<20181028:   #比较日期
    self.sheet.append(tempList)           #将范围内的数据写入表格

具体在哪里改?万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-20 16:21:59 From FishC Mobile | 显示全部楼层
请求详细指导,万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-20 21:20:04 | 显示全部楼层
我不是把改好的代码发在上面了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表