Python爬虫爬取检查元素不显示的下拉菜单数据问题求助
爬取目标数据的实现方案
问题本质
你访问的网站采用分层静态JSON存储选举数据,后续选区、投票站层级的内容不需要通过页面元素提取,直接按照规则拼接请求对应JSON文件即可获取。
数据路径规则
- 州级基础数据:
https://chanakyya.com/Chanakya/{州英文标识}/{州英文标识}.json(你现有代码已实现该层请求) - 州下辖所有议会选区列表:
https://chanakyya.com/Chanakya/{州英文标识}/ac.json,该文件中存储了所有选区的显示名称、编码等信息 - 单个选区下的所有投票站数据:
https://chanakyya.com/Chanakya/{州英文标识}/{选区编码}/{选区编码}.json,你需要的Ajgara(SC)的投票站数据就存放在对应路径的该文件中
可直接运行的修改后代码
import requests import pandas as pd import choice # 获取州列表 states = requests.get('https://chanakyya.com/Chanakya/states.json').json() state_list = [x['stateDisplayName'] for x in states] # 选择Uttar Pradesh state_choice = choice.Menu(state_list).ask() state_info = [x for x in states if x['stateDisplayName'] == state_choice][0] state_name = state_info['stateName'] # 获取该州下所有议会选区列表 ac_list_url = f'https://chanakyya.com/Chanakya/{state_name}/ac.json' ac_list = requests.get(ac_list_url).json() ac_display_list = [x['acDisplayName'] for x in ac_list] # 选择Ajgara(SC) ac_choice = choice.Menu(ac_display_list).ask() ac_info = [x for x in ac_list if x['acDisplayName'] == ac_choice][0] ac_code = ac_info['acCode'] # 获取对应选区的所有投票站数据 booth_url = f'https://chanakyya.com/Chanakya/{state_name}/{ac_code}/{ac_code}.json' booth_data = requests.get(booth_url).json() # 解析并输出投票站表格 tables = {} for key, value in booth_data['ELECTION_DATA']['acLevelData'].items(): table = pd.DataFrame(value) tables[key] = table for key, table in tables.items(): print(f'*** {key} ***') print(table)
额外说明
- 运行前需确保已安装依赖:执行
pip install requests pandas choice即可 - 如果不需要手动选择,直接固定获取Ajgara(SC)的数据,可删除选择逻辑,直接写死state_choice为Uttar Pradesh、ac_choice为Ajgara(SC)即可
内容的提问来源于stack exchange,提问作者Kanishk Tolani
相关产品推荐
相关产品推荐

