简单!用python制作一款属于自己的新闻软件!

Hi~大家好!

上期讲解了一篇简单的新闻爬虫程序:今日讲解如何结合上一期内容进行制作一个简单的GUI可视化窗口,对爬取的内容进行展示。

本文会用到 tkinter 模块,安装可以用 pip 命令进行安装:

pip install tkinter

测试下:

from tkinter import *
# 实例化
root = Tk()
# 标题
root.title('测试')
# 调用mainloop()方法,使得窗口一直存在
mainloop()

这样简单的窗口就完成了。
在这里插入图片描述

任务实战

导入模块:

import requests
import re
from lxml import etree
import tkinter as tk	# GUI界面模块
from tkinter import *
from tkinter import scrolledtext	# 滚动文本框的模块

这里简单的应用函数式编程,先创建个 main 函数,用于设置窗口参数;创建 response_data 函数,用于爬虫以及连接窗口展示:

def response_data():
	...
def main():
	...
if __name__ == '__main__':
    main()

main 函数

设置全局变量 text ,方便后面 response_data 函数调用展示连接文本框。

global text	

实例化窗口和设置窗口标题

root = Tk()	
root.title('澎湃新闻')	

添加滚动文本框,设置 wrap 参数是为了防止英文单词出现断开:

text = scrolledtext.ScrolledText(root, width=83, height=30, wrap=tk.WORD)

columnspan 组件所跨越的列数:

text.grid(row=2, columnspan=2)

设置按钮名称、字体、调用 response_data 函数、对齐方式,对齐方式有 N 、S、 W、 E 四种:

button = Button(root, text='开始', font=("微软雅黑", 10), command=response_data).grid(row=3, column=0, sticky=S)  
button = Button(root, text='退出', font=("微软雅黑", 10), command=root.quit).grid(row=3, column=1, sticky=N)  

使得窗口一直存在:

mainloop()

设置后窗口这样:
在这里插入图片描述
如果想做好看点,可以自己进行精修。

response_data 函数

response_data 函数主要是爬虫模块、以及和窗口模块进行连接。

爬虫模块是上一期内容,而且内容较为简单,这里删除保存参数和一些不必要的参数,保留到提取的数据这一步:

url = f'https://www.thepaper.cn/load_index.jsp?nodeids=25462&topCids=&pageidx=1&isList=true'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url, headers=headers)

href = re.findall('data-id="(.*?)"', response.text)
title = re.findall('alt="(.*?)"', response.text)
for url_li, title_li in zip(href, title):
    url_ = f'https://www.thepaper.cn/newsDetail_forward_{url_li}'
    res = requests.get(url_, headers=headers)
    etrees = etree.HTML(res.text)
    text_ = '\n\n'.join(etrees.xpath('.//div[@class="news_txt"]/text()'))

添加数据到文本框:

text.insert(END, title_li + '\n\n')
text.insert(END, text_ + '\n\n')
text.insert(END, '*' * 83 + '\n\n')
# 文本框向下滚动
text.see(END)
# 更新
text.update()

调用主函数:

if __name__ == '__main__':
    main()

运行后 点击开始 就能看到最新的新闻了:
在这里插入图片描述


版权声明:本文为weixin_49669074原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。