BeautifulSoup 是 python 用来解析爬取的网页源代码的一个库,因其码的简洁性,因此应用得比较多。对于解析高度结构化的HTML,相比于正则表达式,用 beautifulsoup 能更快速便捷地进行解析和提取。
BeautifulSoup 安装和导入
安装BeautifulSoup库,如果是在pycharm中的话就用file->settings->project->project interpreter,然后点击左下角的加号搜索 BeautifulSoup4,点击安装库即可。
或者是在python安装目录下的 Scripts,在地址栏输入 cmd 或者是 shift 加右键打开 powershell,拖动 pip.exe 到窗口中,再加上 install beautifulsoup4,回车即可。(也不一定要在这个目录下面运行,不过得配置好环境变量,环境变量其实就是在电脑的任意位置,如果命令不在当前目录下能运行,就会自动搜索环境变量中的地址)
这里是已经安装好的
导入库的代码也有要注意的地方,就是导入的库包,用的是 eautifulsoup4的缩写。
from bs4 import BeautifulSoup
beautifulsoup解析和提取源代码的常用方法
我们以如下的源代码为例进行介绍。
res =
我是一级标题我是一级小标题文本内容
网址名称1.获取特定标签的内容
首先导入 beautifulsoup 方法,然后设置 html.parser HTML解析器。接着用解析器对象的 select 方法选取标签名为输入的参数的内容(注意:最后获取的结果是个列表)。
from bs4 import BeautifulSoupsoup = BeautifulSoup(res,html.parser)title = soup.select(h1)print(title)
输出结果为:[
我是一级标题,我是一级小标题]想要获取这些结果中,除了头尾标签的中间的文本内容,可以把列表中的元素拿出来然后加上.text 即可。
2.获取特定clss属性的内容
如果要获取特定class属性的内容,就需要把解析器对象传入的参数写为:.class参数值,如下,我们要提取网页代码中的class属性为 title 的内容。
from bs4 import BeautifulSoupsoup = BeautifulSoup(res,html.parser)title = soup.select(.title)print(title)
代码会把所有的class属性值为传入参数的内容都找出来,所以这个方法得结合前面找特定标签内容的方法结合起来,就能具体到某一类内容下,的某一属性值对应的方法。
特别的,id 属性的查找用# 来声明,如下,找到id属性为 title 的内容:
data = soup.select(#title)
3.获取内容中的网址
前面说了获取含标签的内容,以及如何提取内容中不含标签的部分,而实际中有些信息是在标签里面的,比如,链接信息,那我们怎么去除文本内容只保留标签内容中的网址呢?用的是返回内容[href],就是在返回的内容后加上[href]索引。
from bs4 import BeautifulSoupsoup = BeautifulSoup(res,html.parser)title = soup.select(a)print(title[][href])
注意:解析器返回的对象是一个列表,列表里面的对象才具有”href”这个参数,所以需要先把元素从列表中取出来。
4.多层次筛选
实际的代码常常是比较复杂的,需要的筛选条件也是多层次多条件的,有人会说,那就一层层把内容提取出来然后再筛选呗,其实 beautifulsoup 可以直接解析多层次的条件。
如:我要筛选属性值为 title 的区块代码下的 h1标签的部分,可以写为:data = soup.select(.title h1)。
只要在多个条件之间用空格隔开就好。同理,上面三个常用的解析函数可以灵活配合使用。
熟练掌握以上的技巧,就相当于是成功进入beautifulsoup的世界啦,希望对你有帮助。
评论0