Хобрук: Ваш путь к мастерству в программировании

Очистка веб-страницы AJAX с использованием python и запросов

Я попытался очистить эту страницу с помощью метода поиска BeautifulSoup. но я не смог найти значение таблицы на странице HTML. Я обнаружил, что веб-сайт генерирует данные мгновенно, когда я загружаю страницу через внутренний API. Любая помощь??

Заранее спасибо.


  • Я не просматривал страницу, но если вы нашли Ajax-запрос к API, вы сможете сделать к нему свой собственный запрос? 05.03.2019
  • Один из них должен сделать это: github.com/dhamaniasad/HeadlessBrowsers 05.03.2019
  • @RobinZigmond спасибо за ваш ответ. Есть ли у вас какие-либо ресурсы о том, как установить запрос Ajax от python? 05.03.2019
  • @AhmedSabry Вы должны попробовать использовать Selenium в дополнение к BeautifulSoup, это позволяет вам восстановить загрузку данных из запроса ajax, потому что вы можете дождаться загрузки 05.03.2019
  • @AhmedSabry - есть несколько библиотек, которые позволяют делать HTTP-запросы в Python, this - их хорошее сравнение. (Обратите внимание, что вы не будете делать запрос Ajax, это просто термин, используемый, когда веб-страница выполняет запрос в javascript на стороне клиента, чтобы пользователю не приходилось перезагружать страницу, термин не имеет никакого смысла для отдельная программа для сбора данных из Интернета.) 05.03.2019
  • Возможный дубликат python — парсинг веб-сайта ajax с помощью BeautifulSoup 05.03.2019
  • Я бы по возможности избегал безголовых браузеров, очень медленный 05.03.2019

Ответы:


1

Это работает для меня. Мне пришлось копаться в инструментах разработчика, но я нашел это

import requests

geturl=r'https://www.barchart.com/futures/quotes/CLJ19/all-futures'
apiurl=r'https://www.barchart.com/proxies/core-api/v1/quotes/get'


getheaders={

    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'max-age=0',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'
    }

getpay={
    'page': 'all'
}

s=requests.Session()
r=s.get(geturl,params=getpay, headers=getheaders)



headers={
    'accept': 'application/json',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-US,en;q=0.9',
    'referer': 'https://www.barchart.com/futures/quotes/CLJ19/all-futures?page=all',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
    'x-xsrf-token': s.cookies.get_dict()['XSRF-TOKEN']

}


payload={
    'fields': 'symbol,contractSymbol,lastPrice,priceChange,openPrice,highPrice,lowPrice,previousPrice,volume,openInterest,tradeTime,symbolCode,symbolType,hasOptions',
    'list': 'futures.contractInRoot',
    'root': 'CL',
    'meta': 'field.shortName,field.type,field.description',
    'hasOptions': 'true',
    'raw': '1'

}


r=s.get(apiurl,params=payload,headers=headers)
j=r.json()
print(j)

>{'count': 108, 'total': 108, 'data': [{'symbol': 'CLY00', 'contractSymbol': 'CLY00 (Cash)', ........
05.03.2019
Новые материалы

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..