Python基础教程书籍案例:新闻采集(新闻聚合)【上】
这个练习项目来自《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基础教程书籍案例:新闻采集(新闻聚合)【上】相关推荐
- python基础教程书籍推荐-Python入门书籍推荐,我的清单
今天刚好有点时间,把我整理的一部分心得,提取一部分出来给大家. 这是一份有关python零基础入门的学习清单,包括详细的介绍: 第一份:名叫<Python编程快速上手,让繁琐工作自动化>( ...
- python基础教程书籍推荐-入门python有什么好的书籍推荐?
Python编程语言有许多语法结构.标准库函数和交互式开发环境功能.好在,你可以忽略大多数内容.你只需要学习部分内容,就能编写一些方便的小程序. 但在动手之前,你必须学习一些基本编程概念.就像魔法师培 ...
- python基础教程书籍推荐-小猿圈推荐Python入门书籍,不知道这些你就太low了。
原标题:小猿圈推荐Python入门书籍,不知道这些你就太low了. PYPL发布6月编程语言排行榜,盘踞前五名的分别是Python.Java.Java.C# 和 PHP.近五年,Python采用率高居 ...
- python基础教程书籍推荐-初学者python入门必看书籍推荐(上)
随着最近Python的热度上涨,学习的人数也在增多,也因为Python这门语言的简短.易学.语言优美的优点,吸引了很多人来学习它.初学者想要入门,就必须先通过阅读,学习大量的理论知识对Python有一 ...
- python基础教程书籍-7本Python必读的入门书籍
Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...
- python基础教程书籍推荐-Python大神推荐给小白的36本入门书籍
Python大神推荐给小白的36本入门书籍 如果看我喜欢可以找我领取Python电子书和学习资料 1.Python编程:从入门到实践 我自己最初看的这本书,觉得非常适合入门 2.python入门经典- ...
- python基础教程书籍-Python学习必看书籍_带你高效学习
坚持就是胜利,祝你成功!!! 都说python是最好的语言. 1.<笨办法学Python 3> 入门强烈推荐 本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴 ...
- python基础教程书籍推荐-python入门书籍推荐
python入门书籍推荐 1.Python编程:入门到实践 理论和实践恰到好处,行文逻辑流畅,不跳跃,手把手教的感觉,却不啰嗦,非常适合入门.强烈推荐这本书,书中涵盖的内容是比较精简的,没有艰深晦涩的 ...
- 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. ...
最新文章
- 固态硬盘上安装centos_固态硬盘使用f2fs作为根分区安装linux
- 【架构】阿里中台内容整理(部分)
- MySQL导入csv文件内容到Table及数据库的自增主键设置
- css 外弧_css 伪类实现弧形
- 12v小型电机型号大全_电机型号参数大全,再不怕看不懂型号了
- MySql如何使用索引(二)
- 免费送《你的知识需要管理》签名书活动,秒杀
- linux安装nsenter工具,Docker 使用nsenter工具进入容器的操作
- NUC1100 Biorhythms【中国剩余定理】
- HDU 1556 Color the ball 线段树
- STM单片机命名规则
- 华为mate xs拍照怎么用?镜像智拍助你告别大饼脸
- Ogre 3DMax导出插件的制作
- 吴冠中的一类国画:盛世的迷思
- 电动汽车充电站选址定容软件简单实现
- Cocos2d-x 3.0final 终结者系列教程01-无论是从cocos2d-x2.x升级到版本cocos2d-x3.x
- linux的nfs配置文件的编写信息(学习day1)
- Jitsi视频会议部署(三):让电话打进来!
- C#编译基础知识(一)
- 某同步总线的时钟频率为100MHz,宽度为32位,地址/数据线复用,每传输一个地址或者数据就占用一个时钟周期。该总线支持猝发传输方式,则一次“主存写”总线事务传输128位数据所需的时间至少是
热门文章
- 人工智能技术在银行客服中心的应用风险-笔记
- c语言变量周围堆栈损坏csdn,围绕变量“输入”的堆栈已损坏(Stack around the variable 'input' was corrupted)...
- 《Enhanced Deep Residual Networks for Single Image Super-Resolution》论文阅读之EDSR
- python3实现百度翻译
- matlab-频响函数
- vue——axios请求成功却进入catch的原因
- 职高生学计算机的走单招服装设计可以吗,2019年江西科技学院服装与服饰设计专业介绍...
- [‘XXX‘] not found in axis
- 智能媒体管理产品文档转换/预览功能介绍(1)---Cloud Native架构
- 遗传算法(确定性排挤)