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的具体的使用可以找一个爬虫项目练习一下。可以参考往期文章