#javascript #python #blockchain #python-requests-html
#javascript #python #блокчейн #python-запросы-html
Вопрос:
Я ссылаюсь на этот 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 и не нашел сигары на этом конце.
Ответ №1:
Вы правы. Эта страница заполняется асинхронно с использованием JavaScript, поэтому BeautifulSoup и подобные инструменты не смогут увидеть конкретный контент, который вы пытаетесь очистить.
Однако, если вы регистрируете сетевой трафик своего браузера, вы можете увидеть, что некоторые (XHR) HTTP GET-запросы отправляются в REST API, который выдает свои результаты в формате 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
>>>