pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

Xpathのパス指定メモ

パス省略(//)は複数使ってもOK?

サンプルコード

# -*- coding: utf-8 -*-
from lxml import html

a = """
<html>
    <head>
        <title>Sample</title>
    </head>
    <body>
        <div>
            <h1 class="title1">Sample #01</h1>
        </div>
        <div>
            <h1 class="title2">Sample #02</h1>
        </div>
        <div>
            <h1 class="title3">Sample #03</h1>
        </div>
    </body>
</html>
"""

print('### フルパス指定')
a = html.fromstring(a)
b = a.xpath("/html/body/div/h1")
for i in b:
  print(i.text)
print('')


print('### フルパス指定+条件付き')
b = a.xpath("/html/body/div/h1[@class='title1']")
for i in b:
  print(i.text)
print('')


print('### 省略パス// 指定')
b = a.xpath("//h1[@class='title1']")
for i in b:
  print(i.text)
print('')


print('### 2重省略パス// 指定')
b = a.xpath("//body//h1[@class='title1']")
for i in b:
  print(i.text)
print('')


print('### ワイルドカード指定')
b = a.xpath("/html/*/*/h1[@class='title1']")
for i in b:
  print(i.text)
print('')


print('### 間違った省略パス指定')
b = a.xpath("//body/h1[@class='title1']")
for i in b:
  print(i.text)
print('')


print('### 間違ったワイルドカード指定')
b = a.xpath("/html/*/h1[@class='title1']")
for i in b:
  print(i.text)

実行結果

### フルパス指定
Sample #01
Sample #02
Sample #03

### フルパス指定+条件付き
Sample #01

### 省略パス// 指定
Sample #01

### 2重省略パス// 指定
Sample #01

### ワイルドカード指定
Sample #01

### 間違った省略パス指定

### 間違ったワイルドカード指定