目录
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<p class='next'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
# 1,导包
from bs4 import BeautifulSoup
#,2,实例化对象
soup = BeautifulSoup(html, 'lxml') # 参数1:要解析的内容 参数2:解析器
# print(soup.prettify()) # 代码补全
# 通过标签选取,会返回包含标签本身及其里面的所有内容
print(soup.head) # 包含head标签在内的所有内容
print(soup.p) # 返回匹配的第一个结果
# .string是属性,作用是获取字符串文本
print(soup.html.head.title.string)
print(soup.title.string)
'''
<head>
<title>The Dormouse's story</title>
</head>
<p class="next">text</p>
The Dormouse's story
The Dormouse's story
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<p class='next'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.title.name) # 结果为标签本身名称 --> title
print(soup.p.name) # --> 获取标签名
'''
title
p
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
# 1,导包
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.p.attrs['name'])# 获取p标签name属性的属性值
print(soup.a.attrs['href']) # 获取p标签id属性的属性值
print(soup.p['id']) #第二种写法
print(soup.p['class']) # 以列表得形式保存
print(soup.a['href']) # 也是只返回第一个值
'''
123
/dhj
money
['next']
/dhj
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
# 标签选择器只能拿到部分内容 ,不能拿到所有,那如何解决??
# print(soup.p.a)
# .contents属性可以将标签的子节点以列表的形式输出
# print(soup.ul.contents) # a是p的子节点,获取P标签所有子节点内容 返回一个list
for i in soup.ul.contents:
print(i)
'''
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.p.descendants) # 获取子孙节点 生成器本身是一种特殊的迭代器
'''
<generator object Tag.descendants at 0x000001C2B238C0C8>
'''
# enumerate() 函数用于将一个可遍历的数据对象添加一个索引序列
# 同时列出数据和数据下标值,一般用在 for 循环当中
for i,child in enumerate(soup.body.descendants):
print(i,child)
'''
0
1 <div class="menu-list">
<a href="/dhj"></a>
<p class="next" id="money" name="123">text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
</ul>
</div>
2
3 <a href="/dhj"></a>
4
5 <p class="next" id="money" name="123">text</p>
6 text
7
8 <ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
</ul>
9
10 <li class="navitem-index current active"><a href="/">首页</a></li>
11 <a href="/">首页</a>
12 首页
13
14 <li><a href="/guonei">国内</a></li>
15 <a href="/guonei">国内</a>
16 国内
17
18 <li><a href="/guoji">国际</a></li>
19 <a href="/guoji">国际</a>
20 国际
21
22 <li><a href="/mil">军事</a></li>
23 <a href="/mil">军事</a>
24 军事
25
26 <li><a href="/finance">财经</a></li>
27 <a href="/finance">财经</a>
28 财经
29
30 <li><a href="/ent">娱乐</a></li>
31 <a href="/ent">娱乐</a>
32 娱乐
33
34 <li><a href="/sports">体育</a></li>
35 <a href="/sports">体育</a>
36 体育
37
38 <li><a href="/internet">互联网</a></li>
39 <a href="/internet">互联网</a>
40 互联网
41
42 <li><a href="/tech">科技</a></li>
43 <a href="/tech">科技</a>
44 科技
45
46 <li><a href="/game">游戏</a></li>
47 <a href="/game">游戏</a>
48 游戏
49
50 <li><a href="/lady">女人</a></li>
51 <a href="/lady">女人</a>
52 女人
53
54 <li><a href="/auto">汽车</a></li>
55 <a href="/auto">汽车</a>
56 汽车
57
58 <li><a href="/house">房产</a></li>
59 <a href="/house">房产</a>
60 房产
61
62
63
'''
1..parent会把自己和父节点一同打印下来
2. .parents获取祖先节点返回生成器
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.a.parents) # parent获取父节点
print(soup.li.parent) # parent获取父节点
'''
<generator object PageElement.parents at 0x0000021B8FBDB1C8>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
</ul>
'''
.next_siblings 获取后面的兄弟节点
.previous_siblings 获取前面的兄弟节点
两者返回的都是一个生成器对象
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.a.next_siblings)
for i in soup.a.next_siblings:
print(i)# parent获取父节点
print(soup.li.previous_siblings) # parent获取父节点
for i in soup.li.previous_siblings:
print(i)
'''
<generator object PageElement.next_siblings at 0x000001E0B599C148>
<p class="next" id="money" name="123">text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
</ul>
<generator object PageElement.previous_siblings at 0x000001E0B599C148>
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all('li'))
'''
[<li class="navitem-index current active"><a href="/">首页</a></li>, <li><a href="/guonei">国内</a></li>, <li><a href="/guoji">国际</a></li>, <li><a href="/mil">军事</a></li>, <li><a href="/finance">财经</a></li>, <li><a href="/ent">娱乐</a></li>, <li><a href="/sports">体育</a></li>, <li><a href="/internet">互联网</a></li>, <li><a href="/tech">科技</a></li>, <li><a href="/game">游戏</a></li>, <li><a href="/lady">女人</a></li>, <li><a href="/auto">汽车</a></li>, <li><a href="/house">房产</a></li>]
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
n = soup.find_all('li')
for i in n:
print(i.get_text())
'''
首页
国内
国际
军事
财经
娱乐
体育
互联网
科技
游戏
女人
汽车
房产
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
n = soup.find_all('li')
for i in n:
print(i.string)
'''
首页
国内
国际
军事
财经
娱乐
体育
互联网
科技
游戏
女人
汽车
房产
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
# 特殊属性查找
# print(soup.find_all(class='element')) # 注意:错误案例
# a = soup.find_all(class_='element') # class属于Python关键字,做特殊处理 _
# print(a)
# 推荐的查找方法!!! --- 指定标签和属性
print(soup.find_all('div',{'class':'menu-list'}))
# # print('----'*10)
print(soup.find_all('p',{'name':'123'}))
'''
[<div class="menu-list">
<a href="/dhj"></a>
<p class="next" id="money" name="123">text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li><a href="/guonei">国内</a></li>
<li><a href="/guoji">国际</a></li>
<li><a href="/mil">军事</a></li>
<li><a href="/finance">财经</a></li>
<li><a href="/ent">娱乐</a></li>
<li><a href="/sports">体育</a></li>
<li><a href="/internet">互联网</a></li>
<li><a href="/tech">科技</a></li>
<li><a href="/game">游戏</a></li>
<li><a href="/lady">女人</a></li>
<li><a href="/auto">汽车</a></li>
<li><a href="/house">房产</a></li>
</ul>
</div>]
[<p class="next" id="money" name="123">text</p>]
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all(text='汽车'))
'''
['汽车']
'''
html = '''
<html>
<head>
<title>The Dormouse's story</title>
</head>
<body>
<div class="menu-list">
<a href='/dhj'></a>
<p class='next' name=123 id='money'>text</p>
<ul class="clearfix">
<li class="navitem-index current active"><a href="/">首页</a></li>
<li ><a href="/guonei">国内</a></li>
<li ><a href="/guoji">国际</a></li>
<li ><a href="/mil">军事</a></li>
<li ><a href="/finance">财经</a></li>
<li ><a href="/ent">娱乐</a></li>
<li ><a href="/sports">体育</a></li>
<li ><a href="/internet">互联网</a></li>
<li ><a href="/tech">科技</a></li>
<li ><a href="/game">游戏</a></li>
<li ><a href="/lady">女人</a></li>
<li ><a href="/auto">汽车</a></li>
<li ><a href="/house">房产</a></li>
</ul>
</div>
</body>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find('li'))
'''
<li class="navitem-index current active"><a href="/">首页</a></li>
'''
1,类别选择器 -- class
2,标签选择器 -- <p></p>
3,ID选择器 -- id
详情了解:https://baike.baidu.com/item/css%E9%80%89%E6%8B%A9%E5%99%A8/2819686?fr=aladdin
注意:
1,用CSS选择器时,标签名不加任何修饰,class类名前加. , id名前加#
2,用到的方法是soup.select(),返回类型是list
3,多个过滤条件需要用空格隔开,严格遵守从前往后逐层筛选