前提・実現したいこと
スクレイピング初学者です. このサイトを参考に自分でも何か作ってみようと思っていました.
https://qiita.com/Fujimon_fn/items/16adbd86fad609d993e8
そこでこのサイトで紹介されていたCSSセレクタの指定の方法についての質問です.
なぜこのようなCSSセレクタになっているのか文法がわかりません.
2つある"[0]"などが特にわからないので教えていただけると嬉しいです.
該当のソースコード
python
1#時間が書かれた部分をCSSセレクタで指定し、テキストを抜き出す 2time = soup.select(".routeSummary li.time")[0].select("span")[0].text
html
1<dl class="routeSummary"> 2 <dt> 3 <dd> 4 <ui> 5 <li class="time"> 6 <span>22:40発→<span class="mark">22:54着</span></span> 7
試したこと
python
1#時間が書かれた部分をCSSセレクタで指定し、テキストを抜き出す 2time = soup.select("#route01 > dl > dd:nth-of-type(1) > ul > li.time > span").text
サイトの通りにやればもちろんうまくいきます. しかしサイトの文法を理解することができなかったので, 私はchromeのcopyselectorを参考にして, その部分をこのコードに変えました. しかし以下のようなエラーが出ます.
AttributeError: ResultSet object has no attribute 'text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
エラーの意味もあまりわかりません.
> なぜうまくいかないのでしょうか.
対象のhtmlはどうなっているのでしょうか? どう”うまくいかない”のでしょうか?
追記しました. CSSセレクタの文法ミスが原因だと思われるので教えていただけると嬉しいです.
Chromeの「copy selector」を使用したコードでエラーが出たのですか?であればサイトにアクセスする度に結果のhtmlが変わるということでしょうか?
BearutifulSoupのCSSセレクタの使い方については結果がリストになるのだと思います。詳細については検索してください。色々説明記事が見つかります。
selectメゾッドは結果をリストで返すのですね. そのことに留意した結果, 自分で作成したコードもselect_oneとすることでうまくいきました. 答えていただきありがとうございます.
回答1件
あなたの回答
tips
プレビュー