利用PYTHON导出双色球数据
http://www.zhcw.com/ssq/利用python导出中彩网双色球2018年1月1日至2018年10月28日的开奖数据,并保存至EXCEL中。 请求高手及时指导。 # coding=utf-8
'''
福利彩票,抓取2018年全年中奖号码
'''
import requests
from lxml import etree
def getLottery() :
# 实际地址,经过浏览器捕捉,发现是这个地址后面带上页码加上.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, 16) :
realURL = url + str(i) + '.html'
response = requests.get(realURL, headers = headers)
content = etree.HTML(response.text)
# 这里是以表格来排布,前两行是表头,无需抓取,
# 从第三行到倒数第二行为开奖信息,这里用循环处理
for j in range(3, 23) :
label_td = 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)
dateNum = content.xpath(dateNumPath)
ballNum = content.xpath(ballNumPath)
realBallNum = ' '.join(ballNum)
print(lotteryDate, ' ', dateNum, ' ', realBallNum)
getLottery()
还没写完,先把每一期的号码抓下来,待会儿把写入 excel 的操作弄出来了,再把全量代码贴上来。 本帖最后由 foxiangzun 于 2019-12-24 14:41 编辑
# 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, 16) :
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)
dateNum = content.xpath(dateNumPath)
ballNum = content.xpath(ballNumPath)
realBallNum = ' '.join(ballNum)
# 数据临时装载,为写入Excel做准备
tempList.append(lotteryDate)
tempList.append(dateNum)
tempList.append(realBallNum)
# 写入Excel
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()
怕楼主不知道逻辑,所以注释写的很啰嗦,如果网站没有封锁 IP 的风险,那么休眠那一行可以去掉,time 库和 random 库也可以不要
图片也在本楼的回复里,可以查看效果。 请问高手foxiangzun上面的日期在哪里体现?
如果只需要2018年1月1日至2018年10月28日的开奖数据如何更改。 请求高手foxiangzun及时回复,万分感谢! zhongyong6899 发表于 2019-12-24 16:22
请求高手foxiangzun及时回复,万分感谢!
两种方法,一种是在获取日期后,将日期转化成 Python 的日期格式,然后用 if 条件来判断就行了;另一种是直接将日期字段获取到后,以字符串进行分片然后判断,或者干脆将日期里的“-”去掉,然后比较大小就行了。 或者干脆将日期里的“-”去掉,然后比较大小就行了。具体改哪一行,如何改?请详细程序。万分感谢。 请求高手foxiangzun及时回复,万分感谢! 请求高手foxiangzun及时回复,万分感谢! 不知道楼主想知道这个的主要目的是什么,如果只是要数据,完全可以用上面的程序跑下来,在再EXCEL里处理,如果是想学习如何处理日期,for i in range(8, 16)这个已经是设定了18年的大概范围,随着时间的增加,这个数据会变,要精确到你想要的日期,就只有在数据采完后,再进一步加工,tempList 生成完后,用pandas弄吧,要简单些。我只晓得思路,具体代码一时弄不出来。 或者干脆将日期里的“-”去掉,然后比较大小就行了。具体改哪一行,如何改?请详细程序。万分感谢。请求高手foxiangzun及时回复,万分感谢! 请求高手foxiangzun及时回复,万分感谢! foxiangzun 发表于 2019-12-24 14:39
怕楼主不知道逻辑,所以注释写的很啰嗦,如果网站没有封锁 IP 的风险,那么休眠那一行可以去掉,time...
厉害了 请求高手foxiangzun及时回复,万分感谢! 请求高手foxiangzun及时回复,万分感谢! 请求高手foxiangzun及时回复,万分感谢! 我看楼主一直在问,我帮你简单把 foxiangzun 的代码完善下吧
原代码中for i in range(8, 16) : 修改为 for i in range(8, 17) : 不然2018年数据取不完。
# 写入Excel
self.sheet.append(tempList)
修改为:
# 写入Excel
data_temp=int(tempList.replace("-",""))#将日期中的“-”去掉,转换为数值型。
if 20180101<data_temp<20181028: #比较日期
self.sheet.append(tempList) #将范围内的数据写入表格
其它都不变,就可以达到你想要的效果了 # 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, 16) :
realURL = url + str(i) + '.html'
response = requests.get(realURL, headers = headers)
content = etree.HTML(response.text)
data_temp=int(tempList.replace("-",""))#将日期中的“-”去掉,转换为数值型。
if20180101<data_temp<20181028: #比较日期
self.sheet.append(tempList) #将范围内的数据写入表格
具体在哪里改?万分感谢!
页:
[1]
2