1.导入模块
from bs4 import BeautifulSoup
- 1
2.解析获取到的网页内容
文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码。
可以打印soup对象的内容,格式化输出:print soup.prettify()
url_str = getHTMLText(url)
soup = BeautifulSoup(url_str,'html.parser')
- 1
- 2
3.基本使用方法
bs4 将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是python的对象。
根据标签查找(type:bs4_obj)
head = soup.head
<head>
<meta content="text/html;charset=utf-8" http-equiv="content-type"/>
<meta content="IE=Edge" http-equiv="X-UA-Compatible"/>
<meta content="always" name="referrer"/>
<link href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
<title>
百度一下,你就知道
</title>
</head>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
获取属性
title = head.title # 在soup中获取第一个符合要求的标记
# <title>百度一下,你就知道</title>
title_str = name.string # 获取标签内部的文字
# 百度一下,你就知道
meta = head.meta
# <meta content="text/html;charset=utf-8" http-equiv="content-type"/>
content = meta.get('content') # 获取meta中第一个属性
content = meta['content']
# text/html;charset=utf-8
content = meta.attrs # 获取meta中所有属性
# {'http-equiv': 'content-type', 'content': 'text/html;charset=utf-8'}
meta.name = 'hi' # 修改标签的name
meta['content'] = 'hello world' # 修改标签的属性和内容
print(meta)
# <hi content="hello world" http-equiv="content-type"/>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
获取文本内容
content = head.contents # 返回以head下各标签为元素的列表
[<meta content="text/html;charset=utf-8" http-equiv="content-type"/>, <meta content="IE=Edge" http-equiv="X-UA-Compatible"/>, <meta content="always" name="referrer"/>, <link href="http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>, <title>百度一下,你就知道</title>]
print(content[0])
# <meta content="text/html;charset=utf-8" http-equiv="content-type"/>
text = head.get_text() # 获取head标签内部的文字
# 百度一下,你就知道
print(type(head.title.string)) # bs4.element.NavigableString
if type(head.title.string)== bs4.element.NavigableString: # 过滤注释内容
print('这是注释内容')
else:
print('这不是注释')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
获取子孙节点(tpye:generator)
descendants = soup.p.descendants
- 1
使用语法
print(bs.a)#去标签
print(bs.a['href'])#取标签属性值
print(bs.a.string)#取标签内容
print(bs.body.children)#[<a></a>,<a>,<h1>]
print(bs.a.name) # 获取a标签的名称
print(bs.a.get("href"))# 查找第一个a标签的href的属性
print(bs.a.attrs)# 获取a标签的所有的属性,返回一个字典
print(bs.find("a"))# 查找第一个a标签
print(bs.find_all("a"))# 查找所有的a标签
print(bs.find_all(id="a1"))# 查找所有的的id为a1的标签
print(bs.find_all(class_="sistex"))# 这里需要注意,如果需要通过class去查找,则需要一个下划线
print(bs.find_all(["a", "p", "br"]))# 查找所有的啊标签,p标签和br标签
bs.find("a").attrs["class"] = "2b"#修改某个标签的属性值
del bs.find(id="a1").attrs["class"]# 删除某个标签的class属性
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14