Python BeautifulSoup4 搜索部分

BeautifulSoup 
bs4主要使用find()方法和find_all()方法来搜索文档。 
find()用来搜索单一数据,find_all()用来搜索多个数据

find_all()与find()

name –> tag名 
string –> 内容 
recursive –>是否搜索所有子孙节点 默认为true 设为false只搜索子节点

两方法用法相似这里以find_all()为例。

#搜索tag名 <title></title>
soup.find_all("title")

#关于属性
#搜索id为"link2"的标签
soup.find_all(id='link2')

#这里属性的值可以使用字符串,正则表达式 ,列表,True
soup.find_all(id=re.compile("elsie"))

#可以指定多个条件
soup.find_all(href=re.compile("elsie"), id='link1')

#对于有些不能指定的标签(data-foo)
soup.find_all(attrs={"data-foo": "value"})

#对于class -->class为python保留字使用class_
soup.find_all(class_="top")
#属性结束

#关于string(内容)
#基础 内容为'Elsie'的
soup.find_all(string="Elsie")

#内容在数组中的
soup.find_all(string=["Tillie", "Elsie", "Lacie"])

#内容匹配正则表达式的
soup.find_all(string=re.compile("Dormouse"))

#匹配函数
soup.find_all(string=is_the_only_string_within_a_tag)
#内容结束

#搜索限制
#限制搜索数量为2
soup.find_all("a", limit=2)

#只搜索直接子节点
soup.html.find_all("a", recursive=False)
#搜索限制结束
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

简写

soup.find_all("a")
#等价于
soup("a")
 
 
  • 1
  • 2
  • 3
soup.title.find_all(string=True)
#等价于
soup.title(string=True)
 
 
  • 1
  • 2
  • 3

CSS选择器

Beautiful Soup支持大部分的CSS选择器

#搜索tag为title
soup.select("title")

#通过tag标签逐层查找
soup.select("html head title")

#寻找直接子标签
soup.select("head > title")
soup.select("p > #link1")

#选择所有紧接着id为link1元素之后的class为sister的元素
soup.select("#link1 + .sister")

#选择p元素之后的每一个ul元素
soup.select("p + ul")

#同时用多种CSS选择器查询元素
soup.select("#link1,#link2")

#通过查询元素属性
soup.select('a[href="http://example.com/elsie"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

soup.select('a[href^="http://example.com/"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.select('a[href$="tillie"]')
# [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.select('a[href*=".com/el"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
#通过查询元素属性结束

#通过语言查找
soup.select('p[lang|=en]')

#查找第一个元素
soup.select_one(".sister")
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

find_其他

find_parents() 和 find_parent()

搜索当前节点的父节点

#查找一个标签a
a = soup("a", id="link1")

#查找a的父节点中的P标签
a_string.find_parent("p")
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

find_next_siblings() 和 find_next_sibling()

搜索当前节点后边解析的兄弟节点 
(可以理解为搜索当前标签下边的同级节点)

find_previous_siblings() 和 find_previous_sibling()

搜索当前节点前边解析的兄弟节点 
(可以理解为搜索当前标签上边的同级节点)

find_all_next() 和 find_next()

对当前节点之后的节点进行迭代

find_all_previous() 和 find_previous()

对当前节点之前的节点进行迭代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值