Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性。

BeautifulSoup的安装

在python3中,可以利用 pip或者 easy_install来安装

easy_install beautifulsoup4
pip install beautifulsoup4

安装完成后,尝试包含库运行看是否安装成功

from bs4 import BeautifulSoup

若没有报错,则说明库已正常安装完成。

创建 Beautiful Soup 对象

首先通过requests向网页发送请求,将一段文档传入 BeautifulSoup 的构造方法,就能得到一个文档对象。BeautifulSoup 构造方法的第二个参数为文档解析器,若不传入该参数,BeautifulSoup会自行选择最合适的解析器来解析文档,不过会有警告提示。

根据不同网页的编码特点,需要在beautifulsoup解析网页时指定编码:当html为其他类型编码(非utf-8和asc ii),比如GB2312的话,则需要指定相应的字符编码,BeautifulSoup才能正确解析。如代码所示,其中url为要访问网站的地址

import requests
from bs4 import BeautifulSoup

res = requests.get(url)
res.encoding = "gb2313"
soup = BeautifulSoup(res.text,"lxml")

CSS选择器

在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list.

通过标签名查找

print(soup.select('title')) 

通过类名查找

print soup.select('.sister')

通过 id 名查找

代码示例

print(soup.select('#link1'))

组合查找

组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如:查找 p 标签中,id 等于 link1的内容,二者需要用空格分开。代码示例:

print(soup.select('p #link1'))

直接子标签查找

print(soup.select("head > title"))

属性查找

查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。代码示例:

print(soup.select('a[href="http://example.com/elsie"]'))

print(soup.select('a[class="sister"]'))

beautifulsoup的具体的使用可以找一个爬虫项目练习一下。可以参考往期文章

python学习之图片爬虫

python学习之爬取电影天堂电影信息

python爬取英雄联盟所有英雄皮肤海报