全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python利用Beautiful Soup模块创建对象详解

安装

通过 pip 安装 Beautiful Soup 模块:pip install beautifulsoup4

还可以使用 PyCharm IDE 来写代码,在 PyCharm 中的 Preferences 中找到 Project ,在里面搜索 Beautiful Soup 模块,进行安装即可。

创建 BeautifulSoup 对象

Beautiful Soup 模块广泛使用从网页中得到数据。我们能够使用 Beautiful Soup 模块从 HTML/XML 文档中提取任何数据,例如,网页中的所有链接或者标签内的内容。

为了实现这一点,Beautiful Soup 提供了不同的对象和方法。任何的 HTML/XML 文档能够转化成不同的 Beautiful Soup 对象,这些对象有着不同的属性和方法,我们能够从中提取到需要的数据。

Beautiful Soup 总共有如下三种对象:

  1. BeautifulSoup
  2. Tag
  3. NavigableString

创建 BeautifulSoup 对象

创建一个 BeautifulSoup 对象是任何 Beautiful Soup 工程的起点。

BeautifulSoup 可以通过传一个字符串或者类文件对象(file-like object),例如机器上的文件或者网页。

通过字符串创建 BeautifulSoup 对象

在 BeautifulSoup 的构造器中通过传递一个字符串来创建对象。

helloworld = '<p>Hello World</p>'
soup_string = BeautifulSoup(helloworld)
print soup_string 
<html><body><p>Hello World</p></body></html>

通过类文件对象创建 BeautifulSoup 对象

在 BeautifulSoup 的构造器中通过传递一个类文件对象(file-like object)来创建对象。这在解析在线网页时非常有用。

url = "http://www.glumes.com"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
print soup

除了传递类文件对象之外,我们还可以传递本地文件对象到 BeautifulSoup 的构造器来生成对象。

with open('foo.html','r') as foo_file :
 soup_foo = BeautifulSoup(foo_file)
print soup_foo

为 XML 解析创建 BeautifulSoup 对象

Beautiful Soup 模块同样能够用来解析 XML 。

当创建一个 BeautifulSoup 对象时, Beautiful Soup 模块将会选择合适的 TreeBuilder 类来创建 HTML/XML 树。默认情况下,选择 HTML TreeBuilder 对象,它将使用默认的 HTML 解析器,产生一个 HTML 结构树。在上面的代码中,由字符串生成 BeautifulSoup 对象,就是将它解析成了 HTML 树结构。

如果我们想要 Beautiful Soup 模块将输入的内容解析为 XML 类型,那么就需要在 Beautiful Soup 构造器中精确指定使用的 features 参数。通过特定的 features 参数,Beautiful Soup 将会选择最适合的 TreeBuilder 类来满足我们想要的特征。

理解 features 参数

每一个 TreeBuilder 根据它使用的解析器将会有不同的特征。因此,输入的内容根据传递到构造器的 features 参数也会有不同的结果。
在 Beautiful Soup 模块中,TreeBuilder 当前使用的解析器如下:

  1. lxml
  2. html5lib
  3. html.parser

BeautifulSoup 构造器的 features 参数能够接受一个字符串列表或一个字符串值。

当前,每一个 TreeBuilder 支持的 features 参数和解析器如下表所示:

Features TreeBuilder Parser
[‘lxml','html','fast','permissive'] LXMLTreeBuilder lxml
[‘html','html5lib','permissive','strict','html5′] HTML5TreeBuilder html5lib
[‘html','strict','html.parser'] HTMLParserTreeBuilder html.parser
[‘xml','lxml','permissive','fast'] LXMLTreeBuilderForXML lxml

根据指定的 feature 参数,Beautiful Soup 将会选择最合适的 TreeBuilder 类。如果在指定对应的解析器时,出现如下的报错信息,可能就是需要安装对应的解析器了。

bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html5lib. 
Do you need to install a parser library?

就 HTML 文档而言,选择 TreeBuilder 的顺序是基于解析器建立的优先级,就如上表格所示的优先级。首先是 lxml ,其次是 html5lib ,最后才是 html.parser 。例如,我们选择 html 字符串作为 feature 参数,那么如果 lxml 解析器可用,则 Beautiful Soup 模块将会选择 LXMLTreeBuilder 。如果 lxml 不可用,则会选择 根据 html5lib 解析器选择 HTML5TreeBuilder 。如果在不可用,则会选择根据 html.parser 选择 HTMLParserTreeBuilder 了。

至于 XML ,由于 lxml 是唯一的解析器,所以 LXMLTreeBuilderForXML 总是会被选择的。

所以,为 XML 创建一个 Beautiful Soup 对象的代码如下:

helloworld = '<p>Hello World</p>'
soup_string = BeautifulSoup(helloworld,features="xml")
print soup_string

输入的结果也是 XML 形式的文件 :

在创建 Beautiful Soup 对象时,更好的实践是指定解析器。这是因为,不同的解析器解析的结果内容大不相同,尤其是在我们的 HTML 文档内容非法时,结果更为明显。

当我们创建一个 BeautifulSoup 对象时,Tag 和 NavigableString 对象也就创建了。

创建 Tag 对象

我们可以从 BeautifulSoup 对象中得到 Tag 对象,也就是 HTML/XML 中的标签。

如下 HTML 代码所示:

#!/usr/bin/python
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
html_atag = """
 <html>
 <body>
 <p>Test html a tag example</p>
 <a href="http://www.glumes.com'>Home</a>
 <a href="http;//www.glumes.com/index.html'>Blog</a>
 </body>
 <html>
 """
soup = BeautifulSoup(html_atag,'html.parser')
atag = soup.a
print type(atag)
print atag

从结果中可以看到 atag 的类型是 <class 'bs4.element.Tag'>  。而 soup.a 的结果就是 HTML 文档中的第一个 <a> 标签。
HTML/XML 标签对象具有名称和属性。名称就是标签的名字,例如 标签 <a> 的名称就是 a 。属性则是标签的 class 、id 、style 等。Tag 对象允许我们得到 HTML 标签的名称和属性 。

Tag 对象的名称

通过 .name 方式得到 Tag 对象的名称 。

tagname = atag.name
print tagname 

同时也能够改变 Tag 对象的名称:

atag.name = 'p'

这样就将上面 HTML 文档中的第一个 <a> 标签名称换成了 <p> 标签了。

Tag 对象的属性

在 HTML 页面中,标签可能有不同的属性,例如 class 、id 、style 等。Tag 对象能够以字典的形式访问标签的属性。

atag = soup_atag.a
print atag 

也能通过 .attrs 的方式访问到,这样会将所有的属性内容都打印出来 :

print atag.attrs
{'href': u'http://www.glumes.com'}

创建 NavigableString 对象

NavigableString 对象持有 HTML 或 XML 标签的文本内容。这是一个 Unicode 编码的字符串。

我们可以通过 .string 的方式得到标签的本文内容 。

navi = atag.string
print type(navi)
print navi.string

小结

代码小结如下:

BeautifulSoup

  • soup = BeautifulSoup(String)
  • soup = BeautifulSoup(String,features=”xml”)

Tag

  • tag = soup.tag
  • tag.name
  • tag[‘attribute']

NavigableString

  • soup.tag.string

总结

以上就是关于Python使用Beautiful Soup模块创建对象的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# python  # beautifulsoup  # 对象  # 安装  # Python类的定义和使用详情  # python基础之定义类和对象详解  # python中的3种定义类方法  # python定义变量类型  # Python中的类的定义和对象的创建方法  # 将会  # 文档  # 创建一个  # 所示  # 会有  # 还可以  # 第一个  # 我们可以  # 器中  # 则会  # 不可用  # 成了  # 尤其是  # 也就  # 才是  # 则是  # 也能  # 这是一个  # 可以通过  # 能有 


相关文章: 建站之星安装步骤有哪些常见问题?  如何高效生成建站之星成品网站源码?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  安云自助建站系统如何快速提升SEO排名?  如何快速选择适合个人网站的云服务器配置?  活动邀请函制作网站有哪些,活动邀请函文案?  如何选择适配移动端的WAP自助建站平台?  如何通过西部数码建站助手快速创建专业网站?  建站之星下载版如何获取与安装?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  视频网站app制作软件,有什么好的视频聊天网站或者软件?  存储型VPS适合搭建中小型网站吗?  Python文件管理规范_工程实践说明【指导】  建站之星安装模板失败:服务器环境不兼容?  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何在局域网内绑定自建网站域名?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  建站之星官网登录失败?如何快速解决?  如何快速配置高效服务器建站软件?  如何用西部建站助手快速创建专业网站?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何用腾讯建站主机快速创建免费网站?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何彻底卸载建站之星软件?  购物网站制作公司有哪些,哪个购物网站比较好?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  历史网站制作软件,华为如何找回被删除的网站?  电商网站制作公司有哪些,1688网是什么意思?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  宝塔面板创建网站无法访问?如何快速排查修复?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  建站主机如何选?性能与价格怎样平衡?  ,网页ppt怎么弄成自己的ppt?  Java解压缩zip - 解压缩多个文件或文件夹实例  建站之星伪静态规则如何设置?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  南平网站制作公司,2025年南平市事业单位报名时间?  移民网站制作流程,怎么看加拿大移民官网?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在景安服务器上快速搭建个人网站?  如何用狗爹虚拟主机快速搭建网站?  制作网页的网站有哪些,电脑上怎么做网页? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。