23章 新聞彙總

2021-10-06 03:24:34 字數 4062 閱讀 1463

今日練習python基礎教程第23章專案4:新聞彙總

執行順利,**如下:

from nntplib import nntp,decode_header

from urllib.request import urlopen

import textwrap

import re

class

newsagent

:"""

可將新聞源中的新聞發布到新聞目的地的物件

"""def__init__

(self)

: self.sources =

self.destinations =

defadd_source

(self, source)

:def

adddestination

(self,dest)

:def

distribute

(self)

:"""

從所有新聞源獲取所有的新聞,並將其發布到所有的新聞目的地

"""items =

for source in self.sources:

items.extend(source.get_items())

for dest in self.destinations:

dest.receive_items(items)

class

newsitem

:"""

有標題何正文組成的簡單新聞

"""def__init__

(self,title,body)

: self.title = title

self.body = body

class

nntpsource

:"""

從nntp新聞組獲取新聞的新聞源

"""def__init__

(self,servername,group,howmany)

: self.servername = servername

self.group = group

self.howmany = howmany

defget_items

(self)

: server = nntp(self.servername)

resp, count, first, last, name = server.group(self.group)

start = last - self.howmany +

1 resp, overviews = server.over(

(start,last)

)for

id, over in overviews:

title = decode_header(over[

'subject'])

resp, info = server.body(id)

body =

'\n'

.join(line.decode(

'latin1'

)for line in info.lines)

+'\n\n'

yield newsitem(title, body)

server.quit(

)class

******websource

:"""

使用正規表示式從網頁提取新聞的新聞源

"""def__init__

(self, url, title_pattern, body_pattern, encoding=

'utf8'):

self.url = url

self.title_pattern = re.

compile

(title_pattern)

self.body_pattern = re.

compile

(body_pattern)

self.endoding = encoding

defget_items

(self)

: text = urlopen(self.url)

.read(

).decode(self.encoding)

titles = self.title_patter.findall(text)

bodies = self.body_pattern.findall(text)

for title, body in

zip(titles, bodies)

:yield newsitem(title,textwrap.fill(body)

+'\n'

)# textwrap.fill與textwrap.wrap都能用,具體區別參考官方文件

class

plaindestination

:"""

以純文字方式顯示所有新聞的新聞源

"""defreceive_items

(self, items)

:for item in items:

print

(item.title)

print

('-'

*len

(item.title)

)print

(item.body)

class

htmldestination

:"""

以html格式顯示所有新聞的新聞源

"""def__init__

(self, filename)

: self.filename = filename

defreceive_items

(self, items)

: out =

open

(self.filename,

'w')

print

("""

""",file

=out)

print(''

,file

= out)id=

0for item in items:

id+=

1print(''

.format(id

,item.title)

,file

=out)

print

('{}

'

.format

(item.body)

,file

=out)

print

("""

""",file

=out)

defrundefaultsetup()

:#注意函式是頂頭

""" **和目標的預設位置。可以自己修改

"""agent = newsagent(

)# 從comp.lang.python.announce獲取新聞的nntpsource

# insert real server name

clpa_server =

'web.aioe.org'

clpa_group =

'comp.lang.python.announce'

# alt.***.telephone comp.lang.python gmane.comp.python.committers

clpa_howmany =

10 clpa = nntpsource(clpa_server, clpa_group, clpa_howmany)

agent.add_source(clpa)

# 增加純文字目標和html目標

agent.adddestination(plaindestination())

agent.adddestination(htmldestination(

'news3.html'))

# 發布新聞專案

agent.distribute(

)if __name__ ==

'__main__'

: rundefaultsetup(

)

23設計模式彙總

設計模式分為三大類 建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀態模...

沙朗新聞發布系統彙總

乙個月轟轟烈烈的戰鬥後,沙朗最終定居在新聞發布系統。因為房間的收費系統以前那樣,但也有三個牛腩做。所以我的理解是不是那麼難。曾經視窗式的u層轉換成了web層。凝視 從上圖我們能夠看出牛腩還是總體的三層架構,僅僅只是在所謂的web層上,須要花費一點時間去設計,須要一些css div的技術,其它的基本上...

Jenkins2 3問題彙總

找到.jenkins config.xml檔案 加上這一段 123 4567 當然上面的是使用的遺留模式,可以把authorizationstrategy中的class替換一下 1 class hudson.security.authorizationstrategy unsecured 上面這個許...