Я использовал Selenium, чтобы соскрести динамическую таблицу Javascript с информацией о положении и зарплате федерального сотрудника от http://www.fedsdatacenter.com/federal-pay-rates/index.php?n=&l=&a=SECURITIES+AND+EXCHANGE+COMMISSION&o=&y=all. (Примечание: все данные общедоступного домена, поэтому не беспокойтесь: личная информация).Создать DataFrame из скремблированного списка таблиц Javascript
Я пытаюсь получить его в Pandas DF для анализа. Моя проблема заключается в том, что мой вкладе Селена данные представляет собой список, который печатает как:
[u'DOE,JON'], [u'14'], [u'SK'], [u'$176,571.00'], [u'$2,000.00'], [u'SECURITIES AND EXCHANGE COMMISSION'], [u'WASHINGTON'], [u'GENERAL ATTORNEY'], [u'2012']], ...
То, что я хочу, чтобы добраться до этого DF, который обрабатывает произвольное количество записей как:
NAME GRADE SCALE SALARY BONUS AGENCY LOCATION POSITION YEAR
Doe, Jon 14 SK $176,571.00 $2,000.00 SEC DC ATTY 2012
.
.
.
I» вы пытались преобразовать этот список в словарь, используя функцию zip() с именами col в виде кортежа, а данные как список и т. д. - все это безрезультатно, хотя это была хорошая экскурсия по функциям Python. Каким должен быть следующий шаг после получения данных или я должен читать данные по-другому?
В настоящее время код скребок:
from selenium import webdriver
path_to_chromedriver = '/Users/xxx/Documents/webdriver/chromedriver' # change path as needed
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
url = 'http://www.fedsdatacenter.com/federal-pay-rates/index.php'
browser.get(url)
inputAgency = browser.find_element_by_id('a')
inputYear = browser.find_element_by_id('y')
# Send data
inputAgency.send_keys('SECURITIES AND EXCHANGE COMMISSION')
inputYear.send_keys('All')
# Select 'All' from Years element
browser.find_element_by_css_selector('input[type=\"submit\"]').click()
browser.find_element_by_xpath('//*[@id="example_length"]/label/select/option[4]').click()
SMRtable = browser.find_element_by_id('example')
scrapedData = []
for td in SMRtable.find_elements_by_xpath('.//td'):
scrapedData.append([td.get_attribute('innerHTML')])
print td.get_attribute('innerHTML')
Это здорово, спасибо! Вам нужно лучше понять Javascript там. – user2559269
На самом деле, найдено еще одно ограничение, которое может потребовать соскабливания - в то время как «iTotalDisplayRecords»: «19919», фактический фрейм данных, который получается из этого, содержит только 100 строк, соответствующих максимальной опции из 100 строк, которые элемент выбора строки позволяет. Знаете ли вы об этом? – user2559269
вы можете попробовать этот url 'http://www.fedsdatacenter.com/federal-pay-rates/output.php?n = & a = ЦЕННЫЕ БУМАГИ% 20AND% 20EXCHANGE% 20COMMISSION & l = & o = & y = all & sEcho = 4 & iColumns = 9 & sColumns = & iDisplayStart = 0 & iDisplayLength = 100000' и, возможно, попробуйте изменить последний номер '100000' – jezrael