【Python入門】XPathでスクレイピングする手順をわかりやすく解説!

この記事ではPythonのXPathについて解説をしたいと思います。

XPathではWebスクレイピングをすることが出来ます。

PythonでWebスクレイピングをしたい。
Pythonで効率的にHTMLデータを解析したい。

今回の記事ではこのように思っている方に向けて、

【基礎】XPath、スクレイピングとは
【基礎】urllibやlxmlなどの必要なパッケージについて
【実践】スクレイピングをする方法

について解説をしていきます。

PythonでWebスクレイピングをしてみましょう!

XPathとは

XPath(XML Path Language)は、XMLの中の要素属性などを指定するための言語です。

XMLでしか使えないようにも見えますが、HTMLもXMLの一種としてみなすことでHTMLのコードに対しても使うことが出来ます。

このXPathを使うことができればHTMLのコードにある特定の要素属性のデータを取得することが出来ます。

HTMLについて分からない方は、ぜひこちらの記事をご覧ください。

HTMLとは?初心者でも分かる基礎知識から書き方まで詳しく解説
更新日 : 2020年6月22日

スクレイピングとは

スクレイピングとは、特定のWebサイトから必要な情報抽出することを言います。

Webサイトから必要な情報だけをスクレイピングして新しくスマートフォン向けのWebサイトを作ったり、会社に関係する内容だけをスクレイピングしてデータの解析に役立てたりすることが出来ます。

詳しくはこちらの記事をご覧ください。

【初心者向け】PythonでWebスクレイピングをしてみよう!手順まとめ
更新日 : 2020年5月20日

スクレイピングに必要なパッケージ

Pythonでスクレイピングを行うためにはいくつかの方法があります。

中でも今回のXPathを使ってスクレイピングをするためには、urllibとlxmlを使う必要があります。

urllibでは、インターネット上からHTMLコードを取得します。

lxmlでは、取得したHTMLコードを解析して必要な情報だけを取り出します。

それではそれぞれのパッケージについて見ていきましょう。

urllibとは

urllibはPythonからURLにアクセスしたり、インターネット上のファイルを取得したりすることができるパッケージです。

特にurllib.requestを使って、特定のページのHTMLコードを取得します。

詳しくはこちらの記事をご覧ください。

【Python入門】urllibを使ってファイルをダウンロードしよう
更新日 : 2020年5月8日

lxmlとは

lxmlはXMLの構文を解析するためのパッケージです。

今回は特に、lxml.htmlを使って、HTMLコードを解析していきます。

lxmlは標準でプリインストールされていないので、pipを使って自分でインストールをする必要があります。

このコマンドを実行してインストールをしておきましょう。

pip install lxml

スクレイピングをする方法

それでは早速スクレイピングをしてみましょう。

ここからは順を追って解説していきます!

urllibとlxmlをimportする

まずは必要なパッケージを使えるようにimportをしておきましょう。

from urllib import request
from lxml import html

importの方法についてはこちらの記事をご覧ください。

はじめてのPython!パッケージをimportする方法をやさしく解説!
更新日 : 2020年5月21日

HTMLを取得する

次は目的のサイトのHTMLを取得してみましょう。

今回は example.com をスクレイピングしてみます。

こちらのコードをご覧ください。

from urllib import request
from lxml import html

URL = "http://www.example.com"
data = request.urlopen(URL)
html = data.read()
print(html)

実行結果

b'<!doctype html>n<html>n<head>n    <title>Example Domain</title>nn    <meta charset="utf-8" />n    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />n    <meta name="viewport" content="width=device-width, initial-scale=1" />n    <style type="text/css">n    body {n        background-color: #f0f0f2;n        margin: 0;n        padding: 0;n        font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;n        n    }n    div {n        width: 600px;n        margin: 5em auto;n        padding: 50px;n        background-color: #fff;n        border-radius: 1em;n    }n    a:link, a:visited {n        color: #38488f;n        text-decoration: none;n    }n    @media (max-width: 700px) {n        body {n            background-color: #fff;n        }n        div {n            width: auto;n            margin: 0 auto;n            border-radius: 0;n            padding: 1em;n        }n    }n    </style>    n</head>nn<body>n<div>n    <h1>Example Domain</h1>n    <p>This domain is established to be used for illustrative examples in documents. You may use thisn    domain in examples without prior coordination or asking for permission.</p>n    <p><a href="http://www.iana.org/domains/example">More information...</a></p>n</div>n</body>n</html>n'

これは先程紹介したurllibの解説記事とほぼ同じコードになります。

URLを指定して、そこからダウンロードしたHTMLを表示させています。

インターネット上からHTMLを取得することは出来たので、次はこのHTMLコードから必要な部分抽出します。

今回はh1を抽出してみましょう。

使いたい要素を指定する

先程まではすべてurllibを使った操作でしたが、これからはlxmlを使ってHTMLの必要な部分のみを抽出してみます。

こちらのコードをご覧ください。

from urllib import request
from lxml import html

URL = "http://www.example.com"
data = request.urlopen(URL)
raw_html = data.read()
html = html.fromstring(str(raw_html))
title = html.xpath("/html/body/h1")
print(title)

実行結果

Example Domain

このコードでは、取得したHTMLのコードから、lxml.htmlのXPathを使ってh1を取得しています。

無事に取得出来ていますね。

ややこしいコードに見えますが、基本的にはダウンロードしたコードにXPathで指定した形式の部分をtitleに入れているだけの作業です。

まとめ

この記事ではPythonでXPathを使う方法について解説をしてきました。

XPathやスクレイピングとは何かについて分かっていただけたでしょうか。

Pythonはスクレイピングでもよく使われていて、紹介した他にも様々な手法が使われています。

ぜひ調べてみてください。

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー