Как соскобить интерактивные графики с помощью скрапа?

1

Я использую scrapy чтобы scrapy и ползать веб-страницы. Я заинтересован в том, чтобы удалить эту страницу. Как видите, есть несколько графиков. Но когда я смотрю на исходный код, я не нахожу значения точек, даже когда я ищу в тегах <script>.

Как я могу сделать, чтобы отбросить каждый график, с х как час, а у как значение нечетного?

Scrapy версия: 1.5.2

Теги:
scrapy
chart.js

2 ответа

2
Лучший ответ

Данные на вашей веб-странице. Проверьте в script переменные тега var cote_data_1, var cote_data_2 и т.д. Они должны быть доступны без JS.

0

Вот код, который удаляет первые данные диаграммы:

import scrapy
import ast
def find_between(s, start, end):
  return (s.split(start))[1].split(end)[0]
class CanalTurfSpider(scrapy.Spider):
    name = "CanalTurfSpider"
    start_urls = ['https://www.canalturf.com/cotes/2019-04-15/'
                  'maisons-laffitte/185850_prix-des-ecuries-du-chateau.html']
    def parse(self, response):
        data = response.xpath('//script').extract()[-1]
        chart1_data = find_between(data, "var cote_data_1 = ", ";")
        chart1_data = ast.literal_eval(chart1_data)
        yield {
            "chart1_data": chart1_data
        }

Выход:

{'chart1_data': [{'elapsed': '12:25', 'value': 9.3}, {'elapsed': '12:35', 'value': 9.7}, {'elapsed': '12:45', 'value': 10}, {'elapsed': '12:55', 'value': 10.1}, {'elapsed': '13:05', 'v
alue': 10.6}, {'elapsed': '13:15', 'value': 10.6}, {'elapsed': '13:25', 'value': 11.2}, {'elapsed': '13:35', 'value': 11.3}, {'elapsed': '13:45', 'value': 13.1}, {'elapsed': '13:55', '
value': 14.7}, {'elapsed': '14:05', 'value': 18.8}, {'elapsed': '14:15', 'value': 18.8}]}

Вы можете найти переменные в последнем блоке скрипта.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню