<p>您可以做的是在JSON上递归。这是处理不同深度URL的最佳方法</p>
<p>下面的递归将通过在JSON上递归来检索最深的URL</p>
<pre><code>import requests
from pprint import pprint
url = 'https://www.rittal.com/.rest/nav/menu/tree'
params = {
'path': 'com',
'locale': 'en',
'deep': '10'
}
def recurse(data):
if 'pages' in data:
for page in data['pages']:
recurse(page)
elif 'url' in data and data['url'].startswith('/com-en/'):
urls.append(data['url'])
urls = []
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
s.headers['Accept'] = 'application/json, text/plain, */*'
r = s.get(url, params=params).json()
recurse(r)
pprint(urls)
</code></pre>
<p>这就是它的工作原理:</p>
<ul>
<li>递归大小写-如果当前级别有页面,则在当前级别为每个<code>page</code>递归</li>
<li>基本大小写-如果URL出现在当前级别,则将其附加到URL列表中</li>
</ul>
<p>此外,如果您将<code>elif</code>切换为<code>if</code>,它将为您提供<em>所有</em>任何</em>级别的URL</p>
<p><strong>更新:</strong>该JSON中似乎有2个胭脂URL。特别是,一个是<code>https://www.eplan-software.com/solutions/eplan-platform/</code>,另一个是空的!因此,我添加了条件<code>data['url'].startswith('/com-en/')</code>,仅附加符合预期模式的URL</p>