Xpathがわからない。
capybaraとXpathを使ってrubyスクレイピングをしようとしています。
まず添付画像を御覧ください。
ゴールは添付画像のurl部分を(文字列として)抽出することです。(末尾がclans/7.pngみたいになってるやつです)
条件として、添付画像のように、親要素の親要素のクラスに "checkedin"を含むこと。
(画像では省略されていますが、本来のソースコードでは添付画像の一番上の要素に類するものがいくつも並んでいます。その中から、画像のように "checkedin" を含むものを抽出しようとしています)
親要素の親要素の条件を指定しない場合は
images = session.find_all(:xpath, '//img[contains(@src,"clans")]')
puts images[i][:src]
といったコードでURLを抽出できたのですが、上述の条件を指定する場合にどのような記述をすれば良いかわかりません。
checkedin = session.find_all(:xpath, 'tr[contains(@class,"checkedin") and .//img[contains(@src,"clans")]]')
と書いたり他色々試しましたが、全てエラーです。
上述の条件を指定して記述するにはどうすればいいのでしょうか。。
(先祖要素の条件指定でなく、まず先祖要素の条件を指定してから子要素のurl抽出をするのもあると思いそれっぽい手法を試しましたが、capybaraそのものが良くわかっておらずエラーになります)
(ちなみにcapybaraを使っているのは、以前質問した時におすすめされたからです。
詳細URL→https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13198824358
本当はnokogiriでやりたかったのですが、nokogiriですとurl部分が正常に取得できませんでした。
nokogiriでもurl部分を正しく抽出できる方法があれば是非教えてください。capybaraよりnokogiriの方が使いやすいので。。)
質問の回答になっていないそもそも論は禁止でお願いします。(python使え等)
お礼
早速の回答ありがとうございます。 試してみたのですが、<p></p>の中に<br>が含まれているせいでしょうか、<p>内全てを拾えませんでした… できればBとCを一つの結果として出したいのですが、Bの結果、Cの結果、というように別々に出てきてしいました。