前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python敲一个今日历史查看小工具,让它来告诉你历史的今天发生过什么大事!

用Python敲一个今日历史查看小工具,让它来告诉你历史的今天发生过什么大事!

作者头像
Python与Excel之交
发布2021-08-05 10:27:33
6980
发布2021-08-05 10:27:33
举报
文章被收录于专栏:Python与Excel之交

大家好,我是小刀!

这篇文章灵感源于最近发生的事,信息量都很大,然后突然就想看看历史的今天有发生过什么大事件,最后就写了个查看今日历史的小工具,下面就开始实战!

所需要用到的库:

代码语言:javascript
复制
import PySimpleGUI as sg
import stylecloud
from IPython.display import Image
import requests
from lxml import etree

安装可用pip命令进行安装:

代码语言:javascript
复制
pip install 库名

界面

界面包含日期输入、开始查询按钮、事件展示、词云展示功能。日期输入、开始查询按钮、事件展示是在主界面,词云展示是在子界面,所以在创建窗体时,应该创建两个列表布局。

在词云展示界面,用的是PySimpleGUI库中的Image方法,通过它可以创建一个图片展示区域。

代码语言:javascript
复制
# 主题设置
sg.theme('LightBrown3')

layout = [[
    # 查询以及查询结果输出界面
    sg.Column([
        [sg.Text('请输入月:', font=("微软雅黑", 12)),
         sg.Combo(values='', font=("微软雅黑", 10), auto_size_text=True,
                  size=(13, 20), key='keys'),

         sg.Text('请输入日:', font=("微软雅黑", 12)),
         sg.Combo(values='', font=("微软雅黑", 10), auto_size_text=True,
                  size=(13, 20), key='value'),

         sg.Button('开始查询', font=("微软雅黑", 12))],

        [sg.Text('事件展示:', justification='center')],
        [sg.Output(size=(60, 20), font=("微软雅黑", 10))],
    ]),

    # 给两个布局加一条线
    sg.VSeperator(),

    # 词云展示界面,界面大小和图片差不多即可
    sg.Column([
        [sg.Image(size=(450, 20), key="image")]
    ]),
]]

# 创建窗口
window = sg.Window('今日历史', layout, font=("微软雅黑", 12), default_element_size=(120, 40))

# 事件循环
while True:
    # 关闭
    event, values = window.read()
    if event in (None, 'Exit'):
        break
    # 查询
    if event == '开始查询':
        if values['value'] and values['keys']:
            yeu = values['keys']
            day = values['value']
            # 传入爬虫函数
            Datainput(yeu, day)
        else:
            print('月或者日未填充!')
            sg.popup('月或者日未填充!')

window.close()

生成的界面:

爬虫

在对比几个网站后,最终选定以下网站:

代码语言:javascript
复制
https://today.help.bj.cn/
分析网站
该网页只是简单的静态网页,并不存在什么厉害的反爬虫措施,也不需要进入请求头,且内容相比其它网站更为完整。

在上图中的红色框内容选择任一一天,该网址链接将会变为:

代码语言:javascript
复制
https://today.help.bj.cn/8/3/

可以发现,该链接后面增加了日期,后面只需要更改日期即可得到该日期下的网页内容。

解析网页

对于如何解析网页相关操作,这里就不一一讲解了。但需要注意的是,如果在前期需要打印网页源代码的时候,会发生编码错误:

代码语言:javascript
复制
UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 20672: illegal multibyte sequence

源于网页源代码中不止存在一种编码格式的内容,打印上无法识别,从而发生错误。当然,如果你直接打印我们需要的内容,他是不会报错的。编码错误解决方法是进入以下代码:

代码语言:javascript
复制
import io
import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')  # 改变标准输出的默认编码

本文用xpath语法进行解析网页,爬虫完整代码:

代码语言:javascript
复制
import io
import sys

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')  

def Datainput(yeus, day):
    resposen = requests.get(f'https://today.help.bj.cn/{yeus}/{day}/')
    html = etree.HTML(resposen.text)
    ul = html.xpath('//*[@id="container"]')
    for li in ul:
        day_title = li.xpath('./li[1]/h1/text()')
        years = li.xpath('./li/div[1]/text()')
        event_title = li.xpath('./li/div[2]/div/a/@title')
        # 输出内容,center方法会在内容前面和后面,根据第一个数量参数生成第二个参数
        print('=' * 48,
              ''.join(_title).center(90, " "),
              '=' * 48
              )
        for i, e in zip(years, event_title):
            print(str(i.center(20, " ")), e)
        img_ci(event_title) # 传入词云函数

词云

词云是通过stylecloud库进行绘制的,通过里面的gen_stylecloud方法,简单的设置下参数,就可以很简单的绘制出一张词云图了。因为我们的目的只是通过简单的展示下事件,关于其它一些停词在这里就不设置了。

代码语言:javascript
复制
def img_ci(event_title):
    stylecloud.gen_stylecloud(text=' '.join(event_title), collocations=False,
                              font_path=r'‪C:\Windows\Fonts\msyh.ttc',  # 字体
                              icon_name='fab fa-qq',  # 蒙版
                              size=(450, 450), # 词云图大小
                              output_name='词云.png')  
    Image(filename='词云.png')
    # 把生成的词云传入词云展示区域展示,通过size控制大小
    window["image"].Update(filename='./词云.png', size=(450, 450))  

词云的蒙版可以从以下链接查找更换:

代码语言:javascript
复制
https://fontawesome.dashgame.com/

最终效果展示:

以上就是本文的全部内容了,完整代码已在文中,如果你喜欢或者对你有帮助,请给我点个赞和在看吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 界面
  • 爬虫
    • 词云
    相关产品与服务
    云函数
    云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档