Beautiful Suup4 学习
官方的中文帮助文档: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
示例html代码:
1 | html_doc = """ |
结构化数据:
简单的浏览结构化数据的方法
1 | soup.prettify() #得到一个按照标准缩进格式结构输出的BeauitfulSoup对象 |
从文档中找到所有标签的链接:
1 | for link in soup.find_all('a'): |
从文档中获取所有文字内容:
1 | soup.get_text() |
搜索文档树:
Beautiful Soup中主要使用的搜索方法有2个:find()和find_all()
filter过滤器,最常用到的过滤器主要有三种类型:字符串,正则表达式和列表
字符串 最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的标签:
1 | soup.find_all('b') # [<b>The Dormouse's story</b>] |
如果传入字节码参数,Beautiful Soup会当作UTF-8编码,可以传入一段Unicode 编码来避免Beautiful Soup解析编码出错。
正则表达式 调用re.compile(正则表达式)对象即可在Beautiful Soup中运用正则表达式来筛选所需数据。
1 | import re |
列表 如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有标签和标签:
1 | soup.find_all(["a", "b"]) |
find_all() find_all( name , attrs , recursive , text , **kwargs )
注意:按照CSS类名搜索tag的功能非常实用,但标识CSS类名的关键字 class
在Python中是保留字,使用 class
做参数会导致语法错误.从Beautiful Soup的4.1.1版本开始,可以通过 class_
参数搜索有指定CSS类名的tag
find()方法与find_all()方法大致类似,不过find只返回一个条件符合的数据,find_all则是返回全部。