具有下拉菜单的网站抓取网站,可动态更改网站(更改)

时间:2019-05-22 19:38:34

标签: python ajax web-scraping beautifulsoup urllib

因此,我试图从一个从下拉菜单中选择一个县而动态变化的网站上抓取人口普查数据。看起来像这样:

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

a link

因此,根据我所做的研究,听起来我需要发出某种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 :(得分:0)

主登录页面确实收到带有查询字符串的请求,该查询字符串返回一个json字符串,其中包含您提交查询时首先返回的信息,其中包括结果页面上列出的其他网址。

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)