find_all()和 select()的区别

在soup中,我们通常都是使用lxml去解析我们得到的源码:

soup = BeautifulSoup(wb_data.text,"lxml")

之后我们通常使用select()或find_all() 去得到我们想要的节点。 那么什么时候用select,又是什么时候用find_all呢?

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>]

select()和find_all(),我们平时的爬虫程序,哪个方便就用哪个吧。 具体可看官方文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

results matching ""

    No results matching ""