爬虫_014_解析_bs4【BeautifulSoup】的使用

本文介绍了BeautifulSoup和lxml作为HTML解析器的使用,包括导入本地HTML文件、查找标签、获取属性、find和find_all方法以及CSS选择器select的运用。示例展示了如何根据标签、属性和类名定位HTML元素。
摘要由CSDN通过智能技术生成

BeautifulSoup和 lxml 一样都是html的解析器,效率相比于xpath来说较低。

BeautifulSoup默认打开的编码是gbk。

<!D<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
    <ul>
        <li id="l1">zhangsan</li>
        <li id="l2">lisi</li>
        <li>wangwu</li>
        <a href="" id="" class="a2">weinianhuan</a>
    </ul>

    <a href="" title="a1">www</a>
</body>
</html>

1.导入本地html文件

soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

2.根据标签来找节点

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

print(soup.a)  # 找到的是第一个符合条件的数据
print(soup.a.attrs) # attrs返回标签的属性和其值
# <a href="" id="">weinianhuan</a>
# {'href': '', 'id': ''}

3.bs4的函数

        (1)find


from bs4 import BeautifulSoup

soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

print(soup.find('a'))  # 返回第一个符合条件的数据
# <a href="" id="">weinianhuan</a>

'''
给test.html第二个a标签里加上一个title=a1
'''
print(soup.find('a', title="a1"))
# <a href="" title="a1">www</a>

        如果要根据class的值来找标签,需要在class后加下划线【class_】 

        (2)find_all

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

print(soup.find_all('a'))  # 以列表的形式返回所有符合条件的数据
# [<a href="" id="">weinianhuan</a>, <a href="" title="a1">www</a>]

# find_all第二种用法
print(soup.find_all(['a', 'li']))  # 以列表的形式返回所有符合条件的数据
# [<li>zhangsan</li>, <li>lisi</li>, <li>wangwu</li>, <a href="" id="">weinianhuan</a>, <a href="" title="a1">www</a>]

# limit是查找的数量
print(soup.find_all('li', limit=2))
# [<li>zhangsan</li>, <li>lisi</li>]

        (3)select【使用较多】

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('test.html', encoding='utf-8'), 'lxml')

print(soup.select('a'))  # select以列表形式返回多个a标签
# [<a href="" id="">weinianhuan</a>, <a href="" title="a1">www</a>]

# 给test.html的第一个a中加上class="a2"
print(soup.select('.a2'))
# [<a class="a2" href="" id="">weinianhuan</a>]

# 给test.html的第一个li中加上id="l1"
print(soup.select('#l1'))
# [<li id="l1">zhangsan</li>]

# 再给test.html的第二个li中加上id="l2"--属性选择器
# 查找li标签中有id的标签
print(soup.select('li[id]'))
# [<li id="l1">zhangsan</li>, <li id="l2">lisi</li>]

加载服务器响应文件

soup = BeautifulSoup(response.read().decode('utf-8'), 'lxml')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值