您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

python做出新闻聚合项目

2025/4/22 4:44:19发布31次查看
这次给大家带来python做出新闻聚合项目,python做出新闻聚合项目的注意事项有哪些,下面就是实战案例,一起来看一下。
先上代码,然后再来逐一分析:
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,它的作用是存储新闻来源,存储目标地址,然后在分别调用来源服务器(nntpsource以及simplewebsource)以及写新闻的类(plaindestination和htmldestination)。所以从这里也看的出,nntpsource是专门用来获取新闻服务器上的信息的,simplewebsource是获取一个url上的数据的。而plaindestination和htmldestination的作用很明显,前者是用来输出获取到的内容到终端的,后者是写数据到html文件中的。
有了这些分析,然后在来看主程序中的内容,主程序就是来给newsagent添加信息源和输出目的地址的。
这确实是个简单的程序,不过这个程序可是用到了分层了。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
配置opencv3+python3的方法
python3+opencv的配置教程
以上就是python做出新闻聚合项目的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product