如何在Django中读取网页X-Frame-Options头部并解决报错
解决X-Frame-Options头部获取的错误问题
第一个错误的原因与修复
你写的res.headers['content-type':'X-Frame-Options']误用了Python切片语法(冒号),但requests返回的headers是类字典结构,只能通过单个键获取对应头部值,且你仅需要X-Frame-Options,完全不需要涉及content-type。
第二个错误的原因与修复
并非所有网站的HTTP响应都会携带X-Frame-Options头部,直接用res.headers['X-Frame-Options']访问不存在的键会触发KeyError。正确做法是使用字典的get()方法安全获取,当头部不存在时返回默认值(如None)。
修正后的完整代码
for result in result_listings: result_title = result.find(class_='PartialSearchResults-item-title').text result_url = result.find('a').get('href') result_desc = result.find(class_='PartialSearchResults-item-abstract').text res = requests.get(result_url) # 安全获取X-Frame-Options头部,不存在则返回None x_frame_option = res.headers.get('X-Frame-Options') # 直接判断并赋值给notAccept,无需中间变量 notAccept = x_frame_option in ["DENY", "SAMEORIGIN"]
额外注意事项
requests的headers对象不区分大小写,用'X-Frame-Options'或'x-frame-options'作为键都有效,推荐使用规范的驼峰写法。- 爬取第三方网站时建议添加超时设置,比如
requests.get(result_url, timeout=10),避免请求长时间卡住拖垮服务。 - 部分网站会有重定向行为,可通过
res.history查看重定向记录,确保检查的是最终目标页面的响应头部。
内容的提问来源于stack exchange,提问作者Goune Kenfack
相关产品推荐
相关产品推荐

