5.31

发布时间 2023-05-31 23:40:03作者: 20214046王垚基

代码行数:200H

学习内容:完成python提交大作业。

学习计划:期末完成及格

from tkinter import Tk, Label, Button, Entry
import xlwt as xlwt
from lxml import etree
import requests
import pandas as pd
import matplotlib.pyplot as plt

def two_color_ball():
url = entry.get()
xls = xlwt.Workbook() # 创建一个新的 Excel 文件
sheet = xls.add_sheet("two_color_ball", cell_overwrite_ok=True) # 创建一个名为 "two_color_ball" 的工作表,并允许单元格覆盖写入
row = 1 # 初始化行数
# url = "http://m.55123.cn/kjh/ssq-history-120.htm" 定义要爬取的网站 URL
req = requests.get(url) # 发送 GET 请求并获取响应数据
resp = req.content.decode("utf-8") # 将响应数据转换为 UTF-8 编码格式
html = etree.HTML(resp) # 使用 etree 解析 HTML 响应数据
uls = html.xpath("/html/body/div[@class='wrap']/div[@class='lottery']/ul") # 查找 HTML 文档中的所有 <ul> 元素,并返回包含这些元素的列表
dates = []
nums = []
for ul in uls: # 遍历每个 <ul> 元素
date = ul.xpath("li/span[@class='dates']") # 获取当前 <ul> 元素下的 <li> 子元素的 <span> 子元素(class="dates")的文本内容,并返回包含这些元素的列表
number = ul.xpath("li/a/span[@class='ball lred']/text()") # 获取当前 <ul> 元素下的 <li> 子元素的 <a> 子元素的 <span> 子元素(class="ball lred")的文本内容,并返回包含这些元素的列表
tail_number = ul.xpath("li/a/span[@class='ball lblue']/text()") # 获取当前 <ul> 元素下的 <li> 子元素的 <a> 子元素的 <span> 子元素(class="ball lblue")的文本内容,并返回包含这些元素的列表
dates.append(date[0].text)
nums.append([number[i] for i in range(len(number))] + [tail_number[0]])
sheet.write(0, 0, "期数")
sheet.write(0, 1, "红球1")
sheet.write(0, 2, "红球2")
sheet.write(0, 3, "红球3")
sheet.write(0, 4, "红球4")
sheet.write(0, 5, "红球5")
sheet.write(0, 6, "红球6")
sheet.write(0, 7, "蓝球1")
for i in range(len(dates)):
sheet.write(i+1, 0, dates[i])
sheet.write(i+1, 1, nums[i][0])
sheet.write(i+1, 2, nums[i][1])
sheet.write(i+1, 3, nums[i][2])
sheet.write(i+1, 4, nums[i][3])
sheet.write(i+1, 5, nums[i][4])
sheet.write(i+1, 6, nums[i][5])
sheet.write(i+1, 7, nums[i][6])
xls.save("two_color_ball.xls")
data = pd.read_excel("two_color_ball.xls")
plt.plot(data["期数"], data["红球1"], label="红球1", marker="o")
plt.plot(data["期数"], data["红球2"], label="红球2", marker="o")
plt.plot(data["期数"], data["红球3"], label="红球3", marker="o")
plt.plot(data["期数"], data["红球4"], label="红球4", marker="o")
plt.plot(data["期数"], data["红球5"], label="红球5", marker="o")
plt.plot(data["期数"], data["红球6"], label="红球6", marker="o")
plt.plot(data["期数"], data["蓝球1"], label="蓝球1", marker="o")
plt.legend()
plt.show()

root = Tk()
root.title("双色球历史数据分析")
root.geometry("400x200")

label = Label(root, text="请输入要爬取的双色球历史数据 URL:")
label.pack()

entry = Entry(root)
entry.pack()

button = Button(root, text="爬取并分析", command=two_color_ball)
button.pack()

root.mainloop()