如何从具有 div class 值的跨度中获取文本和值在美丽的汤 python 中?

How to get text and value from span with div class value in beautiful soup python?

我有一个元素 return 位于 [33] 位置,我的代码如下。

<span>Beli 4 :<div class="d-inline" currency-format="IDR" value="2500"></div>/ pcs</span>

来自 https://alfagift.id/p/aice-mochi-ice-cream-klepon-45-ml-772306

我正在尝试 return Beli 4 : Rp 2.500 / pcs

但是我很难做到。

我目前的代码 return 全部跨度。

item = soup.select('span', {"currency-format":"USD"}) 

如何获取 div class 中的跨度文本和值?

您可以通过调用 .text 获取文本,但您应该知道,您使用的是 select_one() 而不是 select,因为无法在 [=17] 上调用它=] 和:

item = soup.select_one('span').text

还有一个问题,你好像是找USD的元素,但是只有一个IDS值,所以更精确的选择是:

item = soup.select_one('span:has([currency-format="IDR"])').text

以防万一,如果你必须使用多个元素/ResultSet你必须对其进行迭代:

from bs4 import BeautifulSoup

html = '''
<span>Beli 4 :<div class="d-inline" currency-format="IDR" value="2500">Rp 2.500</div>/ pcs</span>
<span>Beli 5 :<div class="d-inline" currency-format="IDR" value="2500">Rp 2.500</div>/ pcs</span>
<span>Beli 6 :<div class="d-inline" currency-format="IDR" value="2500">Rp 2.500</div>/ pcs</span>
'''

soup = BeautifulSoup(html)

for e in soup.select('span:has([currency-format="IDR"])'):
    print(e.text)

输出:

Beli 4 :Rp 2.500/ pcs
Beli 5 :Rp 2.500/ pcs
Beli 6 :Rp 2.500/ pcs

试试这个:

response = BeautifulSoup(driver.page_source, 'html.parser')
response.select_one("span[currency-format*=IDR]").text