Не совсем уверен в сложности этого вопроса, но решил, что попробую.
Как я могу создать веб-сканер / парсер (не уверен, что мне понадобится), чтобы получить CSV всех данных о соотношении оплаты труда генерального директора. https://www.bloomberg.com/graphics/ceo-pay-ratio/
Мне нужна эта информация для дальнейшего анализа, однако я не знаю, как получить ее для динамической веб-страницы. Раньше я создавал веб-парсеры, но для простых веб-сайтов и функций.
Если бы вы могли указать мне на хороший ресурс или опубликовать код ниже, я навсегда буду у вас в долгу.
Заранее спасибо!






Поскольку кажется, что веб-сайт загружает контент динамически, я считаю, что вам понадобится Селен, библиотека, которая автоматизирует браузеры, и BeautifulSoup, библиотека для анализа полученных веб-страниц.
Поскольку интересующая вас часть веб-сайта - это всего лишь одна страница, и вам нужно только получить данные, я предлагаю вам сначала изучить, как данные загружаются на страницу. Вполне вероятно, что вы могли бы напрямую запросить их сервер с теми же параметрами, что и сценарий, для непосредственного извлечения интересующих вас данных.
Чтобы сделать такой запрос, вы можете рассмотреть возможность использования еще одной библиотеки под названием Запросы.
Обратите внимание, что очистка этого веб-сайта может быть помечена как «как нарушение условий обслуживания», этот конкретный веб-сайт использует несколько технологий, чтобы избежать очистки на основе скриптового движка.
Если вы проверите веб-страницу, вы можете заметить, что при нажатии следующей кнопки нет запроса XHR. Таким образом, вы можете сделать вывод, что контент загружается только один раз.
Если вы отсортируете данные запроса по размеру, вы обнаружите, что все данные загружаются из json файл
Используя python (но вам нужно открыть страницу непосредственно перед запуском скрипта python):
import requests
data=requests.get("https://www.bloomberg.com/graphics/ceo-pay-ratio/live-data/ceo-pay-ratio/live/data.json").json()
for each in data['companies']:
try:
print "Company",each['c'],"=> CEO pay ratio",each['cpr']
except:
print "Company",each['c'],"=> no CEO pay ratio !"
Что дает вам:
Company Aflac Inc => CEO pay ratio 300
Company American Campus Communities Inc => CEO pay ratio 226
Company Aetna Inc => CEO pay ratio 235
Company Ameren Corp => CEO pay ratio 66
Company AmerisourceBergen Corp => CEO pay ratio 0
Company Advance Auto Parts Inc => CEO pay ratio 329
Company American International Group Inc => CEO pay ratio 697
Company Arthur J Gallagher & Co => CEO pay ratio 126
Company Arch Capital Group Ltd => CEO pay ratio 104
Company ACADIA Pharmaceuticals Inc => CEO pay ratio 54
[...]
Возможно, лучше открыть json в веб-браузере, а затем сохранить его локально, чем пытаться запрашивать веб-сайт.
После локального сохранения json как data.json вы можете прочитать его с помощью:
import json
with open("data.json","r") as f:
cont=f.read()
data=json.loads(cont)
for each in data['companies']:
try:
print "Company",each['c'],"=> CEO pay ratio",each['cpr']
except:
print "Company",each['c'],"=> no CEO pay ratio !"
запросы на импорт data = requests.get ("bloomberg.com/graphics/ceo-pay-ratio/live -data / ceo-pay-ratio / … для каждого in data ['companies']: try: print (" Компания ", каждый ['c']," => коэффициент оплаты труда генерального директора ", каждый ['cpr']) кроме: print ("Компания", каждый ['c'], "=> нет коэффициента оплаты генерального директора!") после ввода этого кода у меня возникла ошибка трассировки ... есть ли способ переписать код для локального сохранения. json или .csv Очень ценю :)
Отслеживание (последний вызов последним): файл ". \ CEOpayratio.py", строка 2, в <module> data = requests.get ("bloomberg.com/graphics/ceo-pay-ratio/live -data / ceo-pay-ratio / … File" C: \ Users \ Seane \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ s ite-packages \ request s \ models.py ", строка 896, в json возвращает файл complexjson.loads (self.text, ** kwargs)" C: \ Users \ Seane \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ s ite-packages \ simplej son_в этом_.py ", строка 518, при загрузке возвращает _default_decoder.decode (s)
Спасибо! Действительно ценю помощь
Спасибо! Оцените обратную связь