python3クローラ戦闘-30、PyQuery

我々はBeautifulSoupの使用を導入し、前のセクションでは、それは非常に強力なウェブ解析ライブラリです、あなたはそれが苦労して使用する方法はいくつかあります感じることができませんか?あなたはそれが非常に強力CSSセレクタ機能ではありませんと思いますか?

あなたはCSSセレクタを使用することを好む場合は、ウェブの一部に関与している場合は、jQueryのを理解していれば、その後、より適切なあなたの構文解析ライブラリがある - PyQuery。

次はPyQueryの力を感じるようになります。

1.準備

あなたは正しくPyQueryがインストールされていることを確認し始める前に、インストール手順をインストールしていない場合は、最初の章です。

2.初期化

BeautifulSoup同じ、PyQueryの初期化と同じように、彼らはまた、操作目標を初期化するために、HTMLデータソースを渡す必要があり、このような直接入ってくる文字列の着信URLとしてその初期化方法、各種ありますが、ファイル名を渡します。我々は詳細に説明し、以下の。

初期化文字列

まず、我々は感じることの例を使用します。

html = '''
<div>
    <ul>
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

結果:

<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

ここでは、最初のPQとして、このオブジェクトのエイリアスをPyQueryを導入し、初期化が正常に完了したように、その後、PyQueryにパラメータとして長いHTML文字列を宣言した後、次のターゲットは、渡されたCSSセレクタを初期化されますこの例では、我々はあなたがすべてのliノードを選択することができるように、あなたはすべてのliノードのHTMLテキストプリントアウトを見ることができ、李ノードを渡します。

URL初期化

唯一の初期化パラメータを文字列として渡すことができない、あなたはまた、ページのURLを渡すことができ、ここでの唯一のURLにパラメータを指定する必要があります。

from pyquery import PyQuery as pq
doc = pq(url='http://www.segmentfault.com')
print(doc('title'))

結果:

<title>SegmentFault 思否</title>

この場合、PyQueryはこのURLを要求し、その文字列を初期化するために、実際には、我々は同等のページのソースコードがPyQueryに渡される使用を取得するために、コンテンツHTMLと初期化を完了最初ます。

これは、以下の機能と同じです。

from pyquery import PyQuery as pq
import requests
doc = pq(requests.get('http://www.segmentfault.com').text)
print(doc('title'))

初期化ファイル

もちろん、URLを渡すことに加えて、あなたはまた、ファイル名をパラメータとして指定することができ、ローカルのファイル名を渡すことができます:

from pyquery import PyQuery as pq
doc = pq(filename='demo.html')
print(doc('li'))

もちろん、ここではローカルのHTMLファイルdemo.htmlの必要性は、HTML文字列を解析するコンテンツです。それが最初の文字列を初期化するためにPyQueryに、ファイルの内容、その後、ローカルファイルの内容を読み取るように。

これら三つの初期化メソッドは、もちろん、文字列を初期化する最も一般的な方法は、渡されることができます。

3.基本的なCSSセレクタ

まず、我々はCSSセレクタの使用PyQueryのを感じるために例を使用します。

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li')))

結果:

<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<class 'pyquery.pyquery.PyQuery'>

ここでは、オブジェクトの後PyQueryを初期化するCSSセレクタを通過し、ノード内の全てのLi IDノードを選択することを意味#コンテナ.LISTのLiが、ノードのリストのコンテナクラス内にあります。プリントアウトすると、あなたは資格のノードの成功を見ることができます。

私たちは、そのタイプのプリントアウトは、あなたはまだその型PyQueryタイプを見ることができます。

4.検索ノード

ここでは、jQueryのを使用し、機能も同一であり、いくつかの一般的なクエリー機能を紹介します。

子ノード

ノードはfind()メソッドを使用する必要がある子を見つけ、渡すパラメータは、CSSセレクタが、我々はHTMLの例の上にまだあった、以下のとおりです。

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)

結果:

<class 'pyquery.pyquery.PyQuery'>
<ul class="list">
    <li class="item-0">first item</li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
    <li class="item-1 active"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

まず、我々は、我々はその内部のliノードを選択し、CSSセレクタを渡し、find()メソッドを呼び出して、ノードのリストのためのクラスを選択し、最終的にプリントアウトは、対応するクエリ結果を観察することができ、検索を見つけることができます( )この方法は、結果の型はPyQuery型であり、選択されたすべてのノードが条件を満たして返します。

実際には、見つける()は、ノードのすべての子孫に見て、私たちは子ノードを検索したい場合は、子供()メソッドを使用することができます。

lis = items.children()
print(type(lis))
print(lis)

結果:

<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

あなたはすべての子供が資格のノードをノードフィルタリングする場合は、例えば、私たちは子ノードのクラスをフィルタリングしたい子供()メソッドに.active CSSセレクタを渡すことができるアクティブなノードです。

lis = items.children('.active')
print(lis)

結果:

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>

あなたは、アクティブノードのクラスを残して、スクリーニングの出力が行われている見ることができます。

私たちは、私たちが感じることの例を使用して、ノードの親ノードを取得するには、親()メソッドを使用することができます。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

結果:

<class 'pyquery.pyquery.PyQuery'>
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>

ここでは、最初のノードのリストのクラスを選択し、親ノードを取得するために、親()メソッドを呼び出す.LIST使用、タイプは依然としてPyQuery型です。

ここでは、ノードの親ノードの直接の親である、つまり、それは親の親、その祖先ノードを探しに行くことはありません。

しかし、我々はそれを行う方法を先祖ノードを取得したい場合は?親は()メソッドを使用することができます。

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)

結果:

<class 'pyquery.pyquery.PyQuery'>
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
 <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>

ここでは、()メソッド親を呼び出して、あなたはノードがコンテナのIDで、1ノードをラップするクラスである、2があり、出力を見ることができ、それは親()メソッドは、すべての祖先ノードを返す、と言うことです。

ノードの先祖ノードを返します。私たちは先祖ノードをフィルタリングする場合は、その後、あなたは親にCSSセレクタを渡すことができます()メソッドは、有効なCSSセレクタであります:

parent = items.parents('.wrap')
print(parent)

結果:

<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

私たちは、ノードをラップするクラスのみを残して、ノードの出力はあまり見ることができます。

兄弟

私たちは、子供と親ノードの使用を記載している以上、あなたは兄弟()メソッドを使用することができ兄弟を取得したい場合は、ある兄弟ノードが存在します。私たちは感じる一例として、HTMLコードの上にまだありました:

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

ここでは、第1〜第3のLiノードであるノードとアクティブな項目-0のクラスの内部リストにノードクラスを選択しました。そして、明らかにそれは4人の兄弟、すなわち第1、2、4、5つのliノードを持っています。

結果:

<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0">first item</li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

私たちは4人の兄弟がちょうど言ったことの結果を見ることができます。

あなたは兄弟ノードをフィルタリングする場合は、我々はまだ資格のノード内のすべての兄弟から選ぶだろうCSSセレクタメソッドを渡すことができます。

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings('.active'))

ここでは、アクティブノードのクラスをスクリーニングし、我々は、クラスが第四のLi以前の結果によって活性のみ兄弟ノードで観察することができるので、結果があるべきです。

結果:

<li class="item-1 active"><a href="link4.html">fourth item</a></li>

5.トラバーサル

私達はちょうど選択はPyQueryタイプであり、BeautifulSoupと同じリストを返しませんでした、PyQuery複数のノード結果である可能性があり、単一のノードタイプであってもよいことを観察することができます。

単一ノードのために、私たちは直接文字列に直接転送することができ、プリントアウトすることができます。

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(str(li))

結果:

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

複数のノードの結果を得るために、我々は,,すべてのノード李を横断しなければならない()メソッドの項目を呼び出す必要がありますたとえば、のために、立ち上がっするトラバースする必要があります。

from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:
    print(li, type(li))

結果:

<class 'generator'>
<li class="item-0">first item</li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-1"><a href="link2.html">second item</a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<class 'pyquery.pyquery.PyQuery'>

我々はアイテムを見つけることができます()メソッドを呼び出した後、それを横断、発電機を取得します、あなたは、Liごとのノードオブジェクトを取得することができ、その種類はPyQueryタイプなので、各ノードはまた、李前述のメソッドを呼び出すことができますなど、研究祖先ノードを見つけるために、このような子ノードとして、選択するように、それは非常に柔軟です。

6.情報を入手

ノードを抽出した後、私たちの究極の目的はもちろん、抽出したノードに含まれる情報であり、より重要な情報は、二つのタイプがあり、一つは財産を得ることであり、第二、テキストを取得するために、我々は以下に別々に説明されています。

プロパティを取得します

ノードのPyQueryタイプに抽出した後、我々は、プロパティを取得するためのattr()メソッドを呼び出すことができます。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))

結果:

<a href="link3.html"><span class="bold">third item</span></a> <class 'pyquery.pyquery.PyQuery'>
link3.html

ここでは、第1のノードのLiクラス項目-0内のノードを選択し、アクティブであり、その種類はPyQueryタイプを見ることができます。

その後、我々は、ATTR()メソッドを呼び出し、それをプロパティの名前を渡し、あなたは、このプロパティの値を取得することができます。

次のようにも使用されている属性attr属性を呼び出すことによって取得することができます。

print(a.attr.href)

結果:

link3.html

結果はまったく同じです、ここで我々はメソッドを呼び出すことはありません、それはプロパティ値をも得ることができ、その後、プロパティ名を呼んで、ATTR属性を呼び出します。

我々は複数の要素を選択した場合は、ATTR()メソッドを呼び出し、結果が表示され何でしょうか?私たちは、テストする例を使用します。

a = doc('a')
print(a, type(a))
print(a.attr('href'))
print(a.attr.href)

結果:

<a href="link2.html">second item</a><a href="link3.html"><span class="bold">third item</span></a><a href="link4.html">fourth item</a><a href="link5.html">fifth item</a> <class 'pyquery.pyquery.PyQuery'>
link2.html
link2.html

論理的に言えば、我々は、ノードが4であるべきで選択されるが、印刷結果は、4つであるが、我々はATTR()メソッドを呼び出すと、結果が返されたが、唯一の最初のもの。

戻り結果は、複数のノードを含む場合したがって、最初のノードのプロパティのみを得るために、ATTR()メソッドを呼び出します。

これは、我々はノードのすべての属性を取得したい場合、あなたは上記のトラバースを使用する必要がある場合です。

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a')
for item in a.items():
    print(item.attr('href'))

結果:

link2.html
link3.html
link4.html
link5.html

それはより多くのであれば、財産中に1つの以上のノードが返すかどうかを見て時間を得るために、あなたは、各ノードの属性を取得するためにトラバースする必要があります。

テキストを取得

買収後のもう一つの主要な操作は、内部のテキストノードを取得することで、我々は、取得するには、テキスト()メソッドを呼び出すことができます。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())

結果:

<a href="link3.html"><span class="bold">third item</span></a>
third item

私たちは、最初のノードを選択し、テキスト()メソッドを呼び出して、あなたが内部情報のテキストを取得することができ、それが内部ノードは、すべてのHTMLが含まれており、プレーンテキストのみを返し無視します。

私たちは、HTMLテキストの内部ノードを取得したい場合しかし、あなたはHTML()メソッドを使用することができます。

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

ここでは、結果はHTMLリチウムのノード内のすべてのテキストであるべきである戻りHTML()メソッドを呼び出して、第三のLiノードを選択しました。

結果:

<a href="link3.html"><span class="bold">third item</span></a>

私たちは、結果が複数のノードであるテキスト()またはHTMLを選択した場合も、問題がある()何を返すのだろうか?

私たちは、見ての例を使用します。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li')
print(li.html())
print(li.text())
print(type(li.text())

結果:

<a href="link2.html">second item</a>
second item third item fourth item fifth item
<class 'str'>

結果は、()メソッドは第一内部ノードのLi HTMLテキスト、およびテキストを(返す)内部ノードのLi平文のすべてのリターンHTMLで見つけることができ、我々は全てのLiノードをチェックし、さらに驚くべきであってもよいです中間スペースで区切って、それが実際には文字列です。

だから、この場所は、我々は結果を得る場合は、HTMLテキスト内で取得したい場合は、複数のノード、各ノードは、各ノードを通過する必要がある、ということは注目に値する、とテキスト()メソッドがトラバーサルが得ることができる必要はありません、それがすべてですテキスト文字列への合併・ノードの後に​​撮影しました。

7.ノード演算

PyQueryは、ノードのクラスを追加するなど、ノード上の動的な変更操作、方法の範囲を提供する、ノードが除去され、ように、時にはこれらのアクションは、情報を抽出するために大きな利便性をもたらすでしょう。

あまりにも多くのノードがその使用を説明するためのいくつかの典型的な例以下は、この方法を動作させるため。

addClass、removeClass

さんが感じるために例を使用してみましょう:

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

まず、我々は第三のLi・ノードを選択し、次いでremoveClass()メソッドを呼び出して、アクティブのLiノードは、このクラスを削除し、以降addClass()メソッドと呼ばれ、それぞれ1つの操作を実行するために、引き返すクラスを追加し、印刷現在のLi・ノードの内容で出力。

結果:

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

あなたは三回出力、このクラスは除去される第2の出力ノードに活性なリチウムの合計を行い確認することができ、そして第三のクラスが再び追加されます。

だから我々addClass()、removeClass()これらのメソッドは、動的にクラス属性ノードを変更することができます。

ATTR、テキスト、HTML

もちろん、クラス属性の操作に加えて、特定の属性を操作するがATTR()メソッドは、コンテンツのテキスト()、HTML()メソッドでノードに変更することができます。

私たちは、インスタンスを感じます。

html = '''
<ul class="list">
     <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
</ul>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.text('changed item')
print(li)
li.html('<span>changed item</span>')
print(li)

ここでは、最初のliノードにチェックし、プロパティを変更するのattr()メソッドを呼び出して、最初の引数が二番目のパラメータの名前は、属性値がされている、そして我々は、テキスト()とhtml()ノードを変更するためのメソッドを呼び出します内部コンテンツ。3つの操作の後に、それぞれ、現在のLiノードをプリントアウト。

結果:

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active" name="link">changed item</li>
<li class="item-0 active" name="link"><span>changed item</span></li>

見つけることができる、コールATTR()メソッドは、後に、テキスト()メソッドを呼び出して、名前、リンクの価値を提示していない李よりノード属性は、入ってくるテキストの後、全体の内部のliノード上で見つかったテキストを渡すように変更されテキスト文字列に。()メソッド着信HTMLテキストHTMLを呼び出した後、李内部ノードは、着信HTMLテキストに変更されました。

二番目のパラメータに渡されたのであれば、最初の引数渡された属性名は、プロパティ値を取得する場合にのみのattr()メソッドは、あなたがいない場合、属性値、テキスト()とhtml()メソッドを変更するために使用することができますノードを取得するためにパラメータを渡すことは、パラメータの割り当てに渡された場合は、プレーンテキストとHTMLテキスト内にあります。

取り除きます

削除示唆名前を削除し、()メソッドを削除し、時には情報を抽出するために大きな利便性をもたらすことができます。例を見てみましょう:

html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())

ここではHTMLテキストがあり、我々は今、これを抽出する方法を、世界の文字列、および文字列は、p内部ノードません、こんにちは抽出したいですか?

ここでは、参照するには、コンテンツをラップクラスノードを抽出するための最初の直接の試みは、以下のような結果であるが、我々が望むものではありませんしています。

Hello, World This is a paragraph.

しかし、この結果は、また、内部ノードpの内容を含む全体から抽出し、そのテキスト()すべての平文。私たちは、ノードp内のテキストを取り除きたい場合は、テキストが再びPノードの抽出に選択することができ、その後、全体の結果から部分を削除しますが、このアプローチは、明らかに、より複雑。

まあ、これは、remove()メソッドが便利になることができ、我々はその後、次の操作を行うことができます:

wrap.find('p').remove()
print(wrap.text())

私たちは、まずそれを削除するには、remove()メソッドを呼び出し、その後、左の内側ラップにこんにちは、世界はこの文は、テキスト()メソッドを抽出するために使用することができ、ノードpを選択しました。

だから、私たちの抽出を容易にするために、いくつかの冗長なコンテンツを削除するには()メソッドを削除します。適切な時間の使用で大幅に効率を向上させることができます。

実際に、このような追記())(空、プリペンド()メソッドなどの付加ノード演算における多くの方法があり、それらはjQueryの使用はまったく同じ、詳細な使用方法は、公式文書を参照することができています。http://pyquery.readthedocs.io ...

8.擬似クラスセレクタ

CSSセレクタが堅調に推移しました、非常に重要な理由は、それが擬似クラスセレクタを幅広くサポートしていることでもあります。たとえば、最初のノード、最後のノード、パリティノードの数、テキストが含まれている、というように、私たちが感じることの例を使用してノードを選択します。

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')
print(li)
li = doc('li:last-child')
print(li)
li = doc('li:nth-child(2)')
print(li)
li = doc('li:gt(2)')
print(li)
li = doc('li:nth-child(2n)')
print(li)
li = doc('li:contains(second)')
print(li)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

ここでは、2番目のテキストを含む第1のノードのLiを選択CSS3疑似クラスセレクタ順次、リー最後のノード、第2ノードリチウム、第3ノード以下のLiリチウム、リチウム・ノードであっても位置を、使用します李ノードは、非常に強力です。

9.おわり

presentation.thank上の一般的な使用のこれまでのところPyQuery

おすすめ

転載: blog.51cto.com/14445003/2426470