如何修改BeautifulSoup代码下载NASA APOD站点高分辨率图片
代码调整方案
核心逻辑说明
APOD页面的低分辨率缩略图存储在<img>标签的src属性中,高分辨率原图的相对路径存放在包裹该<img>标签的上层<a>标签的href属性内,只需提取该href属性拼接根路径即可获取高清资源。
同时原代码存在两个可优化的兼容问题:
urllib2是Python2专属库,Python3环境下已停止维护,可统一用requests完成所有请求逻辑- 图片属于二进制文件,原代码用文本写入模式
w会导致文件损坏,需要改为二进制写入模式wb
修改后完整代码
from bs4 import BeautifulSoup as BSHTML import requests # 请求目标页面 page = requests.get('https://apod.nasa.gov/apod/astropix.html') soup = BSHTML(page.content, features="html.parser") # 定位img标签的父级a标签,提取高清图相对路径 img_tag = soup.find('img') high_res_rel_path = img_tag.parent['href'] high_res_url = 'https://apod.nasa.gov/apod/' + high_res_rel_path # 下载并保存高清图 r = requests.get(high_res_url, allow_redirects=True) with open('/home/me/Downloads/apod.jpg', "wb") as f: f.write(r.content)
关键改动点
- 替换原
urllib2请求逻辑,统一用requests库完成页面和图片的请求,适配Python3运行环境 - 不再直接取
<img>的src属性,改为取其父级<a>标签的href属性拼接高清图地址 - 修正文件写入模式为二进制
wb,避免图片文件损坏
内容的提问来源于stack exchange,提问作者user1551817
相关产品推荐
相关产品推荐

