<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        python基礎(chǔ)教程項目四之新聞聚合

        來源:懂視網(wǎng) 責(zé)編:小OO 時間:2020-11-27 14:22:25
        文檔

        python基礎(chǔ)教程項目四之新聞聚合

        《python基礎(chǔ)教程》書中的第四個練習(xí),新聞聚合。現(xiàn)在很少見的一類應(yīng)用,至少我從來沒有用過,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個程序的用處有些類似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。先上代碼,然后再來逐一分析。
        推薦度:
        導(dǎo)讀《python基礎(chǔ)教程》書中的第四個練習(xí),新聞聚合。現(xiàn)在很少見的一類應(yīng)用,至少我從來沒有用過,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個程序的用處有些類似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。先上代碼,然后再來逐一分析。

        這篇文章主要為大家詳細(xì)介紹了python基礎(chǔ)教程項目四之新聞聚合,具有一定的參考價值,感興趣的小伙伴們可以參考一下

        《python基礎(chǔ)教程》書中的第四個練習(xí),新聞聚合。現(xiàn)在很少見的一類應(yīng)用,至少我從來沒有用過,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個程序的用處有些類似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。

        先上代碼,然后再來逐一分析:

        from nntplib import NNTP
        from time import strftime,time,localtime
        from email import message_from_string
        from urllib import urlopen
        import textwrap
        import re
        day = 24*60*60
        def wrap(string,max=70):
         '''
         '''
         return '
        '.join(textwrap.wrap(string)) + '
        '
        class NewsAgent:
         '''
         '''
         def __init__(self):
         self.sources = []
         self.destinations = []
         def addSource(self,source):
         self.sources.append(source)
         def addDestination(self,dest):
         self.destinations.append(dest)
         def distribute(self):
         items = []
         for source in self.sources:
         items.extend(source.getItems())
         for dest in self.destinations:
         dest.receiveItems(items)
        class NewsItem:
         def __init__(self,title,body):
         self.title = title
         self.body = body
        class NNTPSource:
         def __init__(self,servername,group,window):
         self.servername = servername
         self.group = group
         self.window = window
         def getItems(self):
         start = localtime(time() - self.window*day)
         date = strftime('%y%m%d',start)
         hour = strftime('%H%M%S',start)
         server = NNTP(self.servername)
         ids = server.newnews(self.group,date,hour)[1]
         for id in ids:
         lines = server.article(id)[3]
         message = message_from_string('
        '.join(lines))
         title = message['subject']
         body = message.get_payload()
         if message.is_multipart():
         body = body[0]
         yield NewsItem(title,body)
         server.quit()
        class SimpleWebSource:
         def __init__(self,url,titlePattern,bodyPattern):
         self.url = url
         self.titlePattern = re.compile(titlePattern)
         self.bodyPattern = re.compile(bodyPattern)
         def getItems(self):
         text = urlopen(self.url).read()
         titles = self.titlePattern.findall(text)
         bodies = self.bodyPattern.findall(text)
         for title.body in zip(titles,bodies):
         yield NewsItem(title,wrap(body))
        class PlainDestination:
         def receiveItems(self,items):
         for item in items:
         print item.title
         print '-'*len(item.title)
         print item.body
        class HTMLDestination:
         def __init__(self,filename):
         self.filename = filename
         def receiveItems(self,items):
         out = open(self.filename,'w')
         print >> out,'''
         <html>
         <head>
         <title>Today's News</title>
         </head>
         <body>
         <h1>Today's News</hi>
         '''
         print >> out, '<ul>'
         id = 0
         for item in items:
         id += 1
         print >> out, '<li><a href="#" rel="external nofollow" >%s</a></li>' % (id,item.title)
         print >> out, '</ul>'
         id = 0
         for item in items:
         id += 1
         print >> out, '<h2><a name="%i">%s</a></h2>' % (id,item.title)
         print >> out, '<pre>%s</pre>' % item.body
         print >> out, '''
         </body>
         </html>
         '''
        def runDefaultSetup():
         agent = NewsAgent()
         bbc_url = 'http://news.bbc.co.uk/text_only.stm'
         bbc_title = r'(?s)a href="[^" rel="external nofollow" ]*">s*<b>s*(.*?)s*</b>'
         bbc_body = r'(?s)</a>s*<br/>s*(.*?)s*<'
         bbc = SimpleWebSource(bbc_url, bbc_title, bbc_body)
         agent.addSource(bbc)
         clpa_server = 'news2.neva.ru'
         clpa_group = 'alt.sex.telephone'
         clpa_window = 1
         clpa = NNTPSource(clpa_server,clpa_group,clpa_window)
         agent.addSource(clpa)
         agent.addDestination(PlainDestination())
         agent.addDestination(HTMLDestination('news.html'))
         agent.distribute()
        if __name__ == '__main__':
         runDefaultSetup()

        這個程序,首先從整體上進(jìn)行分析,重點部分在于NewsAgent,它的作用是存儲新聞來源,存儲目標(biāo)地址,然后在分別調(diào)用來源服務(wù)器(NNTPSource以及SimpleWebSource)以及寫新聞的類(PlainDestination和HTMLDestination)。所以從這里也看的出,NNTPSource是專門用來獲取新聞服務(wù)器上的信息的,SimpleWebSource是獲取一個url上的數(shù)據(jù)的。而PlainDestination和HTMLDestination的作用很明顯,前者是用來輸出獲取到的內(nèi)容到終端的,后者是寫數(shù)據(jù)到html文件中的。

        有了這些分析,然后在來看主程序中的內(nèi)容,主程序就是來給NewsAgent添加信息源和輸出目的地址的。

        這確實是個簡單的程序,不過這個程序可是用到了分層了。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        python基礎(chǔ)教程項目四之新聞聚合

        《python基礎(chǔ)教程》書中的第四個練習(xí),新聞聚合。現(xiàn)在很少見的一類應(yīng)用,至少我從來沒有用過,又叫做Usenet。這個程序的主要功能是用來從指定的來源(這里是Usenet新聞組)收集信息,然后講這些信息保存到指定的目的文件中(這里使用了兩種形式:純文本和html文件)。這個程序的用處有些類似于現(xiàn)在的博客訂閱工具或者叫RSS訂閱器。先上代碼,然后再來逐一分析。
        推薦度:
        標(biāo)簽: 新聞 項目 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99re6在线精品免费观看| 亚洲AV电影院在线观看| 亚洲一卡二卡三卡| 中文字幕视频免费| 久久精品国产亚洲av麻豆小说 | 中文字幕一区二区免费| 国产亚洲免费的视频看| 精品一卡2卡三卡4卡免费视频| 亚洲AV一宅男色影视| 猫咪免费人成网站在线观看| 亚洲中文无码a∨在线观看| 男女做羞羞的事视频免费观看无遮挡| 亚洲av产在线精品亚洲第一站 | 黄色网址免费观看| 亚洲啪AV永久无码精品放毛片 | 在线观看成人免费视频| 免费国产va在线观看| 国产AV无码专区亚洲AV漫画| 青青青国产手机频在线免费观看| 亚洲欧洲国产成人精品| 三年片在线观看免费大全| 色欲色欲天天天www亚洲伊| 夜夜春亚洲嫩草影院| 99re6热视频精品免费观看| 亚洲综合久久精品无码色欲| 免费h成人黄漫画嘿咻破解版| 在线人成免费视频69国产| 亚洲国产美女福利直播秀一区二区| 日本一道一区二区免费看 | 亚洲午夜无码毛片av久久京东热| 亚洲精品一级无码中文字幕 | 久久精品无码一区二区三区免费| 亚洲成av人在线观看网站| 亚洲一区二区三区影院| 成人免费AA片在线观看| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 成人伊人亚洲人综合网站222| 巨胸喷奶水视频www免费视频| 亚洲不卡中文字幕| 亚洲一级黄色视频| 在线天堂免费观看.WWW |