前提・実現したいこと
python seleniumでウェブサイトをスクレイピングするプログラムを作成しています。
次のようなHTMLで記述されたウェブサイトの数値を取得する方法を教えてほしいです。
下記のように、<li>...</li>でくくられた項目が複数あります。
その中の「item-name」を検索し、指定した文字と同じものがあった場合、
その下の「number」の数値を取得したいです。
例:検索文字が「ABCD」の場合、「5」の数値を取得したい。
初歩的な質問かと思いますが、よろしくお願いいたします。
HTMLの例
html
1<li> 2 <div class="item-name"> 3 ABCD 4 </div> 5 <div> 6 <span class="count"> 7 <i class="number">...</i> 8 <span>5</span> 9 </span> 10 <span>...</span> 11 </div> 12</li> 13<li> 14 <div class="item-name"> 15 EFGH 16 </div> 17 <div> 18 <span class="count"> 19 <i class="number">...</i> 20 <span>9</span> 21 </span> 22 <span>...</span> 23 </div> 24</li> 25<li>...</li>
試したこと
色々調べながらテキストを検索するとこまではできましたが、その後numberの数値を探す方法がわかりません。
python
1name = "ABCD" 2link = driver.find_element_by_partial_link_text(name) 3print('itemがあります')
補足情報(FW/ツールのバージョンなど)
python3.8
selenium 3.141
追記
頂いた回答を元に作成してみましたが、エラーが出てしまいます。
なにか考えられる原因ありますでしょうか?
python
1name = "ABCD" 2number = driver.find_element_by_xpath("//div[contains(text(), name)]/following-sibling::div/span[1]/span/text()") 3print(number)
とすると、エラー「Message: invalid selector: The result of the xpath expression "//div[contains(text(), name)]/following-sibling::div/span[1]/span/text()" is: [object Text]. It should be an element.」
が出ます。
"/text()"を除いて下記のようにした場合
python
1name = "ABCD" 2number = driver.find_element_by_xpath("//div[contains(text(), name)]/following-sibling::div/span[1]/span") 3print(number)
エラーは出ず、
<selenium.webdriver.remote.webelement.WebElement (session="xxxxxx", element="xxxxxx")>
と出力されます。(xxxxは数字とアルファベットの文字列)
「It should be an element(エレメントじゃないとダメ)」ということなのですが意味がよくわかりません。
申し訳ありませんがヒントを頂けますでしょうか。
解決方法
皆様から頂いた回答をベースに、希望する動作ができました。
最終的なものを記載しておきます。
python
1name = "ABCD" 2number = driver.find_element_by_xpath("//div[contains(text(), '" + name + "')]/following-sibling::div/span[1]/span") 3print(number.text)
※検索する文字を変数(name)に入れると、[contains(text(), name)] ではうまく行かなかったため
[contains(text(), '" + name + "')] としました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/14 01:55 編集
2021/01/14 11:29
2021/01/14 13:03
2021/01/15 01:15 編集
2021/01/15 00:25
2021/01/15 00:49
2021/01/15 01:16