尝试不同版本的网站地址-Python

时间:2019-02-04 16:24:18

标签: python web verify

我正在使用“名称”列表中的变量来请求网站的价值点:

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)(对于不同的名称,它们始终相同):

  • www.example.com/tb/A
  • www.example.com/tb/B
  • www.example.com/az/C
  • www.example.com/dm/D
  • www.example.com/dm/E

由于这个原因,在我的上面的代码中,仅下载了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上找到一种方法。

1 个答案:

答案 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),...],那会更好。但是我认为你做不到?