一言
要学会游泳,就必须先下水。——弗拉基米尔·伊里奇·列宁
BeautifulSoup中find_all()和select()的区别
本文最后更新于 376 天前,其中的信息可能已经有所发展或是发生改变。

省流:select()更简洁,但是find_all使用更广,可调的参数也更多。

  在学习bs4的过程中,发现有的文章教程是使用find_all(),有的使用select(),二者在功能上很像,而且都是返回页面中所有,所以有了一个疑问,二者有什么区别呢?。
  搜索了之后,有一篇文章将官方文档的解释扒了下来:
具体链接:find_all()和 select()的区别
具体就是:
select()是使用CSS选择器的语法找到tag 如:

soup.select("title") 
# [<title>The Dormouse's story</title>]

通过tag标签逐层查找:
soup.select("body a") #body子孙标签中的a标签
# [<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>]

找到某个tag标签下的直接子标签
soup.select("p > a:nth-of-type(2)")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

find_all()方法搜索当前tag的所有tag子孙节点,并判断是否符合过滤器的条件

soup.find_all("title")
# [<title>The Dormouse's story</title>]

css_soup.find_all("p", class_="body")
# [<p class="body strikeout"></p>]

反正我现在还看不懂,总之就是二者的底层实现不同。
但是功能是相同的。

后来找了半天,具体功能实现上也没啥区别,但是二者的使用方式不太一样:
find_all()方法

'''
find_all(name, attrs, recursive, string, limit, **kwargs)
@PARAMS:
    name: 查找的value,可以是string,list,function,真值或者re正则表达式
    attrs: 查找的value的一些属性,class等。
    recursive: 是否递归查找子类,bool类型
    string: 使用此参数,查找结果为string类型;如果和name搭配,就是查找符合name的包含string的结果。
    limit: 查找的value的个数
    **kwargs: 其他一些参数
'''

select()方法

'''
BeautifulSoup支持最常用的CSS选择器. 将字符串str传递到标签对象或者BeautifulSoup对象自身的select()方法中.
'''
soup.select("p.strikeout.body")

在具体的使用起来,就是一些情况下,select()更简洁:
比如多层次筛选:
搜索p标签下属性为info的标签
find_all():

p1=soup.find_all('p',class_='info')#或者
soup.find_all("p", attrs={"class": "info"})

select()方法

p2=soup.select('p.info')

总之
select()更简洁,但是find_all使用更广,可调的参数也更多。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇