Introduction à la façon dont le module Beautiful Soup crée des objets en Python

Y2J
Libérer: 2017-04-22 09:45:27
original
1745 Les gens l'ont consulté

Cet article présente principalement les informations pertinentes sur Python utilisant le module Beautiful Soup pour créer des objets. L'introduction dans l'article est très détaillée. Je pense qu'elle a une certaine valeur de référence pour tous les amis qui en ont besoin peuvent jeter un œil ci-dessous.

Installer

Installer le module Beautiful Soup via pip : pip install beautifulsoup4 .

Vous pouvez également utiliser PyCharm IDE pour écrire du code. Recherchez le projet dans les préférences de PyCharm, recherchez-y le module Beautiful Soup et installez-le.

Créer un objet BeautifulSoup

Le module Beautiful Soup est largement utilisé pour obtenir des données à partir de pages Web. Nous pouvons utiliser le module Beautiful Soup pour extraire toutes les données d'un document HTML/XML, par exemple tous les liens d'une page Web ou le contenu des balises.

Pour y parvenir, Beautiful Soup propose différents objets et méthodes. Tout document HTML/XML peut être converti en différents objets Beautiful Soup. Ces objets ont des propriétés et des méthodes différentes, et nous pouvons en extraire les données requises.

Beautiful Soup a un total de trois objets :

  1. BeautifulSoup

  2. Tag

  3. NavigableString

Création d'un objet BeautifulSoup

Création d'un objet BeautifulSoup est le point de départ de toute Beautiful Soup projet.

BeautifulSoup peut transmettre une chaîne ou un objet semblable à un fichier, tel qu'un fichier ou une page Web sur la machine.

Créez un objet BeautifulSoup à partir d'une chaîne

Créez un objet BeautifulSoup en passant une chaîne dans son constructeur.

helloworld = &#39;<p>Hello World</p>&#39;
soup_string = BeautifulSoup(helloworld)
print soup_string 
<html><body><p>Hello World</p></body></html>
Copier après la connexion

Créez un objet BeautifulSoup à partir d'un objet de type fichier

Créez un objet BeautifulSoup en passant un objet de type fichier dans son constructeur. Ceci est très utile lors de l’analyse de pages Web en ligne.

url = "http://www.glumes.com"
page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
print soup
Copier après la connexion

En plus de transmettre des objets de type fichier, nous pouvons également transmettre des objets de fichier locaux au constructeur de BeautifulSoup pour générer des objets.

with open(&#39;foo.html&#39;,&#39;r&#39;) as foo_file :
 soup_foo = BeautifulSoup(foo_file)
print soup_foo
Copier après la connexion

Créez des objets BeautifulSoup pour l'analyse XML

Le module Beautiful Soup peut également être utilisé pour analyser XML.

Lors de la création d'un objet BeautifulSoup, le module Beautiful Soup sélectionnera la classe TreeBuilder appropriée pour créer l'arborescence HTML/XML. Par défaut, l'objet HTML TreeBuilder est sélectionné, qui utilisera l'analyseur HTML par défaut pour produire une arborescence de structure HTML. Dans le code ci-dessus, l'objet BeautifulSoup est généré à partir de la chaîne en l'analysant dans une arborescence HTML.

Si nous voulons que le module Beautiful Soup analyse le contenu d'entrée en type XML, nous devons alors spécifier avec précision le paramètre de fonctionnalités utilisé dans le constructeur Beautiful Soup. En spécifiant le paramètre de fonctionnalités, Beautiful Soup sélectionnera la classe TreeBuilder la plus adaptée pour répondre aux fonctionnalités souhaitées.

Comprendre le paramètre de fonctionnalités

Chaque TreeBuilder aura des fonctionnalités différentes en fonction de l'analyseur qu'il utilise. Par conséquent, le contenu d’entrée aura des résultats différents selon le paramètre de fonctionnalités transmis au constructeur.
Dans le module Beautiful Soup, les analyseurs actuellement utilisés par TreeBuilder sont les suivants :

  1. lxml

  2. html5lib

  3. html.parser

Le paramètre Features du constructeur BeautifulSoup peut accepter une liste de chaînes ou une valeur de chaîne.

Actuellement, les paramètres de fonctionnalités et les analyseurs pris en charge par chaque TreeBuilder sont tels qu'indiqués dans le tableau suivant :

FeaturesTreeBuilderParser
[‘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&#39;t find a tree builder with the features you requested: html5lib. 
Do you need to install a parser library?
Copier après la connexion

就 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 = &#39;<p>Hello World</p>&#39;
soup_string = BeautifulSoup(helloworld,features="xml")
print soup_string
Copier après la connexion

输入的结果也是 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&#39;>Home</a>
 <a href="http;//www.glumes.com/index.html&#39;>Blog</a>
 </body>
 <html>
 """
soup = BeautifulSoup(html_atag,&#39;html.parser&#39;)
atag = soup.a
print type(atag)
print atag
Copier après la connexion

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

Tag 对象的名称

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

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

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

标签了。

Tag 对象的属性

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

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

创建 NavigableString 对象

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

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

小结

代码小结如下:

BeautifulSoup

  • soup = BeautifulSoup(String)

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

Tag

  • tag = soup.tag

  • tag.name

  • tag[‘attribute']

NavigableString

  • soup.tag.string

总结

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!