Как определить, где находятся необработанные данные в таблице?

#web-scraping #websocket

Вопрос:

https://www.nyse.com/quote/XNYS:A

После доступа к указанному выше URL-адресу я открываю Инструменты разработчика в Firefox. Затем измените дату HISTORIC PRICES , затем нажмите «ПЕРЕЙТИ». Таблица обновляется. Но я не вижу соответствующих HTTP-запросов, отправляемых в devtools.

Таким образом, это означает, что данные уже были загружены в первом запросе. Но я не могу понять, как извлечь необработанные данные из таблицы. Кто-нибудь может взглянуть на то, как извлечь необработанные данные из таблицы? (Обратите внимание, что я не хочу использовать такие методы, как selenium, я хочу оставаться с необработанными HTTP-запросами для получения необработанных данных.)

ИЗМЕНИТЬ: websocket упоминается в комментарии. Но я не вижу этого в Инструментах разработчика. Я все равно добавляю тег websocket на случай, если кто-то знает больше о websocket, может вмешаться.

Комментарии:

1. на wss есть веб-сайт://stream2-300.dataservices.theice.com/, который, похоже, используется для обновления данных

2. @BertrandMartel Я не вижу такой вещи в инструментах разработчика Firefox. Как ты это понял?

Ответ №1:

Я боюсь, что вы не сможете извлечь содержимое, отображаемое на javascript, без селена. Вы всегда можете воспользоваться браузером без головы(вы не видите ни одного экземпляра на своем экране, единственная загвоздка в том, что вам придется подождать, пока страница полностью загрузится), и это вас больше не будет беспокоить.

Другими словами, все остальные библиотеки очистки основаны на URL — адресах и формах. Scrapy может публиковать формы, но не запускать javascripts.

Селен спасет день, все, что вы потеряете, — это пара секунд на каждую попытку(будет миллисекундой, если она выполняется в интерфейсе). Вы можете поделиться источником страницы с driver.page_source, и его можно напрямую использовать для анализа(в виде html-текста) с помощью BeautifulSoup или чего-либо еще.

Комментарии:

1. Это не то решение, которое я ищу. Ожидание полной загрузки страницы доставляет много хлопот. Неясно, как долго придется ждать. Если ждать слишком долго, то это пустая трата времени. Я ищу более эффективные решения.

Ответ №2:

Вы можете сделать это с помощью запросов-html, например, давайте возьмем первую строку таблицы:

 from requests_html import HTMLSession

session = HTMLSession()
url = 'https://www.nyse.com/quote/XNYS:A'

r = session.get(url)
r.html.render(sleep=7)

first_row = r.html.find('.flex_tr', first=True)

print(first_row.text)
 

Выход:

 06/18/2021
146.31
146.83
144.94
145.01
3,220,680
 

Как сказал @Nikita, вам придется подождать загрузки страницы (здесь 7 секунд, но, возможно, меньше), но если вы хотите выполнить несколько запросов, вы можете сделать это асинхронно !

Комментарии:

1. Я не знаком с HTMLSession. Но, глядя на свою домашнюю страницу, он оценивает javascript. Чем это отличается от браузера без головы, такого как puppeteer? Я не хочу ждать, так как у меня много похожих страниц для загрузки, я не могу сказать, достаточно ли времени ожидания для многих загрузок, поэтому я не могу полностью доверять результатам. Но если я установлю долгое ожидание, это потратит время на те, которые загружаются быстро.

2. запросы-html использует кукольника.