ITPub博客

首页 > > > Python初步学习,认识BeautifulSoup

Python初步学习,认识BeautifulSoup

作者:25minutes 时间:2019-08-23 09:31:47 0 删除 编辑

BeautifulSoup将HTML转成树形结构,树的每个节点都是Python的对象。

? ? ? ? ? ?我们知道HTML是标记类的语言,代码通过标签对开始,标签对结束来实现, 而BeautifulSoup就是基于这样的标签,来构建一个“标签树”,从而可以便利地解析、遍历、维护“标签树”的功能库。


? ? ? ? ? ? ? 在BeautifulSoup提供了多种解析器,原理都是通过构建标签树来实现对标记类语言的解析、遍历和维护,只要Python安装对应的库就可以使用了。

? ? ? ? ? ? ? 再来看看BeautifulSoup提供的基本元素,理解这些之后,我们就能用BeautifulSoup来操作HTML的内容啦,这里的comment是一个特殊的NavigableString对象,只是输出的部分不包括注释符号。

import requests

from bs4 import BeautifulSoup

r = requests.get("http://python123.io/ws/demo.html")

# 现在的dom节点不会成树状图的

demo = r.text

# 使用html.parser,要安装bs4库,给demo排好序成一个有节点的树状图

soup = BeautifulSoup(demo, "html.parser")

# 排好序之后 只要用prettify()这个方法就能打印出HTML的标准格式

print(soup.prettify())

# 获取dom元素titile的内容包括title标签也会打印出来

print(soup.title)

# 获取dom元素titile的字符串内容

print(soup.title.string)

# 打印的结果

The demo python introduces several python courses.

Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:

Basic Python

and

Advanced Python

.

?

BeautifulSoup中HTML内容的基本遍历方法:

? ? ? ? ? ? ?我们先来看HTML标签树及其基本的遍历方法,其中包括: 下行遍历 、 上行遍历和 平行遍历 ,我们可以从下图中理解三种遍历的基本思想。

? ? ? ? ? ? 我们先来看看下行遍历的基本元属性,其中.contents和.children只获得当前节点的下一层节点的信息,而.descendants可以获得一个节点后续的所有节点的信息。

我们还是用上面的那个soup,现在用代码来实践一下:

soup.head

# 输出结果是:

我们会发现返回结果被保存到了一个列表里,而.children和.descendants用于遍历则不会保存到列表中,请多加注意,所以,

# 我们可以用for in来循环其中的值,如:

for i in soup.head.descendants:

print(i)

# 输出是:

This is a python demo page

# 我们可以发现字符内容也被当做一个子节点。

上行遍历,上行遍历包括以下的属性,其基本的内容和上行遍历一致:

我们可以用以下代码进行简单的测试:

for parent in soup.a.parents:

if parent is None:

print(parent)

else:

print(parent.name)

# 输出结果是:

p

body

html

[document]

这里值得注意的是,当遍历到最上层的parent, 而这个parent本身没有parent,这时候则要进行一个判断:parent是否为空。

最后来看看平行遍历:

其基本的使用与上行下行思想基本一致,但值得注意的是,平行遍历是要求在同一个父节点的各个节点之间的遍历。

这里主要展示用for in来遍历后续节点,如下:

for sibling in soup.a.next_siblings:

print(sibling)

输出结果是:

?

and?

Advanced Python

.

这里我们知道, 平行遍历的节点也可能是string。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4328/viewspace-3126237/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    336
  • 访问量
    14906