BeautifulSoup使用学习一

  • BeautifulSoup是什么?

BeautifulSoup是python 的HTML和XML的解析库,可以方便的从网页中提取数据

 

  • 准备工作!!

正确安装好BeautifulSoup和lxml

 

  • 节点选择器

直接调用节点名称可以选择节点元素,再调用string属性就可以得到节点内文本(这种选择方式速度快,适用于单个节点)

栗子:soup.p.string  获取到的是p标签的文本内容

(多个节点时,这种只能获取到第一个节点内容)

  • 提取信息

获取节点名称

利用name属性获取节点名称

from bs4 import BeautifulSoup

soup = BeautifulSoup('<p>Study</p>','lxml')

# 获取节点名称
print(soup.p.name)
# 获取节点文本值
print(soup.p.string)

获取节点属性

利用attrs获取节点所有属性

from bs4 import BeautifulSoup

soup = BeautifulSoup('<p class="test" id="abc" name="efg">Study</p>','lxml')

# 获取节点名称
print(soup.p.name)
# 获取节点文本值
print(soup.p.string)
# 获取节点属性
print(soup.p.attrs)
# 获取某个节点属性值
print(soup.p.attrs['name'])

嵌套选择

from bs4 import BeautifulSoup

soup = BeautifulSoup('<html class="test" id="abc" name="efg"><head><title>Study</title></head></html>','lxml')

print(soup)
# 嵌套选择,获取节点名称
print(soup.head.title.name)
# 获取节点文本
print(soup.head.title.string)

关联选择

利用contents属性获取节点下所有直接子节点,多个返回的是直接子节点的列表

from bs4 import BeautifulSoup

html = '''
<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>错误 _ 火狐主页</title>
</head>
<body>
抱歉,页面丢失或拒绝服务,您可以访问:
<ul>
<li><a title="火狐主页" href="http://i.firefoxchina.cn/">火狐主页</a></li>
<li><a title="火狐浏览器" href="http://firefox.com.cn/">火狐浏览器</a></li>
<li><a title="火狐中文网" href="http://www.firefoxchina.cn/">火狐中文网</a></li>
</ul>
</body></html>
'''
soup = BeautifulSoup(html, 'lxml')
print(soup.ul.contents)

利用children获取节点的子孙节点,返回结果生成器类型,for循环输出

soup = BeautifulSoup(html, 'lxml')
# print(soup.ul.contents)
print(soup.ul.children)
for i, child in enumerate(soup.ul.children):
    print(i, child)

获取所有子孙节点信息,利用descendants属性

soup = BeautifulSoup(html, 'lxml')
# print(soup.ul.contents)
# print(soup.ul.children)
# for i, child in enumerate(soup.ul.children):
#     print(i, child)
print(soup.body.descendants)
for i,child in enumerate(soup.body.descendants):
    print(i,child)

父节点

利用parent获取某个节点的父节点

soup = BeautifulSoup(html, 'lxml')
print(soup.li.parent)

祖先节点

利用paraents获取某个节点的祖先节点,返回的是生成器类型

soup = BeautifulSoup(html, 'lxml')
# print(soup.li.parent)
print(soup.li.parents)
for i, parent in enumerate(soup.li.parents):
    print(i, parent)

兄弟节点

利用next_sibling和previous_sibling分别获取下一个和上一个兄弟元素,next_siblings和previous_siblings分别获取下一个和上一个兄弟元素生成器

 

上一篇:BeautifulSoup搜索文档


下一篇:bs4 & 二进制写入图片视频