Web scrape网站带有下拉菜单,动态更改网站(onchange)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (15)

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

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

[链接] https://factfinder.census.gov/faces/tableservices/jsf/pages/productview.xhtml?src=bkmk

所以从我做过的研究来看,听起来我需要做一些Get请求?(硒?)但我完全迷失了如何做到这一点。一旦我选择了县,我知道如何获得我想要的数据。但是,我从来没有必要在网站上动态更改某些内容(即网址不会更改)

我知道有些人可能会发现这是一个简单的问题...但我已经阅读了许多其他类似的问题,并且会从一些人走过我的例子和/或指导我一个坚实的指南中受益匪浅。

到目前为止,这就是我一直在搞乱的事情。我可以看到它在选择值时有用......但它会吐出这个错误:消息:陈旧元素引用:元素未附加到页面文档(会话信息: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)

我也很乐意帮助如何将这个网页转换成美丽的汤,这样我就可以在选择之后刮掉每一页

提问于
用户回答回答于

主登录页面确实获得了一个查询字符串的请求,该查询字符串返回一个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)

扫码关注云+社区

领取腾讯云代金券