beautifulsoup模块详解

Python 中对于接口返回xml、html数据 ,可以使用beautifulsoup来处理

# 使用点语法来查找标签   要注意 查找范围是全文 只能找到哦啊第一个名字匹配的标签
 tag = soup.a
 print(tag.attrs.get("href"))

# 嵌套选择
 print(soup.p.b.text)

# 获取标签p的子节点
 print(list(soup.p.children))
 for i in list(soup.p.children):  # 返回一个迭代器
     print(i)
#
print(soup.p.contents)
 for i in soup.head.contents: # 返回一个列表
     print(i)

# 获取标签p的父标签
 print(soup.p.parent)

# 获取标签为p的所有的父辈标签
 print(list(soup.p.parents))
 for i in soup.p.parents:
    print(i.name)

print(soup.p.contents)

print(list(soup.p.descendants))

# 获取标签p的所有子孙标签 不同之处在于 会把所有子孙标签全部拆出来 包括文本内容

for i in soup.p.descendants:
    print(i.name) # 文本内容没有name属性

# 获取标签a的兄弟标签 文本也被当做是一个节点
# 下一个兄弟
 print(soup.a.next_sibling.next_sibling)
# 获取标签a之后的兄弟们
 print(list(soup.a.next_siblings))

# 获取标签a的上一个兄弟
 print(soup.a.previous_sibling)
# 获取标签a之前的兄弟们
 print(list(soup.a.previous_siblings))
 过滤器
 find_all查找所有匹配的标签
# 按照名字匹配   可以传一个名字 或 一个列表
 print(soup.find_all("a"))
 print(soup.find_all(["a","p"]))

# 找id 为link1 的a标签
 print(soup.find_all("a",attrs={"id":"link1"}))
 print(soup.find_all("a",attrs={"class":"sister"})) print(soup.find_all(name="a",id="link1"))
# 注意如果要按照条件为class来查找 需要使用class_ 因为class是关键字
# 多个类名加空隔即可
 print(soup.find_all(name="a",class_="sister brother")) # 只能找到类名完全匹配的如:<a class="sister brother">
 print(soup.find_all(name="a",class_="sister")) #只要类名带有sister就能找到
# 如果属性带有特殊符号 可以把条件装在attrs中
 print(soup.find_all(name="a",attrs={"data-a":"sister"}))

# 指定文本
 print(soup.find_all(name="a",text="Elsie"))

# 过滤器
# 标签名称中带有b字母的标签
 print(soup.find_all(name="b"))

 c = re.compile("b")
# # 正则匹配
 print(soup.find_all(name=c))

# 数组
 print(soup.find_all(name=["body","a"]))
# True 表示所有标签
 print(soup.find_all(True))
# 所有具备id属性的标签
 print(soup.find_all(id=True))

# 方法匹配(写个函数来过滤)
def myFilter(tag):# 必须只能有一个参数 参数表示要过滤的标签
    return tag.name == "a" and tag.text != "Elsie" and tag.has_attr("id")

 print(soup.find_all(myFilter,limit=1))
 print(soup.find_all(name="a"))

# 过滤  可以是数组   可以是一个 re   可以是一个函数   可以是True

# 使用方式和find_all 相同
 print(soup.find("a"))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值