首页 > 解决方案 > 抓取迭代数据:空列表

问题描述

我正在学习如何从网页中迭代抓取值,我以前用过bs4,但我不知道为什么,即使这是一个简单的例子,我得到一个空列表(或元素)。

我想打印/保存的测试是:

<div data-v-1931433b="" class="mar-m c-r"> 9.1516 </div>

我使用的代码是:

 1 import json
 2 import requests
 3 from bs4 import BeautifulSoup
 4
 5
 6 url = 'https://goldencoreex.com/trade/index.html?spAsseType=0#/index'
 7
 8 html_page = BeautifulSoup(requests.get(url).content, 'html.parser')
 9 elements = html_page.find_all("div", class_="mar-m c-r")
10
11 print(elements)

对这个问题的唯一猜测是我可能弄乱了网址。

我也非常感谢有关如何使代码连续运行的一些提示,以便在元素更新时捕获数据。

标签: pythonweb-scrapingbeautifulsoup

解决方案


正如评论中提到的,页面是由 动态呈现的JS,但您可以通过查询API来获取数据。

例如:

import requests
from tabulate import tabulate

api_url = "https://www.goldencoreex.com/wap/api/realtime!execute.action?symbol=btc,bts,nkn,etc,gdq,xrp,eth,ltc,akro,qtum,bhd"
response = requests.get(api_url).json()

table = [[item['name'], item['open'], item['change_ratio']] for item in response["data"]]
print(tabulate(table, headers=["Name", "Open", "Change"], tablefmt="pretty"))

输出:

+-----------+----------+--------+
|   Name    |   Open   | Change |
+-----------+----------+--------+
| BTC/USDT  | 17809.35 | -5.88  |
| BTS/USDT  |  0.0232  | -6.03  |
| NKN/USDT  | 0.019426 | -3.58  |
| ETC/USDT  |  6.2325  | -4.51  |
| GDQ/USDT  |  9.2947  | -1.34  |
| XRP/USDT  |  0.5456  | -2.38  |
| ETH/USDT  |  527.37  | -3.79  |
| LTC/USDT  |  77.23   | -11.9  |
| AKRO/USDT | 0.00913  | -8.54  |
| QTUM/USDT |  2.6376  | -6.06  |
| BHD/USDT  |  2.5054  | -2.16  |
+-----------+----------+--------+


推荐阅读