Python如何将BeautifulSoup提取的链接传入下载变量实现动态获取资源
实现方法
直接将两段代码整合,把BeautifulSoup提取到的目标链接直接赋值给url变量即可,补全代码中缺失的依赖导入后即可自动运行:
# 导入所有需要的依赖 import requests from bs4 import BeautifulSoup as bs import os import io import zipfile folder_name = "../data" # 第一步:提取目标下载链接 r = requests.get('https://data.ed.gov/dataset/college-scorecard-all-data-files-through-6-2020/resources') soup = bs(r.content, 'lxml') links = [item['href'] if item.get('href') is not None else item['src'] for item in soup.select('[href^="http"], [src^="http"]') ] # 可选优化:避免站点链接顺序变动拿错地址,增加关键词筛选逻辑 # 筛选包含原始数据包关键词的链接,替换原有的固定索引links[1] target_links = [link for link in links if "CollegeScorecard_Raw_Data" in link and link.endswith(".zip")] if not target_links: raise Exception("未匹配到目标下载链接,请检查站点结构是否变动") url = target_links[0] # 如果你确认链接顺序不会长期变动,也可以直接用 url = links[1] # 第二步:下载解压逻辑 # 目标文件夹不存在则新建 if not os.path.exists(folder_name): os.makedirs(folder_name) response = requests.get(url, stream = True) # 解压内容 with zipfile.ZipFile(io.BytesIO(response.content)) as zf: for elem in zf.namelist(): zf.extract(elem, folder_name)
上述代码新增的关键词筛选逻辑,比直接取固定索引links[1]的稳定性更高,可避免后续站点调整资源排列顺序后拿到错误链接的问题。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

