веб-скрапинг данных путем изменения параметров javascript

Я пытаюсь очистить внутридневные цены для компании, используя этот веб-сайт: Enel в течение дня

Когда веб-сайт извлекает данные, он разбивает их на несколько сотен страниц, из-за чего извлечение данных занимает очень много времени. Используя insomnia.rest (впервые), я пытался поиграть с URL-адресом GET или попытаться найти фактическую функцию javascript, которая возвращает эти значения таблицы, но безуспешно.

Изучив кнопку поиска, я обнаружил, что функция JS называется searchIntraday и использует в качестве ввода форму с именем intraday_form.

проверить кнопку Trova

В основном я пытаюсь получить следующие данные за 1 вызов, а не просматривать все вкладки, поэтому полный день будет выглядеть так:

Time    Last Trade Price    Var %   Last Volume Type
5:40:49 PM  7.855   -2.88   570 AT
5:38:17 PM  7.855   -2.88   300 AT
5:37:10 PM  7.855   -2.88   290 AT
5:36:06 PM  7.855   -2.88   850 AT
5:35:56 PM  7.855   -2.88   14,508,309  UT
5:29:59 PM  7.872   -2.67   260 AT
5:29:59 PM  7.871   -2.68   4,300   AT
5:29:59 PM  7.872   -2.67   439 AT
5:29:59 PM  7.872   -2.67   3,575   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    4,000   AT
5:29:59 PM  7.87    -2.7    300 AT
5:29:59 PM  7.87    -2.7    2,000   AT
5:29:59 PM  7.87    -2.7    200 AT
5:29:59 PM  7.87    -2.7    400 AT
5:29:59 PM  7.87    -2.7    500 AT
5:29:59 PM  7.872   -2.67   1,812   AT
5:29:59 PM  7.872   -2.67   5,000   AT

..................................................

Time    Last Trade Price    Var %   Last Volume Type
9:00:07 AM  8.1 0.15    933,945 UT

который в этот день повторяется со страницы 1 на страницу 1017!

Я посмотрел на страницу ниже для помощи:

Статья о JS Scrape

Похожая проблема со стеком с ответом

Скрин-копия отчета о бессоннице


person Je Je    schedule 31.01.2020    source источник
comment
Можете ли вы объяснить, какие именно данные вы пытаетесь получить?   -  person Cohan    schedule 31.01.2020
comment
Я далее отредактировал вопрос. Тх   -  person Je Je    schedule 01.02.2020
comment
Я немного обновил свой ответ. Но вам, вероятно, придется перебирать каждую страницу. Хорошая новость заключается в том, что компьютер не против поработать, пока вы готовите себе чашку кофе.   -  person Cohan    schedule 01.02.2020
comment
Ну, проблема в том, что если я хочу сделать это для 30 акций, моему компьютеру потребуется больше, чем в день, чтобы сделать это, а затем на следующий день данные будут уничтожены ... Я в основном пытался «взломать» запрос (без успеха пока), чтобы сократить процесс   -  person Je Je    schedule 01.02.2020


Ответы (1)


Данные, по-видимому, не генерируются javascript, а скорее загружаются страницы. Изображение ниже — это ответ, который я получаю, когда загружаю ссылку ниже. Вы можете видеть, что расположение запроса совпадает с расположением на странице и что HTML для таблицы отправляется вместе с ответом страницы.

HTML-код в ответе указывает, что страницы генерируются на стороне сервера, а не на стороне клиента. К сожалению, если вы не найдете способ просмотреть и увидеть все нужные результаты за один раз, вам придется перебирать каждую страницу. Если вам удастся найти волшебный URL-адрес, вы можете просто обработать его.

https://www.borsaitaliana.it/borsa/azioni/contratti.html?isin=IT0003128367&lang=en&page=10

введите здесь описание изображения

Я решил попробовать, чтобы посмотреть, какую производительность я могу получить. Ниже приведен полный сценарий, который перебирает первые 100 страниц.

import pandas as pd
import requests

url = "https://www.borsaitaliana.it/borsa/azioni/contratti.html?isin=IT0003128367&lang=en&page="

df = pd.concat([
    pd.read_html(requests.get(url + str(page)).content)[0] 
    for page in range(100)
])

df.to_csv('enel.csv', index=False)

Запустив его на моей машине, на 100 страниц ушло 1,25 минуты.

$ time python scrape.py 

real    1m16.914s
user    0m4.039s
sys 0m0.729s

Это будет около 15 минут на акцию. Я предполагаю, что это 7,5 часов для 30 акций, если предположить, что они все примерно одинаковой длины. Вы можете запустить его на ночь, и он будет готов к утру.

person Cohan    schedule 31.01.2020
comment
Я отредактировал вопрос с функцией JS, я думаю, что мне нужно. Идея состоит в том, чтобы выяснить, какие параметры я могу добавить к запросу, включая количество строк для отображения на странице, дату начала и дату. То есть, если это возможно, отредактировав запрос на получение или параметры функции JS... Tx - person Je Je; 31.01.2020