美しいスープライブラリ

美しいスープ:おいしいスープ

非常に優れたサードパーティ製のライブラリパイソン

関連情報は、HTML、XMLフォーマットを構文解析し、抽出することができます

美しいスープはあなたに彼の関連クロール形式のいずれかを提供することができ、ツリーを解析することができます

原理を使用する:あなたは彼にスープの鍋を与えるとして、このスープの鍋システムを任意の文書を入れて

まず、インストール:

PIP3 beautifulsoup4をインストール

 HTMLページには、パッケージベースの角括弧内のラベルのいくつかについていくつかの情報です

>>>インポート要求が
>>> R = requests.get( "https://python123.io/ws/demo.html")
>>> r.text
「<HTML> <HEAD> <TITLE>これは、Pythonでデモページ</ TITLE> </ HEAD> \ R \ nは<身体> \ R \ nは<Pクラス= "タイトル"> <B>デモ・パイソンは、いくつかのpythonのコースを紹介します。</ B> </ P> R \ \ n個<Pクラス=「もちろん」> Pythonは素晴らしい汎用プログラミング言語です。\ rを\ nは<a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">:あなたは、次のコースを追跡することにより、専門家に初心者からのPythonを学ぶことができます基本的なPythonの</a>と<a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">高度なPythonの</a>を。<

>>> BS4のインポートからBeautifulSoup#BS4速記のbeautifulsoup4ライブラリBS4からは BeautifulSoupクラスライブラリを導入しました

私たちが解決した後#soup変数は、デモページを表し、

>>> スープ= BeautifulSoup(デモ、「html.parser」) は、最初のパラメータは、我々はBeautifulSoupを必要とする情報は、缶「<P>データ</ P HTMLを解析され >」を交換する、使用することができます第二のパラメータを分析する任意の変数は、(html.parserパーサーデモ解析されたHTMLのデモを解析)パーサスープで使用され

>>>プリント(soup.prettify())

BeautifulSoupライブラリが正常に我々が与えるデモページを解析します

 第二に、ライブラリーの美しいスープの基本要素

リファレンスライブラリBeautifulSoup

またbeautifulsoup4ライブラリまたはライブラリBS4と呼ばれるBeautifulSoupライブラリ、

インポートBS4  BeautifulSoup(BeautifulSoup BS4からタイプを参照)

(いくつかの変数BeautifulSoupライブラリ裁判官のための)輸入BS4

BeautifulSoupライブラリ自体が治療BeautifulSoupクラス後のタグツリーに対応してHTML、XML文書を解析し、あなたが(文字列として理解することができる)BeautifulSoupクラスに変換されたタグツリーを置くことができ、BeautifulSoupクラスは、タグツリーの代表でありますタイプ、実際には、HTML文書の<---------->タグツリー<----------> BeautifulSoupカテゴリ3が等価であるとみなすことができます

BeautifulSoupクラスによって変数にタグツリーを作成し、この変数の処理は、タグツリーの処理に関連しています

簡単に言えば、我々は、HTML / XMLドキュメントとして対応するクラスの内容全体をBeautifulSoupすることができます

 

パーサライブラリ美しいスープ

パーサの使用条件

BS4 HTMLパーサBeautifulSoup(MK、 'html.parser')はBS4ライブラリを搭載し

lxmlのインストールPIP lxmlのHTMLパーサBeautifulSoup(MK、 'lxmlの')

パーサのxml lxmlのBeautifulSoup(MK、 'html.xml')はlxmlのインストールPIP

html5libをインストールPIP html5libパーサBeautifulSoup(MK、 'html5lib')

 

基本的な要素の美しいスープカテゴリ

基本的な要素説明

タグラベルによる基本単位の情報機関、<>と</>は、それぞれ、始まりと終わりを示し、

名前タグ名、<P> ... </ P>名 'P'、形式です:<タグ> .nameの

プロパティタグ、辞書組織形式属性:<タグ> .attrsを、何のプロパティは空の辞書を返しません

非NavigableString属性文字列タグ、<> ... </>形式の文字列:<タグ> .string

コメントコメントラベル文字列の一部、特殊なタイプのコメント

ページタイトルを参照してください。

>>> soup.title
<タイトル>これは</タイトル> Pythonのデモページです

>>>タグ= soup.a位の複数のみの最初のラベル得る
>>>タグ
<クラス=「PY1」HREF =「http://www.icourse163.org/course/BITを-268001 "ID ="リンク1「>基本的なPythonの</a>の

>>> soup.a.name#が、文字列型のタグ名を取得します
「」

>>> soup.a.parent.name#が親タグの名前タグを取得
「P」を

>>> soup.a.parent.parent.name
の体"

タグ= soup.a >>>
タグ属性取得>>>#tag.attrs、辞書
{ 'のhref': 'http://www.icourse163.org/course/BIT-268001' 、 'クラス':[」 PY1 ']、' ID ': 'リンク1「}

>>> tag.attrs [ 'クラス']
[ 'PY1']
>>> tag.attrs [ 'のhref']
'http://www.icourse163.org/course/BIT-268001'
>>>タイプ(タグ.attrs)
<クラスの辞書'>
>>>タイプ(タグ)
<クラスのbs4.element.Tag'>

>>> soup.a
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">基本的なPythonの</a>の
>>> soup.a .string
「基本Pythonの

Soup.p >>>
<Pクラス= "タイトル">デモのPythonのPythonの<B>は、いくつかのコースを紹介します。</ B> </ P>
soup.p.string >>>
パイソンパイソンの「デモのいくつかのコースを紹介します。 B '位ない印刷ラベルは、ラベルの複数のレベルにわたってNavigableStringを記述することができる
>>>タイプ(soup.p.string)
<クラスのbs4.element.NavigableString'>ライブラリBS4で定義され#タイプ

>>> newsoup = BeautifulSoup( "<B > <! -これはコメントです- > </ B> <p>このコメントではありません。</ P>"、 "html.parser")#< - コメントの開始を表し
#はコメント情報を抽出する必要はありませんnewsoup.b.string >>>、該当するタイプを決定するための必要性
「これはあるコメントを」
>>>タイプ(newsoup.b.string)
<クラスのbs4.element。コメント'>
>>> newsoup.p.string
ないコメントこれは' '
>>>タイプ(newsoup.p.string)
<クラスのbs4.element.NavigableString'>

第三に、HTMLコンテンツトラバーサル方法のBS4ライブラリに基づいて

基本的なHTML形式

下向きトラバーサル:

  プロパティ説明

  子ノードの.Contentsリスト、すべての息子の<タグ>のリストは、ノードに

  イテレータ型.children子ノード、および息子のノードを反復処理ループについても同様.contents

  反復.descendantsスルーループ、すべての子孫ノードを含む、ノードタイプを子孫

 

Soup.head >>>
<ヘッド> <タイトル>はこのPythonのデモページ</ TITLE> </ HEAD> IS
>>> soup.head.contents
[<タイトル>このPythonのデモがされているページ</タイトル>]
> >>ラベルのsoup.body.contents番号の息子ノードは、ラベルは、ノード、ノードのみならず、また、「N \」キャリッジリターンのような文字列が含まれる、と彼はまた、息子のノード型ボディタグである
[「\ nを'<Pクラスは= "タイトル "> <B>デモ・パイソンは、いくつかのpythonのコースを紹介します。</ B> </ P>、' \ n」は、<Pクラス= "もちろん"> Pythonは素晴らしい汎用です:あなたが追跡でコースに従うことによって、プロフェッショナルに初心者から学ぶことができることで、Pythonプログラミング言語
の基本を<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1"> Pythonの</a>と<クラス= " PY2"のhref = "http://www.icourse163.org/course/BIT-1001870001" ID = "リンク2">高度のPython </a>の</ P>、 '\ n']
>>> LEN(soup.body.contents)
5
>>> soup.body.contents [1]
<Pクラス= "タイトル"> <B>デモのpythonには、いくつかのpythonのコースを紹介します。</ B> </ P>

 

soup.body.childrenでの子供のために:

  印刷(子)

soup.body.childrenでの子供のために:

  印刷(子)

トラバーサルアップ:

  プロパティ説明

  父ノードラベル.parent

  トラバース先祖ノードを循環させるための反復.parentsタイプ祖先ノードラベル

>>>スープ= BeautifulSoup(デモ、 'html.parser')
soup.a.parents中の親のための>>>:
...親がNoneの場合:
...プリント(親)
... ELSE:
...印刷(parent.name)
...
のp
ボディ
HTML
[ドキュメント]

トラバースすべての祖先のラベルラベルは、スープ自体を通過しますが、スープは情報の.nameの祖先が存在しない場合、あなたはなし祖先を印刷することができない場合の区別は、実行する必要があり、その場合には#が、この情報の一部であります

パラレルトラバーサル:

  プロパティ説明

順序に従って並列.next_sibling HTMLテキストラベル内の次のノードを返します。

HTMLテキストの順序に従って並列ノードタグを返す.previous_sibling

.next_siblings反復タイプ、後続のすべての並列ノードラベルのための順序で返されたHTMLテキスト

.previous_siblings反復タイプ、HTMLテキスト配列タグに従い、すべての続きの並列ノードを返します。

>>> soup.a.next_sibling  #a标签的下一个平行节点是一个字符串and,这里注意一下,在标签树中,尽管树形结构采用的是标签的形式来组织,但是标签之间的NavigableString  也构成了标签的节点,也就是说,任何一个节点,他的平行标签,他的儿子标签是可能存在NavigableString   类型的,所以并不能想当然的认为,平行遍历获得的节点一定是标签类型。
' and '
>>> soup.a.next_sibling.next_sibling
<a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>
>>> soup.a.previous_sibling
'Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:\r\n'
>>> soup.a.previous_sibling.previous_sibling  #空信息
>>> soup.a.parent
<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">Basic Python</a> and <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>.</p>

#遍历后续节点
>>> for sibling in soup.a.next_siblings:
... print(sibling)
...
and
<a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">Advanced Python</a>
.#遍历前续节点
>>> for sibling in soup.a.previous_siblings:
... print(sibling)
...
Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:

>>>

 四、基于bs4库的HTML格式化和编码

>>> soup.prettify()  #每一个标签后面加了一个换行符\n
'<html>\n <head>\n <title>\n This is a python demo page\n </title>\n </head>\n <body>\n <p class="title">\n <b>\n The demo python introduces several python courses.\n </b>\n </p>\n <p class="course">\n Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:\n <a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">\n Basic Python\n </a>\n and\n <a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">\n Advanced Python\n </a>\n .\n </p>\n </body>\n</html>'
>>> print(soup.prettify())  #每一个标签以及相关内容都分行显示
<html>
<head>
<title>
This is a python demo page
</title>
</head>
<body>
<p class="title">
<b>
The demo python introduces several python courses.
</b>
</p>
<p class="course">
Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">
Basic Python
</a>
and
<a class="py2" href="http://www.icourse163.org/course/BIT-1001870001" id="link2">
Advanced Python
</a>
.
</p>
</body>
</html>
>>>

prettify这个方法能够为html文本的标签和内容增加换行符,他也可以对每一个标签进行相关处理

>>> print(soup.a.prettify())
<a class="py1" href="http://www.icourse163.org/course/BIT-268001" id="link1">
Basic Python
</a>

bs4库将任何读入的html文件或字符串都转换成了utf8编码,utf8编码是国际通用的标准编码格式,他能够很好的支持中文等第三国的语言,由于py3.x默认支持编码是utf8,因此在做相关解析的时候,使用bs4库并没有相关障碍

>>> soup = BeautifulSoup("<p>中文</p>","html.parser")
>>> soup.p.string
'中文'
>>> print(soup.p.prettify())
<p>
中文
</p>
>>>

总结:BeautifulSoup是用来解析html、xml文档的功能库,可以使用from bs4 import BeautifulSoup引入BeautifulSoup类型,并用这个类型加载相关的解析器,来解析一个变量出来,这个变量就是用来提取信息和遍历信息的BeautifulSoup的类型

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/suitcases/p/11200898.html