GitHub YML文件网页抓取raw链接提取失效求助
解决GitHub页面更新后无法抓取YML文件的问题
问题背景
此前通过解析GitHub文件页面的HTML结构提取raw链接,再下载保存YML文件的方法,因GitHub页面更新后返回JSON格式内容而失效。
解决方案
方案一:直接构造Raw链接(推荐)
GitHub文件页面链接格式固定,只需将链接中的/blob/替换为/raw/即可得到对应的Raw文件链接,无需依赖页面结构,稳定性最高。
代码实现
def get_raw_link_by_replace(action_file_page_link): return action_file_page_link.replace('/blob/', '/raw/')
调用示例
import requests def saveFile(raw_link, file_name): response = requests.get(raw_link) if response.status_code == 200: name = f"{file_name}.yml" with open(name, "w", encoding='utf-8') as file: file.write(response.text) print(f"{name} 已保存!") else: print(f"请求失败,状态码:{response.status_code}") link = "https://github.com/xavierLowmiller/xcodegen-action/blob/main/action.yml" raw_link = get_raw_link_by_replace(link) saveFile(raw_link, "example")
方案二:解析返回的JSON获取内容或Raw链接
GitHub现在返回的JSON数据中包含了文件的原始内容和Raw链接,可以直接解析JSON获取所需信息。
方法1:从JSON中提取Raw链接
import requests import json def get_raw_link_from_json(action_file_page_link): response = requests.get(action_file_page_link) data = json.loads(response.text) return data['payload']['blob']['displayUrl'] # 调用示例 link = "https://github.com/xavierLowmiller/xcodegen-action/blob/main/action.yml" raw_link = get_raw_link_from_json(link) saveFile(raw_link, "example")
方法2:直接从JSON中提取文件内容(跳过Raw链接步骤)
import requests import json def save_yml_from_json(action_file_page_link, file_name): response = requests.get(action_file_page_link) data = json.loads(response.text) yml_content = '\n'.join(data['payload']['blob']['rawLines']) name = f"{file_name}.yml" with open(name, "w", encoding='utf-8') as file: file.write(yml_content) print(f"{name} 已保存!") # 调用示例 link = "https://github.com/xavierLowmiller/xcodegen-action/blob/main/action.yml" save_yml_from_json(link, "example")
注意事项
- 原
saveFile函数中使用BeautifulSoup解析Raw页面是多余的,Raw页面返回的是纯文本内容,直接写入文件即可。 - 方案一无需处理页面结构变化,是最推荐的实现方式。
内容的提问来源于stack exchange,提问作者Elmira
相关产品推荐
相关产品推荐

