今日練習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)
("""
""",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 上面這個許...