beautifulsoup 查找特定标签

1 投票
1 回答
872 浏览
提问于 2025-04-17 21:17

我开始学习使用beautifulsoup,但遇到了一个我解决不了的问题。

我有这个网站,想要提取物品的价值。这个价值可以在

<span class="gw2money-fragment">%value <i class="gw2money-silver">s</i></span>

标签之间找到,

<span class="gw2money-fragment">%value <i class="gw2money-copper">c</i></span>. 

提取这些值并不难,问题在于要检查这个值是否在<i class="gw2money-silver">或者<i class="gw2money-copper">标签里面。

r = requests.get("http://www.gw2spidy.com/item/24467", proxies=proxyDict)

soup = BeautifulSoup(r.text)
checksoup = soup.find_all("span")

numliste = []
for links in checksoup:
    #print(links) 
    price = links.contents[0]
    print(price)    

del numliste[0]
print(numliste)

这是我目前获取铜币和银币值的方法。

1 个回答

3

我会先找一下 gw2money-fragment 这个类,然后再测试一下它里面的 i 元素是什么样的:

for row in soup.find_all('tr'):
    fragments = row.find_all('span', class_='gw2money-fragment')
    if not fragments:
        continue
    label = row.th or row.td
    print(label.text)
    for fragment in fragments:
        value = fragment.text.split()[0]
        type_ = fragment.i['class'][0].rsplit('-', 1)[-1]
        print('-', value, type_)

示例:

>>> for row in soup.find_all('tr'):
...     fragments = row.find_all('span', class_='gw2money-fragment')
...     if not fragments:
...         continue
...     label = row.th or row.td
...     print(label.text)
...     for fragment in fragments:
...         value = fragment.text.split()[0]
...         type_ = fragment.i['class'][0].rsplit('-', 1)[-1]
...         print('-', value, type_)
... 
Sell Price: 
- 1 silver
- 50 copper
Buy Price: 
- 1 silver
- 32 copper

Topaz Nugget

- 2 silver
- 98 copper
- 1 silver
- 77 copper

Sunstone Nugget

- 3 silver
- 17 copper
- 2 silver
- 15 copper

Carnelian Nugget

- 3 silver
- 48 copper
- 2 silver
- 15 copper

Peridot Nugget

- 3 silver
- 21 copper
- 2 silver
- 19 copper

Adorned Tiger's Eye Jewel

- 4 silver
- 26 copper
- 3 silver
- 85 copper

Tiger's Eye Copper Amulet of Precision

- 6 silver
- 26 copper
- 4 silver
- 51 copper

Tiger's Eye Copper Ring of Precision

- 6 silver
- 46 copper
- 4 silver
- 76 copper

Tiger's Eye Copper Stud of Precision

- 7 silver
- 2 copper
- 5 silver
- 43 copper

撰写回答