очистка веб-данных путем изменения параметров javascript - PullRequest
0 голосов
/ 31 января 2020

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

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

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

inspect Trova button

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

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 Лом статьи

Stackflow аналогичная проблема с ответом

Screen copy of Insomnia report

1 Ответ

0 голосов
/ 31 января 2020

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

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

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

enter image description here

Я решил повернуть его, чтобы посмотреть, какое представление я смог получить. Ниже приведен полный скрипт, который перебирает первые 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)

Запустив его на моем компьютере, потребовалось 1,25 минуты на 100 страниц.

$ time python scrape.py 

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

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

...