Веб-очистка веб-сайта с выпадающим меню, которое динамически меняет веб-сайт (onchange) - PullRequest
1 голос
/ 22 мая 2019

Поэтому я пытаюсь собрать данные переписи с веб-сайта, который динамически изменяется, когда в раскрывающемся меню выбирается округ. Это выглядит так:

<select id="cat_id_select_GEO" onchange="changeHeaderSelection('GEO');
<option value="0500000US01001" select="selected">Autaga County, Alabama</option>
<select>

ссылка

Так что из проведенного мною исследования кажется, что мне нужно сделать какой-то запрос Get? (селен?), но я полностью потерян, как это сделать. Я знаю, как получить данные, которые я хочу, как только я сделал выбор округа. Но мне никогда не приходилось что-то очищать, когда веб-сайт динамически меняется (т. Е. URL не меняется)

Я понимаю, что некоторые могут посчитать, что это простой вопрос ... но я читал множество других подобных вопросов, и мне было бы очень полезно, если бы кто-то помог мне с примером и / или направил меня к надежному руководству.

Это то, с чем я до сих пор возился. Я вижу, что это вроде работает при выборе значений ... но выдает эту ошибку: Сообщение: ссылка на устаревший элемент: элемент не прикреплен к документу страницы (Информация о сеансе: chrome = 74.0.3729.169)


    for index, row in StateURLs.iterrows():
        url = row['URL']
        state = row['STATE']

        driver = webdriver.Chrome(executable_path=r'C:\chromedriver.exe')
        driver.get(url)
        select_county = Select(driver.find_element_by_id('cat_id_select_GEO'))
        options = select_county.options
        for index in range(0, len(options) - 1):
            select_county.select_by_index(index)

Мне также хотелось бы помочь с тем, как затем преобразовать эти веб-страницы в красивый суп, чтобы я мог очистить каждую страницу после выбора

1 Ответ

0 голосов
/ 23 мая 2019

Главная целевая страница получает запросы со строкой запроса, которая возвращает строку json, содержащую информацию, полученную в первый раз при отправке запроса, включая дополнительные URL-адреса, перечисленные на странице результатов.

import requests
search_term = 'searchTerm: Autauga County, Alabama'
search_term = search_term.replace(' ','+')
r = requests.get('https://factfinder.census.gov/rest/communityFactsNav/nav?N=0&_t=1558559559868&log=t&searchTerm=term ' + search_term + ',Alabama&src=').json()

Вот пример того, что json

Я могу сгенерировать правильный URL-адрес для использования в браузере, который возвращает все эти данные в виде json, но не может настроить запросы так, как работает.Возможно, кто-то еще может взять это и решить это.Завтра посмотрю снова.

r = requests.get('https://factfinder.census.gov/rest/communityFactsNav/nav?N=0&_t=1558559559868&log=t&searchTerm=term ' + search_term + ',Alabama&src=', allow_redirects= True).json()
url = 'https://factfinder.census.gov' + r['CFMetaData']['measuresAndLinks']['links']['2017 American Community Survey'][0]['url']
code = url.split('/')[-2]
url = 'https://factfinder.census.gov/tablerestful/tableServices/renderProductData?renderForMap=f&renderForChart=f&pid=ACS_17_5YR_{}&prodToReplace=ACS_16_5YR_{}&log=t&_ts=576607332612'.format(code, code)
...