使? 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://pypi.python.org/pypi/beautifulsoup4/4.3.2 官??档: http://beautifulsoup.readthedocs.org/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')
#[
print soup.select('.sister')
#[, href=\3.3.3 通过 id 名查找 print soup.select('#link1') 组合查找即和写 class ?件时,标签名与类名、id名进?的组合原理是?样 的,例如查找 p 标签中,id 等于 link1的内容,?者需要?空格分开 print soup.select('p #link1') 3.3.5 直接?标签查找 print soup.select(\ #[
查找时还可以加?属性元素,属性需要?中括号括起来,注意属性和标签属 于同?节点,所以中间不能加空格,否则会?法匹配到。
同样,属性仍然可以与上述查找?式组合,不在同?节点的空格隔开,同? 节点的不加空格
print soup.select('p a[href=\
以上的 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()
黑马程序员python基础班教程笔记:使
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)