黑马程序员python基础班教程笔记:使

黑马程序员python基础班教程笔记:使
黑马程序员python基础班教程笔记:使

使? Beautiful Soup 解析数据

有的?伙伴们对写正则表达式的写法?得不熟练,没关系,我们还有?个更

强?的?具,叫Beautiful Soup,有了它我们可以很?便地提取出HTML或XML标签中的内容,实在是?便,这?节就让我们?起来感受?下Beautiful Soup的魅?

1. Beautiful Soup的简介

简单来说,Beautiful Soup是python的?个库,最主要的功能是从??抓取数据。官?解释如下:

Beautiful Soup提供?些简单的、python式的函数?来处理导航、搜

索、修改分析树等功能。它是?个?具箱,通过解析?档为?户提供需

要抓取的数据,因为简单,所以不需要多少代码就可以写出?个完整的

应?程序。 Beautiful Soup?动将输??档转换为Unicode编码,输出

?档转换为utf-8编码。你不需要考虑编码?式,除??档没有指定?个

编码?式,这时,Beautiful Soup就不能?动识别编码?式了。然后,

你仅仅需要说明?下原始编码?式就可以了。 Beautiful Soup已成为和lxml、html6lib?样出?的python解释器,为?户灵活地提供不同的解

析策略或强劲的速度。

2. 安装

下载地址: https://https://www.360docs.net/doc/9312518161.html,/pypi/beautifulsoup4/4.3.2

官??档: https://www.360docs.net/doc/9312518161.html,/zh_CN/latest

3. 使?

from bs4 import BeautifulSoup

我们创建?个字符串,后?的例?我们便会?它来演示

创建 beautifulsoup 对象

soup = BeautifulSoup(html)

下?我们来打印?下 soup 对象的内容,格式化输出

print soup.prettify()

3.1 找标签

我们可以利? soup加标签名轻松地获取这些标签的内容,是不是感觉?正则表达式?便多了?不过有?点是,它查找的是在所有内容中的第?个符合要

求的标签

对于标签,它有两个重要的属性,是 name 和 attrs,下?我们分别来感受?下

soup 对象本身?较特殊,它的 name 即为 [document],对于其他内部标签,输出的值便为标签本身的名称

在这?,我们把 p 标签的所有属性打印输出了出来,得到的类型是?个字

典。

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什

3.2 获取?字

既然我们已经得到了标签的内容,那么问题来了,我们要想获取标签内部的

?字怎么办呢?很简单,? .string 即可,例如

print soup.p.string

#The Dormouse's story

3.3 CSS选择器

在CSS中,标签名不加任何修饰,类名前加点,id名前加 #,在这?我们也

可以利?类似的?法来筛选元素,?到的?法是 soup.select(),返回类型是

list

3.3.1 通过标签名查找

print soup.select('title')

#[The Dormouse's story]

3.3.2 通过类名查找

print soup.select('.sister')

#[,

id="link2">Lacie,

href="https://www.360docs.net/doc/9312518161.html,/tillie" id="link3">Tillie]

3.3.3 通过 id 名查找

print soup.select('#link1')

#[]

3.3.4 组合查找

组合查找即和写 class ?件时,标签名与类名、id名进?的组合原理是?样

的,例如查找 p 标签中,id 等于 link1的内容,?者需要?空格分开

print soup.select('p #link1')

#[]

3.3.5 直接?标签查找

print soup.select("head > title")

#[The Dormouse's story]

3.3.6 属性查找

查找时还可以加?属性元素,属性需要?中括号括起来,注意属性和标签属

于同?节点,所以中间不能加空格,否则会?法匹配到。

同样,属性仍然可以与上述查找?式组合,不在同?节点的空格隔开,同?

节点的不加空格

print soup.select('p a[href="https://www.360docs.net/doc/9312518161.html,/elsie"]')

#[]

以上的 select ?法返回的结果都是列表形式,可以遍历形式输出,然后?

get_text() ?法来获取它的内容。

soup = BeautifulSoup(html, 'lxml')

print type(soup.select('title'))

print soup.select('title')[0].get_text()

for title in soup.select('title'):

print title.get_text()

相关主题
相关文档
最新文档