前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用BeautifulSoup解析网页内容

使用BeautifulSoup解析网页内容

作者头像
生信修炼手册
发布2020-11-09 11:42:22
2.9K0
发布2020-11-09 11:42:22
举报
文章被收录于专栏:生信修炼手册

BeautifulSoup模块用于解析html和xml文档中的内容,相比正则表达式,其更好的利用了html这种结构性文档的树状结构,解析起来更加方便。

解析的第一步,是构建一个BeautifulSoup对象,基本用法如下

代码语言:javascript
复制
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html_doc, 'html.parser')

第二个参数表示解析器,BeautifulSoup支持以下多种解释器,图示如下

在实际操作中,推荐使用lxm解析器,速度快而且稳定。解析完成后,就得到了一个文档树,我们可以通过这个文档树来快速的查找位点, 其核心就是操作文档树的子节点, 也称之为tag。

1. 访问标签

通过点号操作符,可以直接访问文档中的特定标签,示例如下

代码语言:javascript
复制
>>> soup = BeautifulSoup(html_doc, 'lxml')
>>> soup.head
<head><title>The Dormouse's story</title></head>
>>> soup.head.title
<title>The Dormouse's story</title>
>>> soup.a
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

这样的方式每次只会返回文档中的第一个标签,对于多个标签,则通过find_all方法返回多个标签构成的列表,示例如下

代码语言:javascript
复制
>>> soup.find_all('a')
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
>>> soup.find_all('a')[0]
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

还可以在find方法中添加过滤条件,更加精确的定位元素,示例如下

代码语言:javascript
复制
# 通过text进行筛选
>>> soup.find_all('a', text='Elsie')
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
# 通过属性和值来进行筛选
>>> soup.find_all('a', attrs={'id':'link1'})
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
# 上述写法的简便写法,只适合部分属性
>>> soup.find_all('a', id='link1')
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
```
# 使用CSS选择器
# 注意class后面加下划线
>>> soup.find_all('p', class_='title')
[<p class="title"><b>The Dormouse's story</b></p>]

2. 访问标签内容和属性

通过name和string可以访问标签的名字和内容,通过get和中括号操作符则可以访问标签中的属性和值

代码语言:javascript
复制
>>> soup.a
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
>>> soup.a['class']
['sister']
>>> soup.a.get('class')
['sister']
>>> soup.a.name
'a'
>>> soup.a.string
'Elsie'

结合定位元素和访问属性的方法,可以方便快捷的提取对应元素,提高解析html的便利性。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档