网页抓取数据构建字典:州名与日照时长关联问题
问题描述
我通过for循环从网页抓取的表格中遍历获取到所有州名及对应的日照时长,但目前comparison_state会输出全部州名,sunlight也会输出全部时长。我需要将州名与对应时长一一关联,构建成可支持用户输入查询(如输入“Washington”即可获取对应时长)的字典或字典数组,请问该如何实现?
原代码:
table = soup.find('table') list_of_states = table.find_all('tr') for state in list_of_states: state_name = state.find('td') if state_name is None: continue hours = state.find_all('td')[1].text comparison_state = str(state_name.text.strip().lower()) sunlight = float(hours.split()[0]) dict = {comparison_state : 1, sunlight : 2}
解决方案
你当前的问题是每次循环都会覆盖comparison_state和sunlight变量,最后仅保留了最后一次循环的结果,且字典的写法逻辑错误(用数值作为键完全无法实现查询需求)。正确的做法是先初始化一个空字典,在循环过程中逐个将州名与对应日照时长作为键值对存入字典。
修改后的完整代码:
table = soup.find('table') list_of_states = table.find_all('tr') # 初始化空字典,键为小写州名,值为对应日照时长 state_sunlight_map = {} for state in list_of_states: state_name = state.find('td') if state_name is None: continue hours = state.find_all('td')[1].text # 处理州名,转小写并去除首尾空白 state_key = state_name.text.strip().lower() # 提取日照时长并转为浮点数 sunlight_hours = float(hours.split()[0]) # 将当前州的日照数据存入字典 state_sunlight_map[state_key] = sunlight_hours # 实现用户查询功能 user_query = input("请输入州名:").strip().lower() if user_query in state_sunlight_map: print(f"{user_query.title()}的日照时长为{state_sunlight_map[user_query]}小时") else: print("未找到该州的日照数据")
关键说明
- 循环前创建空字典
state_sunlight_map,避免每次循环覆盖已存储的数据 - 循环内通过
state_sunlight_map[state_key] = sunlight_hours,将每个州的信息以“小写州名:日照时长”的形式存入字典,确保所有州的数据都被保留 - 查询时将用户输入转为小写,与字典的键匹配,避免大小写差异导致查询失败
内容的提问来源于stack exchange,提问作者Flow
相关产品推荐
相关产品推荐

