Загрузка CSV с обратным вызовом на Python

#javascript #python #html #ajax #python-requests

#javascript #python #HTML #ajax #python-запросы

Вопрос:

Пытаюсь загрузить CSV по ссылке кнопки в Morningstar. Ссылка включает обратный вызов, поэтому, похоже, она препятствует загрузке. В Chrome, использующем функцию «проверять», URL является http://financials.morningstar.com/finan/ajax/exportKR2CSV.html?amp;callback=?amp;t=XNAS:GOOGLamp;region=usaamp;culture=en-USamp;cur=amp;order=asc , но он не загружает CSV автоматически при вставке в адресную строку. Как я могу обновить приведенный ниже код, чтобы загрузить CSV по ссылке с обратным вызовом? http://financials.morningstar.com/ratios/r.html?t=GOOGLamp;region=usaamp;culture=en-US

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

 import requests

url = "http://financials.morningstar.com/finan/ajax/exportKR2CSV.html?amp;callback=?amp;t=XNAS:GOOGLamp;region=usaamp;culture=en-USamp;cur=amp;order=asc"
with requests.Session() as s:
    download = s.get(url)
    decoded_content = download.content.decode('utf-8')
    cr = csv.reader(decoded_content.splitlines(), delimiter=',')
    my_list = list(cr)
    for row in my_list:
        print(row)

my_list
  

ВЫВОД:

 <Response [204]>
[]
  

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

1. Страница генерируется динамически. Для загрузки данных следует использовать Selenium.

2. Есть ли какой-либо другой способ, используя что-то более легкое? codementor.io/codementorteam /…

3. Почему, попробуйте.

4. Изучаю это. Просто не вижу ajax dict, возвращаемого путем минимизации длины URL.

5. На вкладке сеть во время проверки запроса (как показано на скриншоте), если вы нажмете на вкладку ответ, вы заметите, что он ничего не возвращает. Кроме того, это не xhr тип, что означает, что вы не можете ожидать достижения загрузки через библиотеку запросов. Selenium довольно прост и подходит для вашего варианта использования, пожалуйста, попробуйте.

Ответ №1:

Если вы идете по маршруту selenium, легко использовать селектор класса для настройки кнопки загрузки. Вы можете указать параметры загрузки, такие как каталог, через параметры chrome.

 from selenium import webdriver

d = webdriver.Chrome()
d.get('http://financials.morningstar.com/ratios/r.html?t=GOOGLamp;region=usaamp;culture=en-US')
d.find_element_by_css_selector('.large_button').click()
d.quit()