Webスクレイピングは、Python開発者、データサイエンティスト、Webスクレイピング愛好家にとって必須のスキルとなっています。分析のためにデータを抽出するにしても、価格比較ツールを構築するにしても、コンテンツ抽出を自動化するにしても、ウェブ解析はこれらのタスクの中核にあります。しかし、ウェブ解析が効率的で初心者に優しいのはなぜでしょうか?ParselはHTMLの解析とデータ抽出を簡素化するPythonの強力なライブラリです。
ParselはHTML/XMLの解析とデータ抽出のために設計された軽量なPythonライブラリです。Webスクレイピングを念頭に構築されたParselは、XPathや CSSのような強力なセレクタを使用して、Webページの構造を簡単に操作できます。これらのツールにより、ウェブページから特定の要素や属性を正確に探し出し、抽出することができます。ParselはPythonのエコシステムと統合されているため、Webコンテンツを取得するための`requests`や`httpx`のようなライブラリとシームレスに動作します。
HTML構文解析とは、HTMLドキュメントをタグ、属性、DOM(Document Object Model)などの構造要素に分解するプロセスです。パーセルはこの構造を利用して、必要なデータを正確に探し出し、抽出します。
HTML文書は
<h1>
, <p>
, <img>
).アイドル
, クラス
, href = "/stock/stock_detail.html?
).XPathと CSSセレクタは、HTML文書内の要素を選択するために使用されるクエリ言語です:
セレクターについて詳しくはこちら
パーセルを使い始める前に、以下のことを確認してください:
pipinstallparsel requests
Parselでは、クラス名や IDを知るだけで、要素を解析することができます。これは、データ抽出のためにウェブページ内の特定の要素をターゲットにする場合に特に便利です。
デモンストレーションのために、次のように使う。 ウェブサイト例.ここでは、クラス名 プロダクトポッド
これは1つのブックエントリーを表す。
以下はそのHTML構造の例である:
この要素から抽出する:
インポートリクエスト
fromparsel import セレクター
# ウェブページを取得する
url ="https://books.toscrape.com/"
レスポンス = requests.get(url)
セレクタ = セレクタ(response.text)
# 最初の商品をクラスで選択する
product = selector.css("article.product_pod").get()
# 選択された商品から詳細を解析する
product_selector = セレクタ(text=product)
title = product_selector.css("h3 a::attr(title)").get()
価格 = product_selector.css("p.price_color::text").get()
在庫状況 = product_selector.css("p.instock.availability::text").get().strip()
print("タイトル:", タイトル)
print("価格:", 価格)
print("在庫状況:", 在庫状況)
スクリプトの説明
ゲット
リクエストを例のウェブサイトに送り、そのHTMLコンテンツを取得する。article.product_pod
をクリックして、そのページから最初のブックエントリーを選択する。プロダクトポッド
ブロックに入った。タイトル 屋根裏の光
価格:51.77ポンド
在庫あり在庫あり
ParselはHTML要素からテキストを簡単に抽出します。それがタイトルであれ、説明文であれ、あるいはウェブページ上の他の可視コンテンツであれ。
デモンストレーションのために、同じ ウェブサイト例 再びメソッドを使って1冊の本のタイトル・テキストを抽出することに焦点を当てる。 h3
タグは、クラス プロダクトポッド
.
以下はそのHTML構造の例である:
この要素から抽出する:
インポートリクエスト
fromparsel import セレクター
# ウェブページを取得する
url ="https://books.toscrape.com/"
レスポンス = requests.get(url)
セレクタ = セレクタ(response.text)
# 最初の商品をクラスで選択する
product = selector.css("article.product_pod").get()
# 選択された商品からタイトルテキストを解析する
product_selector = セレクタ(text=product)
title_text = product_selector.css("h3 a::attr(title)").get()
print("Title Text:", title_text)
ゲット
リクエストを使用して、ウェブサイトからHTMLコンテンツを取得する。プロダクトポッド
CSSセレクタは最初のブックエントリーをターゲットとする。h3 a::attr(title)
スクリプトは、title 属性を <a>
タグに入れ子になっている。 <h3>
タグを付けている。タイトルテキスト屋根裏の光
Parselでは、HTML要素からhref、src、altなどの属性値を抽出することもできます。これらの属性には、URLや画像ソース、説明テキストなどの貴重なデータが含まれていることがよくあります。
ここでは、リンク (href = "/stock/stock_detail.html?
)から本の詳細ページに移動する。 <a>
タグを 記事
要素に プロダクトポッド
.
以下はそのHTML構造の例である:
この要素から抽出する:
href = "/stock/stock_detail.html?
) 本の詳細ページへインポートリクエスト
fromparsel import セレクター
# ウェブページを取得する
url ="https://books.toscrape.com/"
レスポンス = requests.get(url)
セレクタ = セレクタ(response.text)
# 最初の商品をクラスで選択する
product = selector.css("article.product_pod").get()
# 選択された商品から'href'属性を解析する
product_selector = セレクタ(text=product)
book_link = product_selector.css("h3 a::attr(href)").get()
print("Book Link:", book_link)
スクリプトの説明
書籍リンク:カタログ/a-light-in-the-attic_1000/index.html
Parselを使用すると、CSSまたはXPathセレクタを使用してWebページから複数の要素を簡単に抽出できます。これは、商品のタイトル、リンク、価格などのリストを扱うときに特に便利です。
ここでは、このチュートリアルで使用するサンプルウェブサイトのホームページに表示されているすべての書籍タイトルのリストを抽出することに焦点を当てます。
以下は、関連するHTML構造の例である:
これらの要素から、我々は抽出する:
インポートリクエスト
fromparsel import セレクター
# ウェブページを取得する
url ="https://books.toscrape.com/"
レスポンス = requests.get(url)
セレクタ = セレクタ(response.text)
# 全ての本のタイトルを選択
book_titles = selector.css("article.product_pod h3 a::attr(title)").getall()
# それぞれのタイトルを表示する
fortitleinbook_titles:
print("Title:", title)
スクリプトの説明
ゲット
リクエストを使用して、ウェブサイトからHTMLコンテンツを取得する。 article.product_pod h3 a::attr(title)
をすべて選択する。 <a>
タグ内 <h3>
タグ プロダクトポッド
要素がある。.getall()
メソッドは、一致するすべてのタイトルのリストを取得します。タイトル 屋根裏の光
タイトルベルベットの傾き
タイトル想い
タイトルシャープ・オブジェクト
Parselは、CSSセレクタとXPathを使用して、複雑なネストされたHTML構造の効率的なナビゲーションを可能にします。これは、HTMLタグの複数のレイヤーの奥深くに埋もれているデータを抽出する場合に特に有用です。
の中から本の価格を抽出する。 プロダクトポッド
要素である。
以下は、関連するHTML構造の例である:
この入れ子構造から、我々は抽出する:
インポートリクエスト
fromparsel import セレクター
# ウェブページを取得する
url ="https://books.toscrape.com/"
レスポンス = requests.get(url)
セレクタ = セレクタ(response.text)
# 最初の商品をクラスで選択する
product = selector.css("article.product_pod").get()
# ネストされた価格要素を解析する
product_selector = セレクタ(text=product)
価格 = product_selector.css("div.product_price p.price_color::text").get()
print("価格:", 価格)
スクリプトの説明
プロダクトポッド
.div.product_price p.price_color
を選択すると、divの中に移動して p
タグが含まれている。.get()
メソッドは価格値を取得します。価格:51.77ポンド
Parselは、HTMLのリストやテーブルのようなフォーマットから構造化データを抽出するプロセスを簡素化します。ウェブサイトは、商品グリッドや順序付きリストのような繰り返しパターンで情報を表示することが多く、Parselはこのようなデータを効率的に取り込むために不可欠なツールです。
例として、同じ ウェブサイト例.私たちの目標は、本のタイトルとその価格のリストを抽出することです。具体的には <ol>
タグは、複数の <li>
要素があり、それぞれが個々の本を表す。
以下は、関連するHTML構造の例である:
この構造から、私たちは抽出する:
import requests
from parsel import Selector
# Fetch the webpage
url = "https://books.toscrape.com/"
response = requests.get(url)
selector = Selector(response.text)
# Select all book items in the list
books = selector.css("ol.row li.article")
# Loop through each book and extract title and price
for book in books:
title = book.css("h3 a::attr(title)").get()
price = book.css("p.price_color::text").get()
print(f"Title: {title} | Price: {price}")
ol.row
記事
すべて <li> 要素を順序付きリスト (<ol>)は、個々の書籍項目を表す。h3 a::attr(title)
のtitle属性を抽出する。 <a>
タグを付ける。--- p.price_color::text
から価格テキストを取り出す。 <p>
タグを付けている。タイトル A 光 で 屋根裏 屋根裏の光 | 価格 £51.77
タイトル ティッピング ザ ベルベット | 価格 £53.74
タイトル ミッション | 価格 £50.10
タイトル シャープ オブジェクト | 価格 £47.82
...
このチュートリアルでは、Parselを使ったPythonでのWeb解析の基礎を探りました。基本的なセレクタの理解から、ネストした要素のナビゲート、属性の抽出、リストの解析まで、ParselがWebページから意味のあるデータを抽出するプロセスをどのように簡素化するかを示しました。
ここで、私たちが取材した内容を簡単に振り返ってみよう:
Parselはウェブスクレイピングツールキットの強力なツールであり、これを使いこなすことでデータ収集と分析の機会が無数に広がる。
ハッピー・パース!