# -*- coding: utf-8 -*-
import requests # 爬虫库
import xlwt # 写excel表库
import time # 时间获取转换
from bs4 import BeautifulSoup # 爬虫库
# 获取网页内容
def get_html(url):
# 这是一个UA伪装,告诉网站你浏览器和操作系统系统
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
response = requests.get(url, headers=headers) # 用爬虫对象获取网页内容
if response.status_code == 200: # 对象状态码等于200说明获取网页内容成功
# print('读取网页成功!')
pass
return response.text # 返回获取的网页内容
else:
print('读网页失败,无数据!')
return None
# 解析网页内容
def parse_html(html):
soup = BeautifulSoup(html, 'lxml') # 创建网页解析器对象
i = 0
# 查找网页里的tr标签,从第4个tr读到倒数第2个tr,因为通过对网页分析,前三个和最后一个tr没用
for item in soup.select('tr')[3:-1]: # 把查到的tr组成一个列表,item是列表指针,for每循环一次,item就选下一个tr,读完列表本循环结束,函数就结束,
try: # 不加try和except有的值是 ,是网页里的空白键,会出错,加上调试命令忽略错误,后边统一处理
yield { # yield作用是得到数据立即返回给调用函数,但不退出本循环本函数
'issue': item.select('td')[i].text, # item查到的第0个td是开奖期号,写到time列
'WinningNumbers': item.select('td')[i + 1].text, # 0+1个td是中奖号码
'sum': item.select('td')[i + 2].text, # 总和数
'Totalsales': item.select('td')[i + 3].text, # 总销售额
'Direct': item.select('td')[i + 4].text, # 直选中奖注数
'Direct_bonus': item.select('td')[i + 5].text, # 直选总奖金
'three_selection': item.select('td')[i + 6].text, # 组选3中奖注数
'three_selection_bonus': item.select('td')[i + 7].text, # 组选3总奖金
'six__selection': item.select('td')[i + 8].text, # 组选6中奖数
'six__selection_bonus': item.select('td')[i + 9].text, # 组选6总奖金
'time': item.select('td')[i + 10].text # 开奖日期
# 一组数据读完马上把值返回给调用函数,但没有退出本函数和本循环,
# 调用函数得到数据,写到excel对象里,然后又回到这里,本次循环结束,开始下一次循环,item列表指针
}
except IndexError:
pass
def write_to_list():
b3 = 23157
print('当前模式为直选复式')
a3 = int(input('输入总期数'))
# c3 = input("请输入0-9五位不重复的数字:")
str_num = '0123456789'
ch_num = int(input('请输入您要选择的数字个数,至少为3(3/4/5/6/7/8):'))
price = 12
if ch_num == 3:
price = 12
elif ch_num == 4:
price = 48
elif ch_num == 5:
price = 120
elif ch_num == 6:
price = 240
elif ch_num == 7:
price = 420
elif ch_num == 8:
price = 672
list_all = []
print(f'您选择的是{ch_num}位,{a3}期总金额为{a3 * price}')
for i in range(0, 9):
for j in range(ch_num - 1 + i, 10):
buy_num = str_num[i:i + ch_num - 1] + str(j)
list_all.append(buy_num)
count = len(list_all)
list_money = []
for i in range(count):
c3 = list_all[i]
# 选号
nums = []
for j in range(len(c3)):
nums.append(int(c3[j]))
# print(nums)
i = 0
# 用fiddler网页抓包得到真实网页地址,一次获取全部历史数据
url = 'http://datachart.500.com/pls/history/inc/history.php?limit={}&start={}&end={}'.format(a3, b3 - a3 + 1,
b3)
html = get_html(url) # 调用自定义函数,读网页获取网页内容
list_num = []
if html != None: # 如果读网页没出错,读成功,则进行下一步,
# 写入每一期信息
'''
调用自定义函数分析提取网页数据,保存到excel对象表中,item是循环中所调用的parse_html函数里的对象,是一个字典类型数据
就是提取其它函数的item对象数据,写到excel表对象里
'''
for item in parse_html(html):
# 下边的if是为了去掉列表里的乱码 ,在网页里显示为空白,用0代替
if item['three_selection'] == ' ':
item['three_selection'] = '0'
item['three_selection_bonus'] = '0'
else:
item['six__selection'] = '0'
item['six__selection_bonus'] = '0'
# 处理数字
num = ''.join(item['WinningNumbers'].split(' '))
n3 = int(num[0])
n2 = int(num[1])
n1 = int(num[2])
# print(n3, n2, n1)
if n3 in nums and n2 in nums and n1 in nums:
list_num.append(num)
# print(list_num)
# print(len(list_num))
# print(len(list_num))
# print('最近{}期中奖次数:{}'.format(a3, len(list_num)))
# print("投入{}期:{}".format(a3,a3 * 120))
# print("回报{}期:{}".format(len(list_num),(len(list_num)) * 1040))
# print("净赚:{}".format(len(list_num) * 1040 - a3 * 120))
list_money.append((len(list_num) * 1040 - a3 * price))
print(list_money)
print('中奖次数'.format(len(list_num)))
print('投入资金:{}'.format(a3 * price))
print("近{}期盈利最大金额:{}".format(a3, max(list_money)))
print("选号为:{}".format(list_all[list_money.index(max(list_money))]))
# 这是程序真正开始执行处,如果程序被直接执行了而不是被当作库调用,则运行main()函数
if __name__ == '__main__':
write_to_list()
参考