Beautiful Soup模块在Python中创建对象的方法介绍

这篇文章主要介绍了python利用beautiful soup模块创建对象的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

安装

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

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

创建 BeautifulSoup 对象

立即学习“Python免费学习笔记(深入)”;

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

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

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

BeautifulSoup

Tag

NavigableString

创建 BeautifulSoup 对象

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

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

通过字符串创建 BeautifulSoup 对象

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

helloworld = '

Hello World

'soup_string = BeautifulSoup(helloworld)print soup_string 

Hello World

登录后复制

通过类文件对象创建 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 当前使用的解析器如下:

lxml

html5lib

html.parser

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

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

Features TreeBuilder Parser

[‘lxml’,’html’,’fast’,’permissive’]LXMLTreeBuilderlxml[‘html’,’html5lib’,’permissive’,’strict’,’html5′]HTML5TreeBuilderhtml5lib[‘html’,’strict’,’html.parser’]HTMLParserTreeBuilderhtml.parser[‘xml’,’lxml’,’permissive’,’fast’]LXMLTreeBuilderForXMLlxml

根据指定的 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 = '

Hello World

'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 BeautifulSouphtml_atag = """   

Test html a tag example

 Home Blog   """soup = BeautifulSoup(html_atag,'html.parser')atag = soup.aprint type(atag)print atag

登录后复制

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

Tag 对象的名称

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

tagname = atag.nameprint tagname

登录后复制

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

atag.name = 'p'

登录后复制

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

标签了。

Tag 对象的属性

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

atag = soup_atag.aprint atag

登录后复制

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

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

登录后复制

创建 NavigableString 对象

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

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

navi = atag.stringprint 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

总结

以上就是Beautiful Soup模块在Python中创建对象的方法介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2273818.html

(0)
上一篇 2025年2月27日 13:36:41
下一篇 2025年2月25日 14:15:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python解析XML文件实例(图)

    如下使用xml.etree.elementtree模块来解析xml文件。elementtree模块中提供了两个类用来完成这个目的: ElementTree 表示整个XML文件(一个树形结构) Element 表示树中的一个元素(结点) 我们…

    2025年2月27日 编程技术
    200
  • Anaconda和python在windows上安装的实例详解

    本文主要给大家介绍windows上安装anaconda和python的教程详解,非常不错,具有参考借鉴价值,需要的朋友参考下  一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1、不开源,价格贵 2…

    2025年2月27日 编程技术
    200
  • 用Python+WordPress制作小说站步骤概述

    本文给大家讲解的是使用python实现采集并入库到wordpress小说站中,非常的简单使用,有需要的小伙伴可以参考下 我用Python和Wordpress建了一个小说站。 下面主要讲一讲搭建过程中所用的技术。主要分为以下几个部分: Wor…

    编程技术 2025年2月27日
    200
  • 简单制作一个python后台管理程序

    这篇文章主要为大家详细介绍了简单python后台管理程序的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一、作业需求   二、流程图 立即学习“Python免费学习笔记(深入)”; 三、源码与具体思路  import shut…

    2025年2月27日
    200
  • python算法表示概念扫盲的实例教程

    这篇文章主要为大家详细介绍了python算法表示概念扫盲教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文为大家讲解了python算法表示概念,供大家参考,具体内容如下 常数阶O(1) 常数又称定数,是指一个数值不变的常量,与之相…

    2025年2月27日
    200
  • python实现希尔排序的代码示例

    这篇文章主要介绍了python实现希尔排序,已编程实现的希尔排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 观察一下”插入排序“:其实不难发现她有个缺点:   如果当数据是”5, 4, 3, 2, 1“的时候,此时我们将“无序块”中…

    2025年2月27日
    200
  • python实现解数独程序的代码示例

    最近在带孩子学习数独,职业使然,就上网搜了下相关程序的解法,这里分享给大家,希望对大家学习python有所帮助 偶然发现linux系统附带的一个数独游戏,打开玩了几把。无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了。 于是就打算…

    2025年2月27日
    200
  • 实例详解Python 登录网站的方法

    这篇文章主要介绍了python 登录网站详解及实例的相关资料,需要的朋友可以参考下 Python 登录网站详解及实例 对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。   这是因为 HTTP 协议是一个无状态(Sta…

    编程技术 2025年2月27日
    200
  • 常见python中排序的代码详解

    这篇文章主要为大家详细介绍了python算法的基础教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 前言:前两天腾讯笔试受到1万点暴击,感觉浪费我两天时间去牛客网做题……这篇博客介绍几种简单/常见的排序算法,算是整理下。 时间复杂度 …

    2025年2月27日 编程技术
    200
  • python实现希尔排序的实例详解

    这篇文章主要介绍了python实现希尔排序,已编程实现的希尔排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 观察一下”插入排序“:其实不难发现她有个缺点:   如果当数据是”5, 4, 3, 2, 1“的时候,此时我们将“无序块”中…

    2025年2月27日
    200

发表回复

登录后才能评论