Попробуйте разные версии адресов сайтов - Python - PullRequest
0 голосов
/ 04 февраля 2019

Я использую переменные из списка "имена", чтобы запрашивать значения с веб-сайта:

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 и исключения, а также с некоторыми вариантами попытки / кроме и если / еще, но это не работает.

Было бы неплохо, если бы кто-то мог дать мне совет, как я могу проверить правильный адрес для каждого имени в моем списке.Или какой самый питонный способ сделать это.К сожалению, я не смог найти подход на стеке потока или Google.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете перебирать возможные URL-адреса, пока не получите код 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), ...].Но я полагаю, вы не можете?

...