PythonクローラーXPathの構文を1つの記事で紹介
この記事はWeChat: "アルゴリズムとプログラミングの美学"から転載したものです。
I. 問題の説明
1. XPath とは何ですか?
xpath
はクラスで
XML
と
HTML
で使用できる、ドキュメント内の情報を検索するための言語です。
XML
と
HTML
要素や属性が文書内で走査されると、XPath はパス表現を用いてそれらを選択します。
XML
文書内のノードやノードの集合を選択するために、パス表現を使用します。これらのパス表現は、通常のコンピュータのファイルシステムで見られる表現と非常によく似ています。
II. 解決方法
1. XPathの構文
学習するには
xpath
を理解する必要があります。
html
というノードがあります。
<div>
<ul>
<li class="item-0"><a href="link1.html" rel="external nofollow" >first item</a></li& gt;
<li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li& gt;
<li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a>& lt;/li>
<li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a>& lt;/li& gt;
<li class="item-0"><a href="link5.html" rel="external nofollow" >fifth item</a> # Note that there is a missing a </li> closing tag
</ul>
</div>
上記はインターネットで見つけた適当なhtmlテキストですが、divタグの下にulタグ、ulタグの下にliタグがあり、htmlタグが木のように一段になっていることが観察できます。例えばある人の位置を知るには、まずその人が中国にいると判断し、次に省、市、近隣と判断し、最終的にその人を見つけることになるのです。
<テーブル
表現方法
説明
ノードネーム
このノードのすべての子を選択する bookstore bookstore の下のすべての子を選択する
/
一番上にある場合は、ルートノードから選択されていることを意味します。それ以外の場合は、あるノードの下にあるノードを選択します /bookstore は、ルート要素の下にあるすべての bookstore ノードを選択します
//
グローバルノードからノードを選択、任意の場所 //book グローバルノードからすべてのブックノードを検索
@
ノードの属性を選択する //book[@price] price属性を持つすべてのブックノードを選択する
.
現在のノード
テキスト()
タグの中のテキストを取得する
兄弟タグは、以下のように使用することができます。
li[1]
,
li[2]
,
li[3]
を取得する方法は
2. lxml ライブラリ
を簡単に紹介します。
lxml
ライブラリは、次に使用します。
lxml
は、H
TML
/
XML
パーサーの主な機能は、どのようにパースして
HTML
/
XML
のデータを使用します。
lxml
レギュラーと同じくC言語で実装され、高性能な
PythonHTML
/
XML
パーサーを使用すると、以前に学習した XPath 構文を使用して、特定の要素やノード情報をすばやく見つけることができます。
3. 実践例
ランダムなサイトをクロールして、そのサイトが見つけた
html
テキスト
以下に示すとおりです。
を見つけるには
title
と
href
であり、よく見ると、パスが
//div[@id="resultList"]/div[@class="el"]/p/span/a/@title
//div[@id="resultList"]/div[@class="el"]/p/span/a/@href
以下のように実行されます。
III. 結論
Xpath
は、クローラーでデータを抽出する一般的な方法のひとつで、通常の
xpath
課題は、データがどこにあるのかを正確に判断することです。
PythonクローラーXPath構文についての記事は以上となります。PythonクローラーXPath構文については、Script Houseの過去記事を検索いただくか、引き続き以下の記事をご覧ください。
関連
-
[解決済み】「pymysql」という名前のモジュールがない
-
に対する解決策です。RuntimeError: 巡回辞書操作時に反復処理中に辞書サイズが変更された。
-
for elseの特殊機能を学ぶpythonの入門編
-
[解決済み] 文字列の先頭と末尾のゼロを削除するには?Python
-
[解決済み] Django の datetime の問題 (default=datetime.now())
-
[解決済み] 初回実行時のFlask 開発用サーバーを本番環境で使用しないこと
-
[解決済み] 基本的なTensorflowのサンプルを実行するとエラーになる
-
[解決済み] Python: snmp の timeticks を秒/日などに変換する。
-
[解決済み] PythonでcurlからJSONファイルを読み込む
-
PythonでValueError: not enough values to unpack (expected 2, got 1)が発生する原因と解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] pandasで1つの列を除くすべての列を選択する方法は?
-
[解決済み] 'MyClass' オブジェクトには '__getitem__' という属性がありません。
-
[解決済み] list' オブジェクトには 'shape' という属性がありません。
-
[解決済み] Python IOError: ファイルが読み出し用に開かれていません
-
[解決済み] python pandas のインデックスを datetime に変換する
-
[解決済み] IDLEで行番号をオンにするには?
-
[解決済み] Python pandasで共起行列を構築する
-
[解決済み] Pythonでソースファイル名と行数を記録する方法
-
[解決済み] crontabスタイルの行のパース
-
python3 実行エラー。TypeError: タイプ 'type'のオブジェクトは、JSONシリアライザブルソリューションではありません。