[Python] lxmlでhrefやsrcの値を取得する

python

Pythonでスクレイピングをした時にh1やtitleタグの中身はtextで簡単に取得できますが、aタグのリンクやimgタグのsrcの値を取得する時にはどのようにしたらいいのでしょうか?

その方法を紹介していきます。

やりたいこと

Pythonで所定のサイトをスクレイピング。そこから所定の値を取得したい。

例えば、ページのタイトルはタイトルタグからtextを指定すればいいだけなので割と簡単にできます。

xxx.cssselect('h1')[0].text

同じような感じでimgタグの値を取得すると、

xxx.cssselect('img')[0].text
> none

うまく行きません。

xxx.cssselect('img')[0]
> [<Element img at 0x10f113598>]

こっちもうまくいかず。取得したいのは上記ではなく、https://xxx.jpgなどの値です。

 

やったこと

imgタグのsrcの値を取得したい時は下記のように記述すればOKです。

xxx.cssselect('img')[0].get("src")
> https://xxx.jpg

getメソッドの引数に取得した値を入れます。これでsrcの値、つまり画像URLを取得することができました。

 

aタグ内のhref属性を取得したい時にはこのようになります。

xxx.cssselect('a')[0].get("href")
> https://xxx.html

 

特定の文字列を含むimgやaタグを取得する

上記のコードだとページ内のimgタグ全てを取得してしまいます。それでOKな時もあると思いますが、特定の文字列を含むタグだけ取得したい場合もあると思います。

# srcの値で最後にjpgを含むものだけを抽出
cssselect('img[src$="jpg"]')

# srcの値で最後にthumbnail.jpgを含むものだけを抽出
cssselect('img[src$="thumnail.jpg"]')

 

あるクラス直下にあるimgタグを取得する

あるdivクラス直下にあるimgタグを取得するには以下のように書きます。

ここではこのようなコードを想定します。

<div class="top_image">
  <img xxx>
</div>
cssselect(.top_image > img)


カテゴリー