ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BeautifulSoup使用学习一

2021-07-07 12:00:59  阅读:170  来源: 互联网

标签:lxml 获取 BeautifulSoup 学习 soup 使用 print 节点


  • 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分别获取下一个和上一个兄弟元素生成器

 

标签:lxml,获取,BeautifulSoup,学习,soup,使用,print,节点
来源: https://www.cnblogs.com/dogover/p/14980939.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有