3.点属性、find、find_all
我们称一个Tag的子节点指其包含的多个字符串或其他的Tag,如上篇1中的例子(不清楚的可以 点此查看),我们可以使用获取tag的name的方法来获取数据,如:
soup.head
# <head><title>The Dormouse's story</title></head>
这种点属性操作可以进行多次操作调用,如:
soup.body.b
# <b>The Dormouse's story</b>
通过点属性的方法只可以获取当前名字的第一个tag值,其用法类似于find,如下:
soup.a
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
soup.find('a')
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
当然了,有只能查第一个的,就有能查全部的,使用find_all,其返回值是一个列表,用法如下:
soup.find_all('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>]
有么有查找特定的呢?当然是有的了,接下来我们看有条件限制的
4.带更多参数的find_all
这是官方文档给出的find_all方法的所有参数:find_all( name , attrs , recursive , string , **kwargs ),具体参数介绍及使用可查看官方文档
在此我们仅给出部分常用的参数示例
- 示例一:如上,我们使用find_all,但是加入limit参数“limit=2”,返回结果如下:
soup.find_all("a", limit=2)
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
可以看出,仅仅返回了两个,这是因为我们添加了限制返回数量为2。
- 示例二:使用find_all,加入keyword参数,如下:
soup.find_all(id='link2')
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]
以上为查找id为‘link2’的tag并返回,我们亦可使用下面的形式查找含有id属性的tag:
soup.find_all(id=True)
# [<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>]
- 示例三:加入css类进行搜索,这在BeautifulSoup4.1.1版本才开始,指定class_参数搜索,如下:
soup.find_all("a", class_="sister")
# [<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>]
文中所举示例并不完全,还有更多的方法和参数使用,如加入正则匹配、字符串等,欲知更多内容还是要详细阅读官方文档介绍,本文仅列举常用的几种。