Python “今日新聞”一個小程式,拿走就能用!

專注的阿熊發表於2021-09-30

from requests import get

from bs4 import BeautifulSoup as bs

from datetime import datetime as dt

from os import path

import tkinter as tk

def 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 = '****.com.cn/'

     if style==1: url1 += 'world'

     elif style==2: url1 += 'china'

     else: url1='****.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 news

     news = 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('外匯跟單gendan5.com 點選進入專題: ',' 相關專題: ')

     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,tText

     tScroll = 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)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2794646/,如需轉載,請註明出處,否則將追究法律責任。

相關文章