首页 > 解决方案 > BeautifulSoup4:通过 find() 无法找到具有特定 href 值的“a”标签

问题描述

我正在尝试使用 python3从https://www.coinbase.com/pt-PT/price/抓取实时比特币-港元货币。

我发现在 HTML 中专门找到它的唯一方法是使用href ="/pt-PT/price/bitcoin"

    <a href="/pt-PT/price/bitcoin" title="Visite a moeda Bitcoin" data-element-handle="asset-highlight-top-daily-volume" class="Link__A-eh4rrz-0 hfBqui AssetHighlight__StyledLink-sc-1srucyv-1 cbFcph" color="slate">
                               <h2 class="AssetHighlight__Title-sc-1srucyv-2 jmJxYl">Volume mais alto (24 h)</h2>
                               <div class="Flex-l69ttv-0 gaVUrq">
                                  <img src="https://dynamic-assets.coinbase.com/e785e0181f1a23a30d9476038d9be91e9f6c63959b538eabbc51a1abc8898940383291eede695c3b8dfaa1829a9b57f5a2d0a16b0523580346c6b8fab67af14b/asset_icons/b57ac673f06a4b0338a596817eb0a50ce16e2059f327dc117744449a47915cb2.png" alt="Visite a moeda Bitcoin" aria-label="Visite a moeda Bitcoin" loading="lazy" class="AssetHighlight__AssetImage-sc-1srucyv-5 lcjcxh"/>
                                  <div class="Flex-l69ttv-0 kvilOX">
                                     <div class="Flex-l69ttv-0 gTbYCC">
                                        <h3 class="AssetHighlight__SubTitle-sc-1srucyv-3 gdcBEE">Bitcoin</h3>
                                        <p class="AssetHighlight__Price-sc-1srucyv-4 bUAWAG">460 728,81 HK$</p>

这里460 728,81 HK$是想要的数据。

因此,我应用了以下代码:

    import bs4

    import urllib.request as req
    url="https://www.coinbase.com/prthe ice/bitcoin/hkd"
    
    request=req.Request(url,headers={
        "user-agent":"..."
        })
    with req.urlopen(request) as response:
        data=response.read().decode("utf-8")
    
    root=bs4.BeautifulSoup(data,"html.parser")
    secBitcoin=root.find('a',href="/pt-PT/price/bitcoin")
    realtimeCurrency=secBitcoin.find('p')
    print(realtimeCurrency.string)

但是,它总是返回 secBitcoin = None。没有结果匹配。

当我使用类参数搜索“div”标签时,查找功能工作得很好。

我也尝试过像这样的格式

.find('a[href="/pt-PT/price/bitcoin"]')

但没有任何效果。

标签: pythonhtmlbeautifulsoupweb-crawler

解决方案


页面可能在初始页面加载后加载货币值。您可以尝试按 ctrl+s 来保存整个网页并打开该文件,而不是使用请求。如果这也不起作用,那么我不确定问题出在哪里。如果这确实有效,那么你可能需要使用像 selenium 这样的东西来获得你需要的东西


推荐阅读