Python Beautifulsoup 选择器

本文介绍BeautifulSoup的基本用法,包括节点选择器、关联选择器及CSS选择器等,并演示了如何利用这些工具从网页中提取所需的数据。
部署运行你感兴趣的模型镜像

Beautifulsoup 选择器

节点选择器:

选取元素的方法:

  • 实例化beautifulsoup对象后 在对象后加上标签名即可 例如:soup.title
  • 获取到的节点是tag对象
  • 当有多个相同节点是,只会返回第一个节点

节点选择器嵌套选择的方法:
soup.tag.tag
在tag类型的基础上再次选择得到的依旧是tag类型

关联选择的方法:
1.子节点 contents,children
2.子孙节点 descendants
3.父节点 parent
4.祖先节点 parents
5.兄弟节点 next_sblings previous_sblings previous_sbling next_sbling

from bs4 import BeautifulSoup
import bs4
import requests
url='https://www.baidu.com/'
html=requests.get(url)
html.encoding='utf-8'
html=html.text
print(html)
#传入参数,实例化对象
soup=BeautifulSoup(html,'lxml')
#定位元素title
print(soup.title)
#查看获取的结果类型     tag对象
print(type(soup.title))
#当html中有多个相同节点时 只会提取第一个节点
print(soup.a)


#节点选择器 提取信息 例如下方 在tag标签后加 name 返回标签名:a
print(soup.a.name)
#获取属性 在tag对象后加上attrs 返回一个带有属性的字典
print(soup.a.attrs)
print(soup.a.attrs['name'])
#获取tag内容 soup.tag.string 例子如下
print(soup.a.string)


html=requests.get('http://stu.nuist.edu.cn/LOGIN.ASPX')
soup=BeautifulSoup(html.text,'lxml')
#嵌套选择   获取 tr节点的子节点td里的内容    soup.tag.tag
print(soup.tr.td.string)


#关联选择方法:

#子节点 contents  children
# 第一种contents返回列表
# 第二种children返回生成器
#不返回子孙节点
for i in soup.table.contents :
    print(i)
    print(type(i))
    print('='*50)
tables=soup.table.children
    #children 返回生成器 使用for循环  enumerate枚举便利
for i,child in enumerate(soup.table.children):
    if type(child)==bs4.element.NavigableString:
        continue
    print(i)
    print('='*50)
    print(type(child))
#父节点 parent 返回的就是一个节点
    #获取 td节点的父节点  tr 节点
print(soup.td.parent)
print('='*50)

#祖先节点 parents  返回的是一个生成器
    #获取td节点的祖先节点
td=soup.td.parents
for i in enumerate(td):
    print(i)
    print('='*50)

# 兄弟节点
    #next_sbling 后面一个节点
    #next_sblings
    #previous_sbling 前面一个节点
    #previous_sblings 前面所有节点

CSS选择器:

soup.select()
   1. id选择器需要使用#来定位元素 例如 获取第一个ul节点 他的id是list-1 则id选择器为 #list—1
   2. 类选择器需要使用.来定位元素 例如 获取所有的ul 他们都有类list  则类选择器为 .list
   3. 标签选择器 直接使用标签名来获取
   4. 混合使用 每一个选择器中间空格
   5. css嵌套选择与节点选择器的嵌套选择是一样的 在tag类型的基础上再次选择依旧是tag类型
   6. css选择器获取属性的方法与之前的节点选择器获取属性的方法一样,使用attrs属性来获取
   7. css选择器获取文本的方法依旧和节点选择器一样,使用string和strings属性来获取 strings获取当前及子孙节点的文本
import requests
from bs4 import BeautifulSoup
html=requests.get('http://stu.nuist.edu.cn/LOGIN.ASPX')
soup=BeautifulSoup(html.text,'lxml')

#标签选择 直接写标签名 返回列表
print(soup.select('td'))
#类选择   使用.来定位元素
# print(soup.select())

#id选择器使用#来定位元素

#混合选择器 混合使用 每一个选择器中间空格
print(soup.select('tr td'))

print(soup.select('#userbh'))

方法选择器:

使用 soup.findall(),soup.find() 通过传入参数来进行精准定位
find_all(),find(),find_parents(),find_parent(),find_next_siblings(),find_next_sibing(),find_previous_sibing(),find_previous_sibings(),find_all_next(),find_next(),find_all_previous(),find_previous()
以上方法的参数都是类似的:
name:传入字符串参数 即标签名 可以传入字符串 正则表达式 列表 True
attrs:
recursive
text
**kwargs

from bs4 import BeautifulSoup
import requests
html=requests.get('http://stu.nuist.edu.cn/LOGIN.ASPX')
soup=BeautifulSoup(html.text,'lxml')

#find_all 方法 搜索当前节点的所有符合条件的节点
#find_all(name,attrs,recursive,text,**kwargs)
'''
name:传入字符串参数 即标签名  可以传入字符串 正则表达式 列表 True
attrs
recursive
text
**kwargs
'''
#  查找所有td标签节点
print(soup.findAll('td'))

#attrs参数 接受含有接受的属性值的标签
#参数形式为字典:
print(soup.findAll(attrs={'name':'save2','type':'button'}))

# **kwargs参数 接受常用的属性参数 如id class 与attrs类似
#参数形式 为   变量赋值的形式   如下
print(soup.findAll(id='save2',type='button'))
#注意:   class  是python中的一个关键字  所以在使用的时候需要加一个下划线 即 class_='element'

#text参数 查询含有接受文本的标签 参数形式 字符串
print(soup.find(text='用户名:').parent)

#limit参数 限制返回结果的数量 参数形式为整数

#recursive参数  决定是否获取子孙节点  默认为:True

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丨水木旦丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值