美しいスープ:おいしいスープ
非常に優れたサードパーティ製のライブラリパイソン
関連情報は、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的类型