Webscraping 区块链数据看似嵌入 Javascript 到 Python,这是否是正确的方法?
Webscraping Blockchain data seemingly embedded in Javascript through Python, is this even the right approach?
我引用了这个 url:https://tracker.icon.foundation/block/29562412
如果您向下滚动到“交易”,它会显示 2 个带有单独链接的交易,这基本上就是我要抓取的内容。如果我尝试一个简单的 pd.read_csv(url) 命令,它显然忽略了我正在寻找的数据,所以我认为它可能是基于 JavaScript 并尝试了以下代码:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://tracker.icon.foundation/block/29562412')
r.html.links
r.html.absolute_links
我得到结果“set()”
尽管我期待以下内容:
['https://tracker.icon.foundation/transaction/0x9e5927c83efaa654008667d15b0a223f806c25d4c31688c5fdf34936a075d632', 'https://tracker.icon.foundation/transaction/0xd64f88fe865e756ac805ca87129bc287e450bb156af4a256fa54426b0e0e6a3e']
JavaScript 是正确的方法吗?我尝试了 BeautifulSoup,但在那一端也没有发现雪茄。
你是对的。此页面使用 JavaScript 异步填充,因此 BeautifulSoup 和类似工具将无法查看您尝试抓取的特定内容。
但是,如果您记录浏览器的网络流量,您可以看到正在向 REST API 发出一些 (XHR) HTTP GET 请求,它在 JSON 中提供其结果。这个 JSON 恰好包含您要查找的信息。它实际上向各种 API 端点发出了几个这样的请求,但我们感兴趣的是 txList
(我猜是“交易列表”的缩写):
def main():
import requests
url = "https://tracker.icon.foundation/v3/block/txList"
params = {
"height": "29562412",
"page": "1",
"count": "10"
}
response = requests.get(url, params=params)
response.raise_for_status()
base_url = "https://tracker.icon.foundation/transaction/"
for transaction in response.json()["data"]:
print(base_url + transaction["txHash"])
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
输出:
https://tracker.icon.foundation/transaction/0x9e5927c83efaa654008667d15b0a223f806c25d4c31688c5fdf34936a075d632
https://tracker.icon.foundation/transaction/0xd64f88fe865e756ac805ca87129bc287e450bb156af4a256fa54426b0e0e6a3e
>>>
我引用了这个 url:https://tracker.icon.foundation/block/29562412
如果您向下滚动到“交易”,它会显示 2 个带有单独链接的交易,这基本上就是我要抓取的内容。如果我尝试一个简单的 pd.read_csv(url) 命令,它显然忽略了我正在寻找的数据,所以我认为它可能是基于 JavaScript 并尝试了以下代码:
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://tracker.icon.foundation/block/29562412')
r.html.links
r.html.absolute_links
我得到结果“set()” 尽管我期待以下内容:
['https://tracker.icon.foundation/transaction/0x9e5927c83efaa654008667d15b0a223f806c25d4c31688c5fdf34936a075d632', 'https://tracker.icon.foundation/transaction/0xd64f88fe865e756ac805ca87129bc287e450bb156af4a256fa54426b0e0e6a3e']
JavaScript 是正确的方法吗?我尝试了 BeautifulSoup,但在那一端也没有发现雪茄。
你是对的。此页面使用 JavaScript 异步填充,因此 BeautifulSoup 和类似工具将无法查看您尝试抓取的特定内容。
但是,如果您记录浏览器的网络流量,您可以看到正在向 REST API 发出一些 (XHR) HTTP GET 请求,它在 JSON 中提供其结果。这个 JSON 恰好包含您要查找的信息。它实际上向各种 API 端点发出了几个这样的请求,但我们感兴趣的是 txList
(我猜是“交易列表”的缩写):
def main():
import requests
url = "https://tracker.icon.foundation/v3/block/txList"
params = {
"height": "29562412",
"page": "1",
"count": "10"
}
response = requests.get(url, params=params)
response.raise_for_status()
base_url = "https://tracker.icon.foundation/transaction/"
for transaction in response.json()["data"]:
print(base_url + transaction["txHash"])
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
输出:
https://tracker.icon.foundation/transaction/0x9e5927c83efaa654008667d15b0a223f806c25d4c31688c5fdf34936a075d632
https://tracker.icon.foundation/transaction/0xd64f88fe865e756ac805ca87129bc287e450bb156af4a256fa54426b0e0e6a3e
>>>