Xpathメモ:良く使うけど良く忘れる関数やTIPS

2018年11月18日

アドレスに特定の文字列が含まれているものをピックアップ

前方検索であればstarts-withを使い、全文検索であればcontainsを使う。
startではなくstarts、containではなくcontainsなので注意。

response.xpath('//li/a[starts-with(@href, "http://")]').extract()

とか

response.xpath('//li/a[contains(@href, "http://")]').extract()

子要素のタグを無視して文字列を取得する

textでタグ内の文字列を取得できる。
しかし、<b>とかで囲われているとその部分は無視されてしまう。


# block の中身は "<a><b>インディアン</b> 本店 - 蓮沼/ラーメン [食べログ]</a>"

print(block.xpath('text()').extract_first())

>  本店 - 蓮沼/ラーメン [食べログ]


stringを使えば子要素の文字列も取得できる。


print(block.xpath('string()').extract_first())

> インディアン 本店 - 蓮沼/ラーメン [食べログ]

stringが取得できない時

↓これだとエラーになる場合があった


response.xpath('//*[@class="discription"][1]/string()').extract()

一回変数に入れた後だとOK


block = response.xpath('//*[@class="discription"][1]')
block.xpath('string()').extract()