核心代码

requests.get 下载html网页
bs4.BeautifulSoup 分析html内容

from requests import get
from bs4 import BeautifulSoup as bs
from datetime import datetime as dtdef Today(style=1):date = dt.today()if style!=1: return f'{date.month}月{date.day}日'return f'{date.year}-{date.month:02}-{date.day:02}'def SinaNews(style=1):url1 = 'http://news.***.com.cn/'if style==1: url1 += 'world'elif style==2: url1 += 'china'else: url1='https://mil.news.sina.com.cn/'text = get(url1)text.encoding='uft-8'soup = bs(text.text,'html.parser')aTags = soup.find_all("a")return [(t.text,t['href']) for t in aTags if Today() in str(t)]

爬取标题

>>> for i,news in enumerate(SinaNews(1)):
    print(f'No{i+1}:',news[0])

No1: 外媒:*****
No2: 日媒:******
......

.......

内容已马赛克!!!
>>>

首次做爬虫,为了方便下手找一个不用破解网页的某新闻网站,下载网页就能直接取得内容。其中的国际、国内和军事新闻三个网页作内容源,requests.get下载网页后,分析所得html文本,所有<a href=...>标记带日期刚好所需要的。

爬取正文

然后再根据url下载正文网页,分析可知id=‘article’的<div>层就是正文所在位置,.get_text()是取得文本的关键函数,然后适当做一些格式处理:

>>> def NewsDownload(url):html = get(url)html.encoding='uft-8'soup = bs(html.text,'html.parser')text = soup.find('div',id='article').get_text().strip()text = text.replace('点击进入专题:','相关专题:')text = text.replace('  ','\n  ')while '\n\n\n' in text:text = text.replace('\n\n\n','\n\n')return text>>> url = 'https://******/w/2021-09-29/doc-iktzqtyt8811588.shtml'
>>> NewsDownload(url)
'原标题:******************************************************'
>>> 

界面代码

使用内置的图形界面库 tkinter 控件 Text 、Listbox、Scrollbar、Button。设置基本属性、放置位置、绑定命令,然后调试到程序完工!

源代码 News.pyw :其中涉及的网站名称已马赛克!

from requests import get
from bs4 import BeautifulSoup as bs
from datetime import datetime as dt
from os import path
import tkinter as tkdef Today(style=1):date = dt.today()if style!=1: return f'{date.month}月{date.day}日'return f'{date.year}-{date.month:02}-{date.day:02}'def SinaNews(style=1):url1 = 'http://news.****.com.cn/'if style==1: url1 += 'world'elif style==2: url1 += 'china'else: url1='https://mil.****.com.cn/'text = get(url1)text.encoding='uft-8'soup = bs(text.text,'html.parser')aTags = soup.find_all("a")return [(t.text,t['href']) for t in aTags if Today() in str(t)]def NewsList(i):global newsnews = SinaNews(i)tList.delete(0,tk.END)for idx,item in enumerate(news):tList.insert(tk.END,f'{idx+1:03} {item[0]}')tText.config(state=tk.NORMAL)tText.delete(0.0,tk.END)tText.config(state=tk.DISABLED)NewsShow(0)def NewsList1(): NewsList(1)
def NewsList2(): NewsList(2)
def NewsList3(): NewsList(3)def NewsShow(idx):if idx!=0:idx = tList.curselection()[0]title,url = news[idx][0],news[idx][1]html = get(url)html.encoding='uft-8'soup = bs(html.text,'html.parser')text = soup.find('div',id='article').get_text().strip()text = text.replace('点击进入专题:','相关专题:')text = text.replace('  ','\n  ')while '\n\n\n' in text:text = text.replace('\n\n\n','\n\n')tText.config(state=tk.NORMAL)tText.delete(0.0,tk.END)tText.insert(tk.END, title+'\n\n'+text)tText.config(state=tk.DISABLED)def InitWindow(self,W,H):Y = self.winfo_screenheight()winPosition = str(W)+'x'+str(H)+'+8+'+str(Y-H-100)self.geometry(winPosition)icoFile = 'favicon.ico'f = path.exists(icoFile)if f: win.iconbitmap(icoFile)self.resizable(False,False)self.wm_attributes('-topmost',True)self.title(bTitle[0])SetControl()self.update()self.mainloop()def SetControl():global tList,tTexttScroll = tk.Scrollbar(win, orient=tk.VERTICAL)tScroll.place(x=450,y=320,height=300)tList = tk.Listbox(win,selectmode=tk.BROWSE,yscrollcommand=tScroll.set)tScroll.config(command=tList.yview)for idx,item in enumerate(news):tList.insert(tk.END,f'{idx+1:03} {item[0]}')tList.place(x=15,y=320,width=435,height=300)tList.select_set(0)tList.focus()bW,bH = 70,35    #按钮的宽高bX,bY = 95,270    #按钮的坐标tBtn1 = tk.Button(win,text=bTitle[1],command=NewsList1)tBtn1.place(x=bX,y=bY,width=bW,height=bH)tBtn2=tk.Button(win,text=bTitle[2],command=NewsList2)tBtn2.place(x=bX+100,y=bY,width=bW,height=bH)tBtn3 = tk.Button(win,text=bTitle[3],command=NewsList3)tBtn3.place(x=bX+200,y=bY,width=bW,height=bH)tScroll2 = tk.Scrollbar(win, orient=tk.VERTICAL)tScroll2.place(x=450,y=10,height=240)tText = tk.Text(win,yscrollcommand=tScroll2.set)tScroll2.config(command=tText.yview)tText.place(x=15,y=10,width=435,height=240)tText.config(state=tk.DISABLED,bg='azure',font=('宋体', '14'))NewsShow(0)tList.bind("<Double-Button-1>",NewsShow)if __name__=='__main__':win = tk.Tk()bTitle = ('今日新闻','国际新闻','国内新闻','军事新闻')news = SinaNews()InitWindow(win,480,640)

奉上全部代码,在此就不作详细分析了,如有需要请留言讨论。我的使用环境 Win7+Python3.8.8 下可以无错运行!文中涉及网站名称已打上马赛克,猜不出名字的可以私下里问我。

软件编译

使用pyinstaller.exe编译成单个运行文件,注意源码文件的后缀名应该用.pyw否则会有cmd黑窗口出现。还有一个小知识点,任意网站的Logo图标icon文件,一般都能在根目录里下载到,即:
http(s)://websiteurl.com(.cn)/favicon.ico

编译命令如下:

D:\>pyinstaller --onefile --nowindowed --icon="D:\favicon.ico" News.pyw

编译完成后,在dist文件夹下生成一个News.exe可执行文件,大小约15M还能接受。

反正拿走就能直接用,临走前给个一键三连吧,谢谢!

Python “今日新闻”一个小程序,拿走就能用!相关推荐

  1. Python 练习册,每天一个小程序

    Python 练习册,每天一个小程序 说明: Python 练习册,每天一个小程序.注:将 Python 换成其他语言,大多数题目也适用 不会出现诸如「打印九九乘法表」.「打印水仙花」之类的题目 点此 ...

  2. 每日新闻:今日头条正式发布小程序;甲骨文云服务营收未达预期

    点击关注中国软件网 最新鲜的企业级干货聚集地 洞察 2018中国软件生态大会 西安站就要与您见面啦! 点击文末[阅读原文]了解更多喔 趋势洞察 薛澜:第四次工业革命将为缩小贫富差距提供机会 清华大学教 ...

  3. 用python写一个小程序,解决买水果的问题?

    问题: 商店总共有三种水果,香蕉/苹果/葡萄,单价分别为3.5/5.0/3.0元/500克. 写一个小程序实现: 1.输出一个菜单:打印每种水果的价格: 2.寻问客户欲购买水果? 3.客户想购买的克数 ...

  4. 计算机毕业设计Python+uniapp校友会管理系统小程序(小程序+源码+LW)

    计算机毕业设计Python+uniapp校友会管理系统小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyt ...

  5. 计算机毕业设计Python+uniapp水电缴费小程序论文(小程序+源码+LW)

    计算机毕业设计Python+uniapp水电缴费小程序论文(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...

  6. 新闻资讯小程序开发实践

    新闻资讯小程序开发实践 在腾讯小程序上线一周年之际,公司又决定把App产品部分内容在小程序上实现.就在小程序刚上线的时候,公司也有一款产品进行了小程序的研发,但后续没有持续的维护.这过了一年的时间,微 ...

  7. python做好的程序如何变成小程序-使用python编写简单的小程序编译成exe跑在win10上...

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  8. python开发微信小程序-Python 开发者的微信小程序开发实践

    导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...

  9. 一个小程序:图片代替鼠标移动

    一个小程序:图片代替鼠标移动 程序的运行效果: 当鼠标移动到窗口内,鼠标不见了,取而代之的是图片..... ============================================== ...

最新文章

  1. 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件
  2. 在c语言中scanf什么时候用,scanf什么时候用??c语言?
  3. android 程序退出广播,android 利用广播实现程序的强制退出
  4. 分布式环境下的session共享
  5. gddr6速率_GDDR6 显存两年后问世:比 GDDR5X 更快,速率可达 16Gbps
  6. Ajax — 第一天
  7. Ubuntu之Docker安装
  8. request.params 用法
  9. matlab接口编程配置,MATLAB与外部程序接口编程
  10. cpu要和gpu搭配吗_搞懂GPU为什么比CPU“快”
  11. 计算机音乐狂浪乐谱,当代歌曲 - 听海(流行歌曲 简谱)
  12. 使用VMware备份操作系统
  13. 佛说爱情五:镜花和水月
  14. thymeleaf 调用后台方法
  15. 【装机心得】关于系统启动U盘的那些事(下)
  16. ZZULIOJ:1102: 火车票退票费计算(函数专题)
  17. 【经验分享】尝试将 SCRIPT xxx 作为函数执行:出错
  18. 虚拟直播与光学动作捕捉技术
  19. CodeForces1214A
  20. 移动通信USSD业务探讨

热门文章

  1. 现代简约风格PPT模板
  2. cass绘制围墙lisp_cass绘制围墙lisp
  3. 自动化测试之ddt数据驱动
  4. flex4.5嵌入网页之WEB
  5. Linux LILO和GRUB
  6. C++ 使用libwebsockets开源库封装client类
  7. 一个与霍炬直接对话的机会:ChainNode AMA: 星河滚烫,开源成就区块链人间理想?
  8. 《SQL数据分析——从基础破冰到面试题解》题解1
  9. 中小企业的四个数据存储方法和措施
  10. 双重保障 助力企业数字化建设| 热璞数据库与顶象技术完成产品互认