9.3.2 beautifulsoup4库标准选择器
1.find_all()方法
当需要列出标签对应的所有内容或者需要找到第一个标签时,要用BeautifulSoup中的find_all()和find()方法。两个方法会遍历整个HTML文档,按照条件返回标签内容。格式如下:
功能:搜索当前标签的所有子节点,并判断是否符合过滤器的条件。将符合条件的标签以列表类型返回。
·name:按照Tag标签名字检索,名字用字符串形式表示,例如'div'、'li'。
·attrs:按照Tag标签属性值检索,需要列出属性名称和值,采用JSON表示。
·recursive:设置查找层次,只查找当前标签下一层时使用recursive=False。
·string:按照关键字检索string属性内容,采用string=开始。
·limit:返回结果的个数,默认返回全部结果。
例如,想要获取所有的<a>标签,代码如下:
使用attrs参数定义一个字典,可以搜索包含特殊属性的标签,例如,使用attrs属性定位第三个<a>标签,输出第三个标签的内容:
使用string指定标签内容检索,可以结合正则表达式库进行字符匹配。需要先将正则表达式库导入,例如:
BeautifulSoup的find_all()方法可以根据标签名字、标签属性和内容检索并返回标签列表,通过片段字符串检索时可以结合正则表达式re函数库,re是Python的标准库,可以直接用import re导入。使用re.compile('百度')对包含字符串'百度'的标签内容进行检索。当对标签属性进行检索时,属性和对应的值则采用JSON格式,如'scr':re.compile('百度')。
2.find()方法
除了find_all()方法,BeautifulSoup还提供了一个find()方法,它们的区别在于前者返回全部的结果,后者只返回找到的第一个结果。find_all()返回的结果可能有多个,采用列表形式,find()只有一个返回结果,采用字符串形式。
3.get_text()方法
如果只想得到标签中包含的文本内容,可以用get_text()方法,这个方法获取标签中包含的所有文本内容,包括子孙节点中的文本内容,并将结果以字符串形式返回。