伪造HTTP Get请求下载图片遇权限拒绝问题求助
解决Ottawa交通摄像头图片权限拒绝的问题
你遇到的核心问题是:你请求的URL是展示摄像头图片的网页,而非图片的直接下载链接,所以你保存的其实是网页内容(或者网页中加载的权限拦截图),不是真实的摄像头画面。下面是具体的解决步骤和代码:
问题分析
当你访问http://traffic.ottawa.ca/map/camera?id=95时,浏览器加载的是一个完整的网页,这个网页里会嵌入真实的摄像头图片资源。直接请求这个网页URL,requests返回的是HTML代码,而非图片二进制数据,自然无法得到你想要的画面。
解决方案
我们需要先请求网页,解析HTML提取出真实的图片URL,再针对这个图片URL发起请求,同时带上必要的请求头模拟浏览器行为,避免被网站拦截。
步骤1:安装依赖
首先需要安装HTML解析库beautifulsoup4,用来提取网页中的图片地址:
pip install beautifulsoup4
步骤2:修改后的代码
import shutil import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup # 生成模拟浏览器的User-Agent,并添加Referer头(告诉网站我们是从目标页面跳转过来的) ua = UserAgent() headers = { 'User-Agent': str(ua.chrome), 'Referer': 'http://traffic.ottawa.ca/map/camera?id=95' } # 第一步:请求网页,提取真实图片URL page_url = "http://traffic.ottawa.ca/map/camera?id=95" page_response = requests.get(page_url, headers=headers) soup = BeautifulSoup(page_response.text, 'html.parser') # 从网页中定位摄像头图片元素(需要根据实际网页结构调整选择器) # 你可以用浏览器开发者工具查看网页源码,找到图片标签的id/class属性 camera_img = soup.find('img', id='camera-image') if not camera_img: print("无法在网页中找到摄像头图片元素,请检查网页结构") else: # 提取图片地址,处理相对路径的情况 img_url = camera_img['src'] if not img_url.startswith('http'): img_url = f"http://traffic.ottawa.ca{img_url}" # 第二步:请求真实图片资源 img_response = requests.get(img_url, headers=headers, stream=True) if img_response.status_code == 200: with open('img1.png', 'wb') as out_file: shutil.copyfileobj(img_response.raw, out_file) print("摄像头图片已成功保存!") else: print(f"请求图片失败,状态码:{img_response.status_code}")
额外注意事项
- 检查网页结构:如果代码中
find('img', id='camera-image')找不到元素,打开浏览器的开发者工具(F12),查看目标网页的HTML源码,找到摄像头图片对应的img标签,调整选择器(比如用class属性find('img', class_='camera-img'))。 - 反爬机制:如果仍然遇到权限拒绝,可能网站需要验证Cookie。你可以先在浏览器中打开目标页面,从开发者工具的"网络"面板复制请求头中的Cookie,添加到
headers字典中。
内容的提问来源于stack exchange,提问作者Ruslan Nikolaev
相关产品推荐
相关产品推荐

