如何通过python以编程方式提取Azure IP范围json文件?

rkue9o1l  于 2023-05-05  发布在  Python
关注(0)|答案(2)|浏览(162)

我想从https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519下载ipranges.json(每周更新),我有这个python代码,它永远运行。

import wget
URL = "https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519"
response = wget.download(URL, "ips.json")
print(response)

如何在Python中下载JSON文件?

mpbci0fu

mpbci0fu1#

因为https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519是自动触发javascript下载的链接,所以你只是下载页面,而不是文件。
如果您检查下载的文件,源代码将如下所示

我们意识到该文件将改变后,一段时间,所以我们必须刮它在一般的方式
为了方便起见,我不会使用wget,这里有两个库:requests用于请求页面和下载文件,beaufitulsoup用于解析html

# pip install requests
# pip install bs4
import requests
from bs4 import BeautifulSoup

# request page
URL = "https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519"
page = requests.get(URL)

# parse HTML to get the real link
soup = BeautifulSoup(page.content, "html.parser")
link = soup.find('a', {'data-bi-containername':'download retry'})['href']

# download
file_download = requests.get(link)

# save in azure_ips.json
open("azure_ips.json", "wb").write(file_download.content)
kmpatx3s

kmpatx3s2#

伟大的解决方案,我添加了自定义头,因为我从URL中得到一个错误,说我正在使用自动化用户代理字符串。以下是它现在的样子:

# request page with modified headers
URL = "https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
page = requests.get(URL, headers=headers)
logging.info(page.content)

相关问题