如何用Beautiful Soup爬取首都数据 实现终端输入国家输出对应首都
国家首都查询工具实现方案
实现逻辑
- 先从目标网页的表格中提取所有国家和首都的对应关系,存储为字典方便快速查询
- 接收用户终端输入的国家名称,匹配后输出对应首都,匹配失败给出友好提示
- 针对中文输入需求,额外补充常用国家的中英名称映射,支持中文直接查询
完整可运行代码
import requests from bs4 import BeautifulSoup # 常用国家中英映射,需要支持更多国家可直接补充 country_cn_map = { "英国": "United Kingdom", "中国": "China", "美国": "United States", "法国": "France", "日本": "Japan", "韩国": "Korea, Republic of", "德国": "Germany", "俄罗斯": "Russian Federation" } # 网页请求与基础解析(你已完成的部分) r = requests.get("https://geographyfieldwork.com/WorldCapitalCities.htm") r.encoding = "utf-8" # 强制设置编码避免内容乱码 c = r.text soup = BeautifulSoup(c, "html.parser") data = soup.find("table", id="anyid") rows = data.find_all("tr") # 构建国家-首都映射字典 capital_dict = {} for row in rows[1:]: # 跳过表头行不处理 tds = row.find_all("td") if len(tds) < 2: continue # 去除文本前后多余的空白、换行符 country = tds[0].get_text(strip=True) capital = tds[1].get_text(strip=True) capital_dict[country] = capital # 终端交互查询逻辑 while True: input_country = input("请输入要查询的国家名称(输入q退出):").strip() if input_country.lower() == "q": print("退出查询") break # 优先匹配中文国家名,没有匹配到则直接用输入内容查询 query_country = country_cn_map.get(input_country, input_country) res = capital_dict.get(query_country) if res: print(f"{input_country}的首都是:{res}") else: print(f"未找到[{input_country}]对应的首都信息,请检查输入是否正确")
补充说明
- 原网页的国家、首都均为英文标注,因此通过
country_cn_map适配中文输入需求,需要新增支持的国家直接在映射字典里添加对应关系即可 - 加入了循环查询逻辑,不需要每次查询都重新请求网页,输入q即可退出程序
- 增加了异常兼容逻辑,避免表格空行、用户空输入导致的程序报错
内容的提问来源于stack exchange,提问作者Onl1X
相关产品推荐
相关产品推荐

