这个练习项目来自《Python基础教程(第2版)》,案例原名为“新闻聚合”。

项目分为两个阶段:

  • 第一阶段:通过与NNTP服务器进行交互获取新闻源。
  • 第二阶段:获取不同的新闻源编译为新闻报告并输出不同格式的目标。

这一篇教程,我们先完成第一阶段的目标。

NNTP是“Network News Transfer Protocol”的简称,中文名为“网络新闻传输协议”。

通过这种协议不是很常见,通过它可以传输网络新闻邮件。

NNTP服务器上,往往会存在多个新闻组(或者叫讨论组)。

我们需要从NNTP服务器获取到24小时内,某一个新闻组的新闻邮件,并进行解析,获取到新闻标题以及对应的内容。

这里我们访问的NNTP服务器地址为:web.aioe.org,新闻组名称为:comp.lang.python。

为了实现第一阶段目标,我们先进行一次试验。

通过Python内置的nntplib模块与NNTP服务器进行交互,访问目标新闻组。

示例代码:

from nntplib import NNTP
'''
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
'''
server = NNTP('web.aioe.org')  # 实例化NNTP服务器连接对象
result = server.group('comp.lang.python')  # 连接服务器中的新闻组
print(result)  # 显示输出连接信息
server.quit()  # 关闭连接

运行上方代码,如果正确连接到了指定的新闻组,会显示输出以“211”开头的返回信息。

例如:(‘211 8977 192702 201741 comp.lang.python’, 8977, 192702, 201741, ‘comp.lang.python’)

否则,会给出异常提示。

在完成了这个试验,确定能够正常连接新闻组之后,我们进一步完成项目目标。

1、导入需要使用的模块

除了nntplib模块之外,因为我们要获取近24小时的新闻源,所以还需要datetime模块,帮助我们处理获取新闻的时间。

示例代码:

from nntplib import NNTP
from datetime import date, timedelta

2、创建服务器连接对象、新闻组名称以及新闻时间

示例代码:

server = NNTP('web.aioe.org')  # 实例化NNTP服务器连接对象
yesterday = date.today() - timedelta(days=1)  # 当前时间减去时间间隔
group = 'comp.lang.python'  # 新闻组名称

3、创建生成新闻id的生成器

创建新闻id的生成器是为了能够只获取一个新闻标题与内容。

因为获取内容过多的话,会耗费太多时间。

def get_id():  # 创建新闻id生成器ids = server.newnews(group, yesterday)[1]  # 获取近24小时新闻内容中的所有新闻idfor id in ids:  # 遍历所有新闻idyield id  # 生成1个新闻id

在上方代码中,通过newnews()方法能够获取最新一段时间内的所有新闻的数量和id,它是一个元组,类似:(数量描述,[id1,id2,…])。

所以,我们需要获取到返回值中id列表部分,并进行循环遍历,从而生成每一个新闻id。

4、获取一个新闻内容并显示输出

大家可以通过下方代码的注释,理解整个实现过程。

示例代码:

'''
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
'''
ids = get_id()  # 创建新闻id生成器对象
id = next(ids)  # 获取第1个新闻id
head_data = server.head(id)[1][2]  # 获取新闻的头部内容
body_data = server.body(id)[1][2]  # 获取新闻的主体内容
title = ''  # 创建标题
body = ''  # 创建主体
for line in head_data:  # 遍历头部内容if line.decode().lower().startswith('subject:'):  # 如果发现标题特征(“subject:”开头)title = line[9:].decode()  # 去除特征文字保存标题内容
for line in body_data:  # 遍历主体内容if line.decode().endswith('='):  # 如果行内容以“=”结尾line = line[:-1]  # 去除“=”if line.decode().endswith('=20'):  # 如果行内容以“=20”结尾line = line[:-3] + b'\n'  # 去除“=20”后添加换行符body += line.decode()  # 将每行内容组织为新的主体内容print(title)  # 显示输出标题内容
print('-' * len(title))  # 显示输出和标题字符数量同等的“-”符号
print(body)  # 显示输出主题内容
server.quit()  # 退出与服务器的连接

注意,因为获取到的新闻内容中,字符串都是bytes类型,所以需要进行解码,才能够进行字符串的相关操作。

通过以上步骤,我们就实现了第一阶段的目标。

在下一篇教程中,我们会分别对NNTP服务器的新闻内容以及网页中的新闻内容进行获取,并且以不同的格式输出。

Python基础教程书籍案例:新闻采集(新闻聚合)【上】相关推荐

  1. python基础教程书籍推荐-Python入门书籍推荐,我的清单

    今天刚好有点时间,把我整理的一部分心得,提取一部分出来给大家. 这是一份有关python零基础入门的学习清单,包括详细的介绍: 第一份:名叫<Python编程快速上手,让繁琐工作自动化>( ...

  2. python基础教程书籍推荐-入门python有什么好的书籍推荐?

    Python编程语言有许多语法结构.标准库函数和交互式开发环境功能.好在,你可以忽略大多数内容.你只需要学习部分内容,就能编写一些方便的小程序. 但在动手之前,你必须学习一些基本编程概念.就像魔法师培 ...

  3. python基础教程书籍推荐-小猿圈推荐Python入门书籍,不知道这些你就太low了。

    原标题:小猿圈推荐Python入门书籍,不知道这些你就太low了. PYPL发布6月编程语言排行榜,盘踞前五名的分别是Python.Java.Java.C# 和 PHP.近五年,Python采用率高居 ...

  4. python基础教程书籍推荐-初学者python入门必看书籍推荐(上)

    随着最近Python的热度上涨,学习的人数也在增多,也因为Python这门语言的简短.易学.语言优美的优点,吸引了很多人来学习它.初学者想要入门,就必须先通过阅读,学习大量的理论知识对Python有一 ...

  5. python基础教程书籍-7本Python必读的入门书籍

    Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...

  6. python基础教程书籍推荐-Python大神推荐给小白的36本入门书籍

    Python大神推荐给小白的36本入门书籍 如果看我喜欢可以找我领取Python电子书和学习资料 1.Python编程:从入门到实践 我自己最初看的这本书,觉得非常适合入门 2.python入门经典- ...

  7. python基础教程书籍-Python学习必看书籍_带你高效学习

    坚持就是胜利,祝你成功!!! 都说python是最好的语言. 1.<笨办法学Python 3> 入门强烈推荐 本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴 ...

  8. python基础教程书籍推荐-python入门书籍推荐

    python入门书籍推荐 1.Python编程:入门到实践 理论和实践恰到好处,行文逻辑流畅,不跳跃,手把手教的感觉,却不啰嗦,非常适合入门.强烈推荐这本书,书中涵盖的内容是比较精简的,没有艰深晦涩的 ...

  9. python基础教程书籍-Python基础教程(第2版)

    第1章 基础知识 1 1.1 安装Python 1 1.1.1 Windows 1 1.1.2 Linux和UNIX 3 1.1.3 苹果机(Macintosh) 4 1.1.4 其他发布版 5 1. ...

最新文章

  1. 固态硬盘上安装centos_固态硬盘使用f2fs作为根分区安装linux
  2. 【架构】阿里中台内容整理(部分)
  3. MySQL导入csv文件内容到Table及数据库的自增主键设置
  4. css 外弧_css 伪类实现弧形
  5. 12v小型电机型号大全_电机型号参数大全,再不怕看不懂型号了
  6. MySql如何使用索引(二)
  7. 免费送《你的知识需要管理》签名书活动,秒杀
  8. linux安装nsenter工具,Docker 使用nsenter工具进入容器的操作
  9. NUC1100 Biorhythms【中国剩余定理】
  10. HDU 1556 Color the ball 线段树
  11. STM单片机命名规则
  12. 华为mate xs拍照怎么用?镜像智拍助你告别大饼脸
  13. Ogre 3DMax导出插件的制作
  14. 吴冠中的一类国画:盛世的迷思
  15. 电动汽车充电站选址定容软件简单实现
  16. Cocos2d-x 3.0final 终结者系列教程01-无论是从cocos2d-x2.x升级到版本cocos2d-x3.x
  17. linux的nfs配置文件的编写信息(学习day1)
  18. Jitsi视频会议部署(三):让电话打进来!
  19. C#编译基础知识(一)
  20. 某同步总线的时钟频率为100MHz,宽度为32位,地址/数据线复用,每传输一个地址或者数据就占用一个时钟周期。该总线支持猝发传输方式,则一次“主存写”总线事务传输128位数据所需的时间至少是

热门文章

  1. 人工智能技术在银行客服中心的应用风险-笔记
  2. c语言变量周围堆栈损坏csdn,围绕变量“输入”的堆栈已损坏(Stack around the variable 'input' was corrupted)...
  3. 《Enhanced Deep Residual Networks for Single Image Super-Resolution》论文阅读之EDSR
  4. python3实现百度翻译
  5. matlab-频响函数
  6. vue——axios请求成功却进入catch的原因
  7. 职高生学计算机的走单招服装设计可以吗,2019年江西科技学院服装与服饰设计专业介绍...
  8. [‘XXX‘] not found in axis
  9. 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构
  10. 遗传算法(确定性排挤)