用 BeautifulSoup 解析器分析简易信息聚合RSS

  • 运行代码
  • 它是如何工作的
  • 分析地址
  • 遍历所有资讯
  • 安装解析器
  • 检查打印

运行代码

虽然今天传来不好的消息,京城新增数十例,但是调试程序的工作依然需要进行。运行下面区区十几代码,您可以立即得到自己想要的简易信息聚合RSS信息片段。代码运行是 Python 3.8 ,用 BeautifulSoup(v4.4.0)库 (点击获取库)

import urllib.request
from bs4 import BeautifulSoupf = urllib.request.urlopen("https://www.cnbeta.com/backend.php")
soup = BeautifulSoup(f.read(), "html.parser")
for i in soup.find_all('item'):for child in i.children:if (child.name == 'title'):print(child.string)else:if (child.name == 'description'):desc_str = BeautifulSoup(child.string,'lxml')print(desc_str.text)print('---------------------------')else:pass

如果一切正常,应该看到:

工信部委托机构检测“偷窥”App:存频繁自启动等问题
近日,央视新闻报道手机App“偷窥”乱象调查,有App十几分钟内访问照片和文件两万多次,涉及移动教学软件“优学院”、 办公软件“TIM”等多款产品。6月18日,澎湃新闻记者从工
信部旗下中国信通院泰尔终端实验室获悉,该实验室受工信部委托,已经对曝光的问题App进行了检测。 阅读全文
---------------------------
软银:将投资14家非白人创始人企业
北京时间6月19日早间消息,据外媒报道,软银愿景基金负责人拉吉夫·米斯拉(Rajeev Misra)表示,软银将对14家由非白人创始人所成立的初创企业进行投资。这是软银Emerge加
速器项目的一部分,该项目为来自代表性不足全体的创业者提供指导。在未来一年中,软银将把该项目的范围扩大至欧洲。本周四,在Emerge项目的线上活动上米斯拉发表了讲话,
在此次线上活动上,出创企业创始人向投资人介绍了自己的企业,软银还介绍了第一批完成了该项目的企业。 阅读全文
---------------------------

如果遇到提示:No module named lxml ,先别急,默认的 BeautifulSoup 安装不带 lxml HTML 解析器。后面会说明安装方法。

它是如何工作的

工作过程是这样的:首先分析目标地址的结构,然后分别用了解析器 html.parserlxml 来获取每篇资讯的 title 标题和 description 摘要描述,最后通过循环全部展现出来。

分析地址

cnBeta.com 中文业界资讯网是我很爱看的资讯网站。它免费提供订阅的简易信息聚合RSS(点击查看什么是RSS) 地址如下:

https://www.cnbeta.com/backend.php

在浏览器输入后,我们见到:

不难看出,这是一个标准的XML格式文件。结构清晰,每一个 item 节点下,有 title link description author source pubDate guid 七个子节点信息。

<rss version="2.0"><channel><item><title></title><link></link><description><![CDATA[...]]></description><author></author><source></source><pubDate></pubDate><guid></guid></item><item>...</item> </channel>
</rss>

通过解析器 html.parser ,我们可以就可以获得很理想的完整结构集 soup

f = urllib.request.urlopen("https://www.cnbeta.com/backend.php")
soup = BeautifulSoup(f.read(), "html.parser")

遍历所有资讯

soup 里面用 find_all 方法查询获得所有 item 节点。然后循环 for…in 就可以得到每一篇文章。在每篇文章,子节点 title 和 description 是我们想要的标签内容,其他不是。

for i in soup.find_all('item')

通过观察,发现还有个难点,子节点 description 里面包含 <![CDATA 格式字符串。(点击查看 XML CDATA 概念)

<description>
<![CDATA[ <p>近日,央视新闻报道手机App“偷窥”乱象调查,有App十几分钟内访问照片和文件两万多次,涉及移动教学软件“优学院”、 办公软件“TIM”等多款产品。6月18日,澎湃新闻记者从工信部旗下中国信通院泰尔终端实验室获悉,<strong>该实验室受工信部委托,已经对曝光的问题App进行了检测。</strong></p> <a href="https://www.cnbeta.com/articles/tech/993033.htm" target="_blank"><strong>阅读全文</strong></a> ]]>
</description>

以前常用处理 <![CDATA 方法是使用正则表达式。但是今天,我们交给 Beautifusoup 支持 Python 的第三方 lxml 解析器进行操作,处理起来就会变得简单。根据操作系统不同,可以选择下列方法来安装 lxml:

安装解析器

Linux 下安装,类似:

$ apt-get install Python-lxml
$ easy_install lxml

Windows 下安装,类似:

C:\Python\>pip install lxml

检查打印

遍历过程检查 .children 属性,即 item 下七个子节点。当遇到 description摘要描述,使用解析器 lxml 处理 ,获得的字符串保存到 desc_str后再打印出来:

          if (child.name == 'description'):desc_str = BeautifulSoup(child.string,'lxml')print(desc_str.text)print('---------------------------')

至此,我们以最少的代码完成最核心的事情。

总结

1、使用了 BeautifulSoup 库从HTML或XML文件中提取数据。
2、使用 lxml 库处理 CData 格式

用 BeautifulSoup 解析器分析 RSS相关推荐

  1. Postgresql源码(85)查询执行——表达式解析器分析(select 1+1如何执行)

    相关 <Postgresql源码(61)查询执行--最外层Portal模块> <Postgresql源码(62)查询执行--子模块ProcessUtility> <Pos ...

  2. Android中XML的三种解析器分析、实战

    XML解析器介绍 Android中提供了三种方式来解析XML: SAX(simple API for XML) DOM(文档对象模型) 以及Android内部使用的Pull解析. SAX(simple ...

  3. python的网页解析器_网页解析器(BeautifulSoup)-- Python

    分享一下关于 Python的网页解析器(BeautifulSoup) BeautifulSoup解析器 为了实现解析器,可以选择使用正则表达式.html.parser.BeautifulSoup.lx ...

  4. php xml expat,PHP Expat :XML的解析器

    本文中,我将讨论任何用PHP内建的Expat解析器来处理XML文档.通过范例,我将演示Expat的处理方法.同时,范例可以告诉你如何: 建立你自己的处理函数 将XML文档转换成你自己的PHP数据结构 ...

  5. 解读乐鑫 AT 指令解析器,解锁你不知道的用法

    文章首发于 『物联网学前班』公众号,欢迎关注.星标获取即时信息. 由于近期正好在做这个事情,所以今天就以乐鑫的 AT 指令为例,讲讲 AT 解析器设计有哪些事情,也算是个自己近期的学习总结了. 往期文 ...

  6. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  7. mysql源码如何解析where字句_MySQL解析器源码分析--对select语句中子查询处理逻辑的分析(一)...

    背景 一个最简单的select语句包含select子句.from子句.where子句等,这些子句都不包含子查询(subselect),也没有union操作.而复杂的select语句包含select子句 ...

  8. 分析FLV文件分析和解析器的开源代码

    分析一下GitHub上一份FLV文件分析和解析器的开源代码 GitHub源码地址:功能强大的 FLV 文件分析和解析器 :可以将flv文件的视频tag中的h264类型数据和音频tag中的aac类型数据 ...

  9. FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

最新文章

  1. 小练习——过滤掉出现次数最多的数据
  2. oracle+资料类型不一致吗,oracle数据库中,字段类型不一致,导致查询慢
  3. Leetcode PHP题解--D84 371. Sum of Two Integers
  4. VB如何根据窗口标题获得进程名称
  5. Tomcat相关总结
  6. Angular URL地址参数改变,视图不更新的解决办法(监听URL变化,重新加载数据方法)
  7. 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件
  8. python实现链表的删除_删除链表中的元素,但是只能使用一个指针
  9. 【Git/Github学习笔记】Git常用命令(代码冲突)
  10. android分辨率修改器,安卓分辨率一键修改器
  11. 数据库连接参数设置,用户登录,密码修改,权限设置,金蝶KIS旗舰版安卓盘点机PDA
  12. windows批处理 复制文件和文件夹子文件夹
  13. Wampserver修改默认浏览器、默认编辑器的解决办法
  14. c++控制台密码管理系统
  15. Sikuli异常RunTimeINIT: *** terminating: libs to export not found on above classpath: /sikulixlibs/wind
  16. 2021爱智先行者—红外学习模块(空调遥控器)
  17. AWS S3 and Glacier
  18. 《算法竞赛入门经典》 习题 4-1 (Xiangqi, ACM/ICPC Fuzhou 2011, UVa1589,hdoj_4121)
  19. 基本数据类型 java
  20. linux禁用options方法,WEB服务器启用OPTIONS方法汇总大全

热门文章

  1. 如何恢复电脑里C盘删除的文件?
  2. Android MediaCodec硬编兼容性测试方案
  3. 计算机毕业设计ssm餐饮外卖系统v22fo系统+程序+源码+lw+远程部署
  4. 格式化字符串_列表_元组
  5. 人工智能-线性代数之矩阵篇
  6. android应用开发-从设计到实现 3-3 Sketch静态原型设计
  7. CAD打开文件一直转圈圈什么情况?如何能彻底解决?
  8. 团体无线心理测评系统:心理健康评估、抑郁筛查、危机预警、问卷调查、物联网测评
  9. 百度地图4 从0开始
  10. [转]禁止迅雷极速版强制升级方法