在之前的实例中,我们都是用正则表达式来提取我们想要的信息,尤其是在上一节,我们可能写了一个比较长的正则表达式,那有没有更加方便的方式以供我们提取信息呢?当然,BeautifulSoup就是一个很好的工具。
牛刀小试
为了让大家对BeautifulSoup的方便有个感性的认识,直接上代码比较。以下是爬取豆瓣电影Top250的代码:
下面是使用BeautifulSoup的代码:
以下为运行结果:
可以清楚地看到,这碗“靓汤”果然挺好用的!
下面简单介绍一下BeautifulSoup的使用方法。
基本使用
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
安装
打开命令行工具,输入 即可安装。
安装解析器
BeautifulSoup除了支持Python标准库中的HTML解析器,还支持一些第三方的解析器。可以使用 命令安装。
如何使用
将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄.如演示代码中的 。我们指定使用 解析器解析文档,Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构。
BeautifulSoup官方文档中有很多详细的资料,这里,只介绍一个搜索文档树的方法 和 。
find_all()
该方法搜索出符合过滤器条件的元素,查找到想要查找的文档内容。过滤器有很多种,逐一介绍:以爱丽丝文档作为例子,
字符串
最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容,下面的例子用于查找文档中所有的 标签:
正则表达式
如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 来匹配内容.下面例子中找出所有以b开头的标签,这表示 和 标签都应该被找到:
列表
如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有 标签和 标签:
True
可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串
方法
如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数 ,如果这个方法返回 表示当前元素匹配并且被找到,如果不是则反回
下面方法校验了当前元素,如果包含 属性却不包含 属性,那么将返回
将这个方法作为参数传入 方法,将得到所有 标签:
返回结果中只有 标签没有 标签,因为 标签还定义了”id”,没有返回 和 ,因为 和 中没有定义” ”属性.
CSS选择器
BeautifulSoup支持大部分的CSS选择器 , 在 Tag或 BeautifulSoup对象的 .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到tag:
通过tag标签逐层查找:
更多CSS选择器语法,查看http://www.w3school.com.cn/css/cssselectortype.asp。
以上内容只是官方文档中的一小部分内容,详情请查看:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#
小技巧
选择 ,我们就把元素的CSS选择器复制下来了。
以上,衷心感谢大家的关注!
领取专属 10元无门槛券
私享最新 技术干货