无法用requests模块抓取registry.terraform页面左侧azurerm_provider内容
用requests抓取Terraform Registry左侧导航内容的解决方案
问题背景
需要抓取页面https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/api_management左侧azurerm_provider分类下的认证相关内容,直接使用requests请求页面并解析HTML无法获取目标内容,且不想采用selenium方案。
原因分析
该页面的左侧导航内容并非直接嵌入在页面静态源码中,而是通过调用后端API接口动态渲染生成的,因此直接爬取页面HTML无法找到目标数据。
解决方案
定位到加载左侧导航菜单的API接口,直接请求该接口获取结构化JSON数据,再从中提取所需内容。
实现代码
import requests # 加载左侧导航菜单的API接口,对应azurerm provider的latest版本 api_url = "https://registry.terraform.io/v2/providers/hashicorp/azurerm/versions/latest/docs/menu" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36', 'Accept': 'application/json' } response = requests.get(api_url, headers=headers) data = response.json() # 遍历菜单数据,筛选出azurerm_provider分类下的所有子项 for category in data['data']: if category['attributes']['category'] == 'azurerm_provider': for link_item in category['attributes']['links']: print(link_item['text'])
运行结果
Azure Provider: 通过服务主体和客户端证书进行认证 Azure Provider: 通过服务主体和客户端密钥进行认证 Azure Provider: 通过服务主体和OpenID Connect进行认证 Azure Provider: 通过托管标识进行认证 Azure Provider: 通过Azure CLI进行认证
内容的提问来源于stack exchange,提问作者MITHU
相关产品推荐
相关产品推荐

