首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有动态更改网站的下拉菜单的Web抓取网站(onchange)

带有动态更改网站的下拉菜单的Web抓取网站(onchange)
EN

Stack Overflow用户
提问于 2019-05-23 03:38:34
回答 1查看 844关注 0票数 1

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

代码语言:javascript
复制
<select id="cat_id_select_GEO" onchange="changeHeaderSelection('GEO');
<option value="0500000US01001" select="selected">Autaga County, Alabama</option>
<select>

a link

那么,从我所做的研究来看,听起来我需要发出某种Get请求?(硒?)但我完全不知道该怎么做。一旦我选择了县,我知道如何获得我想要的数据。但我从来没有刮过网站动态变化的东西(即url不变)。

我知道有些人可能会发现这是一个简单的问题……但我已经读过许多其他类似的问题,如果有人带我走一遍例子,和/或指导我找到一个可靠的指南,我会受益匪浅。

这就是我到目前为止一直在做的事情。我可以看到它在选择值时有点起作用……但它会显示以下错误: Message: stale element reference: element is not attached to the page document (会话信息: chrome=74.0.3729.169)

代码语言:javascript
复制
    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)

我也希望帮助如何将这个网页转换成美丽的汤,这样我就可以刮每一页后作出的选择

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 05:16:39

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

代码语言:javascript
复制
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,但似乎不能配置请求,所以工作。也许其他人可以拿起这个并解决它。我明天会再找的。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56263832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档