【问题标题】:beautifulsoup with bscscan api in python在python中使用bscscan api的beautifulsoup
【发布时间】:2021-12-18 09:45:40
【问题描述】:

我正在尝试将beautifulsoup 与bscscan api 一起使用,但我不知道如何分离别人给我的数据,有人可以指导我吗?

from bs4 import BeautifulSoup
import requests
import pandas as pd
url_base = 'https://api.bscscan.com/api?module=stats&action=tokensupply&contractaddress='
contract = '0x6053b8FC837Dc98C54F7692606d632AC5e760488'
url_fin = '&apikey=YourApiKeyToken'
url = url_base+contract+url_fin
page = requests.get(url)
soup = BeautifulSoup(page.content, 'lxml')
totalsupply = soup.find('p').text
print(totalsupply)

截图:

【问题讨论】:

  • 请显示结果。
  • 准备好了,我刚刚将它添加为图像
  • 我认为,图像显示字典数据。尝试这个。 status = totalsupply['status'] print(status)
  • 如果{"status":"1","message":"OK","result":"1289436"} 不是您想要的输出,您能告诉我们您想要的输出是什么,以便我们为您提供帮助吗?你想要totalsupply 是什么?
  • @bituniverse 这是一个 api 我无法访问字典它是一个在链接中具有该结构的字符串

标签: python beautifulsoup python-requests


【解决方案1】:

解决方案的第一部分几乎与您已有的相同。由于您不需要pandas,因此我已将其删除。我还将解析器从 lxml 更改为 html

from bs4 import BeautifulSoup
import requests

url_base = 'https://api.bscscan.com/api?module=stats&action=tokensupply&contractaddress='
contract = '0x6053b8FC837Dc98C54F7692606d632AC5e760488'
url_fin = '&apikey=YourApiKeyToken'
url = url_base+contract+url_fin

page = requests.get(url)
soup = BeautifulSoup(page.content, 'html')

现在,如果您打印soup,您将看到如下内容:

{"status":"1","message":"OK","result":"1289436"}

你可能认为这是一个 python 字典,但这只是表示(__repr____str__)。您仍然无法像使用普通字典那样提取键和值。 soupbs4.BeautifulSoup 的一个实例。因此,将其转换为 json,然后将这三个项目中的每一个都保存为自己的变量:

from operator import itemgetter
import json

d = json.loads(soup.get_text())
status, message, result = itemgetter('status', 'message', 'result')(d)

现在您将拥有 statusmessageresult 每个变量。

这里值得注意的是,如果您已经将totalsupply 设为有效字典,则只需跳过上面的json.loads() 步骤:

from operator import itemgetter
status, message, result = itemgetter('status', 'message', 'result')(totalsupply)

# alternatively if you have guarantees on the order:
status, message, result = totalsupply.values()

我想说,直到最近,Python 中的 dicts 是无序的,解包 d.values() 实际上可能会给你错误的行为。 OrderedDict 直到 Python 3.6 才出现,它们是按插入排序的。如果这还不是您理解的内容,我建议您坚持使用itemgetter 解决方案。

【讨论】:

  • wao 我需要很多东西来学习非常感谢你,pandas 是为了以后@onlyphantom
  • 这里根本没有使用 HTML 解析器的意义。 API 仅返回 JSON。并且使用 itemgetter 只是为了得到 3 个值是不必要的。此外,无法保证 JSON 对象内的项目顺序,因此 .values() 不可靠。
猜你喜欢
  • 1970-01-01
  • 2012-01-31
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多