使用Requests爬取德国邮编人口数据遇404错误的解决求助
解决德国邮编人口数据爬取问题及替代方案
一、修复当前网站的404问题
请求返回404的核心原因之一是URL不匹配:目标网址末尾带有斜杠/,而你代码中使用的URL缺少该斜杠,可能导致服务器路由匹配失败。先修正URL并补充更完整的请求头,提升请求通过率:
import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } # 修正为带末尾斜杠的目标URL url = 'https://postal-codes.cybo.com/germany/' r = requests.get(url, headers=headers) print(r.status_code) soup = BeautifulSoup(r.text, 'html.parser') print(soup.title.text)
如果修正后仍返回404或被拦截,说明网站存在反爬机制,可尝试:
- 使用
requests.Session()保持会话,模拟浏览器连续请求的状态 - 加入随机延迟(
import time; time.sleep(random.uniform(1,3)))降低请求频率 - 若数据为动态加载,改用
selenium或playwright模拟真实浏览器渲染页面
二、爬取目标数据的实现思路
若成功访问页面,可按以下步骤提取数据:
- 从列表页解析所有邮编区域的详情页链接,逐个遍历访问
- 在单个邮编页面中,通过BeautifulSoup定位邮编、城市、人口、区域及分性别人口对应的HTML元素,提取文本内容
- 将提取的数据整理为字典或DataFrame,保存为CSV/JSON格式便于后续分析
三、替代数据获取途径
如果爬取该网站困难,可选择以下合规的公开数据源:
- 德国联邦统计局:官方发布的统计数据包含邮编对应的人口、区域等结构化信息,可通过其数据门户查询下载
- 开源数据集平台:部分开源社区整理了标准化的德国邮编人口数据集,涵盖邮编、城市、人口数量及性别分布等字段,可直接获取
- 地理信息服务:部分专注于地理数据的公开服务提供绑定人口数据的邮编查询接口,可通过合规调用获取所需信息
内容的提问来源于stack exchange,提问作者sdave
相关产品推荐
相关产品推荐

