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