Я пытаюсь очистить данные с веб-сайта, но таблица данных отображается с помощью JavaScript.Вместо того чтобы использовать такой инструмент, как Selenium, для генерации страницы и запуска сценария, я вместо этого нашел тег сценария, в котором хранятся данные, и пытаюсь извлечь данные непосредственно оттуда.
Вот код:
import requests
from bs4 import BeautifulSoup
import json
url = 'https://www.etf.com/SPY'
result = requests.get(url)
c = result.content
html = BeautifulSoup(c, 'html.parser')
script = html.find_all('script')[-22] #this is the script tag that has the data
script = script.contents
js = script[0]
data = js[31:-2] #data is the json/dict which has the data
Это фрагмент того, как выглядит содержимое данных:
s = json.loads(data)
s = s['etf_report_from_api']['modalInfoToActive']['top10Holdings']['data']
s = s[13:-2]
Вот фрагмент кода, который выглядит следующим образом:
На данный момент содержимое больше похоже на HTML, нопохоже, что escape-символы не были экранированы должным образом
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag)
def handle_endtag(self, tag):
print("Encountered an end tag :", tag)
def handle_data(self, data):
print("Encountered some data :", data)
parser = MyHTMLParser()
Вот вывод синтаксического анализатора.кажется, что он может распознавать некоторые теги, но идентифицирует другие как данные из-за проблемы форматирования.
Эти данные по сути являются таблицей HTML,но как я могу правильно декодировать / анализировать его для извлечения содержимого данных?