bs4中BeautifulSoup基本用法

一.安装bs4模块

通过终端界面输入pip insert bs4来进行安装

二.准备工作

为了方便演示,这里提供html测试界面的代码,请将新建的html文件命名为:

测试-Beautifulsoup.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
            <ul>
      <li>张三</li>
      <li id="a3">李四</li>
      <li id="a4">王五</li>
        <a href="" id="aaa">测试1</a>
        <span>测试测试</span>
    </ul>
    <a href="" title="a1">测试2</a>
    <a href="" class="a2">测试3</a>
    </div>
    <div id="a5">
        <span>
            测试4
        </span>
    </div>
    <p id="p1" class="p1">测试5</p>
</body>
</html>

首先在新建的py文件中导入BeautifulSoup模块

from bs4 import BeautifulSoup

然后将“测试-Beautifulsoup.html”打开,通过lxml内核解析,并将返回值赋给soup

soup=BeautifulSoup(open('测试-Beautifulsoup.html', encoding='utf-8'), 'lxml')#BeautifulSoup(open(文件名),'lxml'),lxml为使用的内核

这里要注意

BeautifulSoup默认打开的文件编码格式是gbk,所以要open(文件名,encoding='utf-8')

三.基本命令

这里就直接上代码了,每条都有注释、

1.find

print(soup.find('a'))#找到的是第一个a标签
print(soup.find('a',title='a1'))#找到的是第一个a标签中带title属性且title属性为a1的
# print(soup.find('a',class='a2'))错误,无法查找是因为class在python中也是一个关键字
print(soup.find('a',class_='a2'))#找到的是第一个a标签中带class属性且class属性为a1的

2.find_all

print(soup.find_all('a'))#找到的是所有的a标签,存储为列表形式
print(soup.find_all(['a','span']))#找到的是所有的a和span标签,查找多个标签时,将其存在一个[]内
print(soup.find_all('li',limit=2))#找到的是前两个li标签,limit=多少就取多少项

3.select

print(soup.select('a'))#找到的是所有的a标签,存储为列表形式
print(soup.select('.a2'))#找到class内容为a2的标签,.代表class
print(soup.select('#a3'))#找到id内容为a3的标签,#代表id
print(soup.select('li,a'))#找到所有li标签和a标签
#属性选择器——————通过属性寻找对应的标签
print(soup.select('li[id]'))#查找到有id的li标签,存储为列表
print(soup.select('li[id="a4"]'))#查找到id属性=a4的li标签
#层级选择器——————通过层级关系寻找对应的标签
#(1)后代选择器(类似于选择父辈可以直接查询孙辈)
print(soup.select('div li'))#查询div下所有li标签,以列表形式存储,' '代表li是div的后代
#(2)子代选择器(类似于选择父辈只能查询子辈,不能跳级查询孙辈)
print(soup.select('div>ul>li'))#查询div下ul下的所有li标签,以列表形式存储,'>'代表li是ul的子代,ul是div的子代

4.节点相关

#(1)获取节点内容
obj=soup.select('#a5')#找到id内容为a5的标签,存储为列表类型
#print(obj.get_text())#通过.get_text()来获取文本内容
#上面这条直接调用会报错,是因为obj为一个列表,所以要取出列表中的字符串,才能正常运行
obj1=obj[0]
print(obj1.get_text())#通过.get_text()来获取文本内容
#如果标签对象中只有内容,那么string和get_text()都能获取到内容
#如果标签对象中除了内容还有对象,那么只有get_text()能获取到内容
print(obj1.string)

#(2)节点的属性
obj=soup.select('#p1')#找到id内容为p1的标签,存储为列表类型
obj1=obj[0]
print(obj1.name)#name返回的是标签的名字
print(obj1.attrs)#attrs是将属性值以字典形式返回

#(3)获取节点的属性
obj=soup.select('#p1')#找到id内容为p1的标签,存储为列表类型
obj1=obj[0]
print(obj1.attrs.get('class'))#因为attrs返回的是字典类型,可以用get方式
print(obj1.get['class'])
print(obj1['class'])
#以上三种方法都可以取到class的值

这些就是BeautifulSoup中的一些基本语法,下一篇将进行一个项目演示。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值