【问题标题】:Web scraping with beautifulsoup not finding anything用beautifulsoup抓取网页没有找到任何东西
【发布时间】:2025-12-02 08:00:01
【问题描述】:

我试图抓取 coinmarketcap.com 只是为了获取某个货币价格的更新,也只是为了学习如何进行网络抓取。我仍然是一个初学者,无法弄清楚我哪里出错了,因为每当我尝试运行它时,它只会告诉我没有。虽然我知道那条线确实存在。任何帮助表示赞赏!

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
price = soup.find('data-currency-price data-usd=')
print (price)

【问题讨论】:

  • 你没有正确使用find。阅读文档

标签: python web-scraping beautifulsoup cryptocurrency


【解决方案1】:

如果您打算做很多这样的事情,请考虑使用official API 打一个电话并获取所有价格。然后提取你想要的。以下内容来自该网站,我对其进行了修改,以显示电子货币的期望值。 API 指南还显示了如何检索one at a time,尽管这需要比基本计划更高的计划。

from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json

url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
      'start': '1',
      'limit': '5000',
      'convert': 'USD',
  }
headers = {
      'Accepts': 'application/json',
      'X-CMC_PRO_API_KEY': 'yourKey',
  }

session = Session()
session.headers.update(headers)

try:
    response = session.get(url, params=parameters)
    # print(response.text)
    data = json.loads(response.text)
    print(data['data'][64]['quote']['USD']['price'])
except (ConnectionError, Timeout, TooManyRedirects) as e:
    print(e)

您始终可以部署循环并检查所需的列表,例如

interested = ['Electroneum','Ethereum']
for item in data['data']:
    if item['name'] in interested:
        print(item)

对于您当前的示例:

您可以为data-currency-value 使用属性选择器

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
soup.select_one('[data-currency-value]').text

【讨论】:

  • 如果做很多这样的工作应该会更有效率。
【解决方案2】:

你可以使用class属性来获取值。

import requests
from bs4 import BeautifulSoup

url = 'https://coinmarketcap.com/currencies/electroneum/'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, 'html.parser')
price = soup.find('span' ,attrs={"class" : "h2 text-semi-bold details-panel-item--price__value"})
print (price.text)

输出:

0.006778

【讨论】:

    【解决方案3】:

    你可以得到这样的值:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://coinmarketcap.com/currencies/electroneum/'
    response = requests.get(url)
    html = response.content
    
    soup = BeautifulSoup(html, 'html.parser')
    price = soup.find("span", id="quote_price").get('data-usd')
    print (price)
    

    【讨论】:

      【解决方案4】:

      您应该尝试更具体地说明您希望如何找到该项目。

      您目前正在使用soup.find('') 我不确定您在编写 data-currency-price data-usd= 时在其中放入了什么 那个ID是类名吗?

      为什么不尝试使用 ID 查找项目。

      soup.find(id="link3")
      

      或按标签查找

      soup.find("relevant tag name like div or a")
      

      或类似的东西

      find_this = soup.find("a", id="ID HERE")
      

      【讨论】:

        【解决方案5】:
        import requests
        from bs4 import BeautifulSoup
        
        url = 'https://coinmarketcap.com/currencies/electroneum/'
        response = requests.get(url)
        html = response.content
        
        soup = BeautifulSoup(html, 'html.parser')
        x=soup(id="quote_price").text
        print (x)
        

        寻找ID更好,或通过soup.find_all(text="data-currency-price data-usd")[1].text搜索

        【讨论】: