最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年04月02日 11:34:18   作者:the5fire  
這篇文章主要為大家詳細介紹了python基礎(chǔ)教程項目四之新聞聚合,具有一定的參考價值,感興趣的小伙伴們可以參考一下

《python基礎(chǔ)教程》書中的第四個練習(xí),新聞聚合?,F(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 '\n'.join(textwrap.wrap(string)) + '\n'
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('\n'.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()

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 學(xué)習(xí)win32com操作word之Range精講

    學(xué)習(xí)win32com操作word之Range精講

    這篇文章主要為大家介紹了win32com操作word之Range精講學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Python構(gòu)造函數(shù)與析構(gòu)函數(shù)超詳細分析

    Python構(gòu)造函數(shù)與析構(gòu)函數(shù)超詳細分析

    在python之中定義一個類的時候會在類中創(chuàng)建一個名為__init__的函數(shù),這個函數(shù)就叫做構(gòu)造函數(shù)。它的作用就是在實例化類的時候去自動的定義一些屬性和方法的值,而析構(gòu)函數(shù)恰恰是一個和它相反的函數(shù),這篇文章主要介紹了Python構(gòu)造函數(shù)與析構(gòu)函數(shù)
    2022-11-11
  • python爬取鏈家二手房的數(shù)據(jù)

    python爬取鏈家二手房的數(shù)據(jù)

    相信大家買房前都會在網(wǎng)上找找資料,看看行情,問問朋友,今天就用python帶大家扒一扒《鏈家二手房》的數(shù)據(jù)
    2021-05-05
  • python print 格式化輸出,動態(tài)指定長度的實現(xiàn)

    python print 格式化輸出,動態(tài)指定長度的實現(xiàn)

    這篇文章主要介紹了python print 格式化輸出,動態(tài)指定長度的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python實現(xiàn)字典序列ChainMap

    Python實現(xiàn)字典序列ChainMap

    容器數(shù)據(jù)類型包括數(shù)組list,字典dict以及元組tuple等。本篇主要介紹了ChainMap字典序列的使用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Python網(wǎng)絡(luò)編程實戰(zhàn)之爬蟲技術(shù)入門與實踐

    Python網(wǎng)絡(luò)編程實戰(zhàn)之爬蟲技術(shù)入門與實踐

    這篇文章主要介紹了Python網(wǎng)絡(luò)編程實戰(zhàn)之爬蟲技術(shù)入門與實踐,了解這些基礎(chǔ)概念和原理將幫助您更好地理解網(wǎng)絡(luò)爬蟲的實現(xiàn)過程和技巧,需要的朋友可以參考下
    2023-04-04
  • Python 利用Entrez庫篩選下載PubMed文獻摘要的示例

    Python 利用Entrez庫篩選下載PubMed文獻摘要的示例

    這篇文章主要介紹了Python 利用Entrez庫篩選下載PubMed文獻摘要的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • pytest?用例執(zhí)行失敗后其他不再執(zhí)行

    pytest?用例執(zhí)行失敗后其他不再執(zhí)行

    本文主要介紹了pytest?用例執(zhí)行失敗后其他不再執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python實現(xiàn)批量注冊網(wǎng)站用戶的示例

    python實現(xiàn)批量注冊網(wǎng)站用戶的示例

    今天小編就為大家分享一篇python實現(xiàn)批量注冊網(wǎng)站用戶的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • python的簡單web框架flask快速實現(xiàn)詳解

    python的簡單web框架flask快速實現(xiàn)詳解

    這篇文章主要為大家介紹了python的簡單web框架flask快速實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

潮州市| 嵊州市| 丁青县| 东辽县| 阳高县| 化隆| 达孜县| 宜都市| 巨野县| 洪泽县| 文安县| 星子县| 辛集市| 三门峡市| 胶州市| 嘉峪关市| 威海市| 延长县| 桦甸市| 金秀| 龙南县| 渑池县| 吴旗县| 邵阳县| 邹平县| 大足县| 新河县| 永春县| 万安县| 铜山县| 翁源县| 泊头市| 榆树市| 彭水| 天等县| 襄垣县| 合江县| 双江| 珲春市| 太康县| 仲巴县|