我正在使用“名称”列表中的变量来请求网站的价值点:
names = ['A', 'B', 'C', 'D', 'E']
实际上,我的名字中的值比这更多。
计划是要遍历以下地址并像这样填写我的变量:
def get_values(name):
res = requests.get('www.example.com/tb/' + name)
for name in names:
get_values(name)
问题是,地址的一部分从不同的值更改为三个不同的值(tb,az和dm)(对于不同的名称,它们始终相同):
由于这个原因,在我的上面的代码中,仅下载了A和B的值。 (并且将变量分配给名称是不可行的,反之亦然。)
所以我获得正确URL的计划是使用if / else解决此问题:
try:
r = requests.get('www.example.com/tb/' + stock)
if r.status_code == 200:
url = 'www.example.com/tb/' + stock
else:
r = requests.get('www.example.com/az/' + stock)
if r.status_code == 200:
url = 'www.example.com/az/' + stock
else:
url = 'www.example.com/dm/' + stock
except:
pass
correctUrl = requests.get(url)
这仅给我一个变量的值(例如tz)。 我也尝试过尝试使用try和except以及try / except和if / else的一些变体来找到解决方案,但是它不起作用。
如果有人可以给我建议,如何验证列表中每个名称的正确地址,那将是很好的。或执行此操作的最pythonic方法是什么。不幸的是,我无法在stackoverflow或google上找到一种方法。
答案 0 :(得分:1)
您可以遍历可能的网址,直到获得代码200
:
def get_url(name):
for sub in ('tb', 'az', 'dm'):
url = f'www.example.com/{sub}/{name}'
r = requests.get(url)
if r.status_code == 200:
return url
return None
for name in names:
url = get_url(name)
print(url)
很明显,如果您可以将路径存储在名称中,例如[(tb,A),(tb,B),(az,C),...],那会更好。但是我认为你做不到?