python - 具有动态更改网站的下拉菜单的网络抓取网站(onchange)

标签 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 请求? ( Selenium ?)但我完全不知道如何做到这一点。一旦我选择了县,我就知道如何获取我想要的数据。但我从来没有必要抓取网站动态变化的东西(即网址不改变)

我知道有些人可能会发现这是一个简单的问题......但我已经阅读了许多其他类似的问题,并且如果有人引导我完成示例和/或指导我找到可靠的指南,我将受益匪浅。

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

我可以生成正确的网址以在浏览器中使用,该浏览器将所有数据作为 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)

关于python - 具有动态更改网站的下拉菜单的网络抓取网站(onchange),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56263832/

相关文章:

javascript - 通过ajax从本地目录解析gz文件中的json - angularJS

python - 使用 Selenium for Python 从 <table> 中迭代读取特定元素

Python 包在终端上导入,但不在 IDLE 上导入

python - 使用套接字连接 VB.NET 前端与 Python 后端是好主意还是坏主意?

javascript - 身份验证后应在 Flux 应用程序中的何处进行存储重新获取操作?

javascript - 抓取 HTML(或 JavaScript)表

java - 使用 jsoup 登录 espn Fantasy Football League 并抓取统计数据

python - 从 for 循环中查找前 9 个数字的平均值,然后查找接下来的 9 个数字,依此类推

python - 如果存储的数据为十六进制并以str形式存储,如何转换为十六进制

javascript - 检查图像是否存在