[Python] lxmlでhrefやsrcの値を取得する
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)