Поиск изменения URL с помощью python

У меня есть этот URL - 'https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher' и когда я открываю его в веб-браузере, он меняется на 'https://en.wikipedia.org/wiki/Ronald_Fisher', и мне нужно найти второй URL из первого: введите Ronaly_Aylmer_Fisher и получите Ronald_Fisher.

Я пытался использовать запросы и urllib.request, чтобы найти историю переадресации, но это не сработало.
Есть ли способ обнаружить это с помощью Python?


person Mechanical Python    schedule 09.02.2018    source источник


Ответы (1)


Вы можете узнать причину, по которой вы не видите перенаправления в истории запросов, из этого ответа на SO:

Запросы не показывают перенаправление, потому что на самом деле вы не перенаправляетесь в смысле HTTP. Википедия использует некоторые трюки с JavaScript (вероятно, модификацию истории HTML5 и pushState), чтобы изменить адрес, отображаемый в адресной строке, но это, конечно, не относится к запросам.

Если вы проверите источник страницы
(view-source:https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher), URL-адрес перенаправления доступен здесь:

<link rel="canonical" href="https://en.wikipedia.org/wiki/Ronald_Fisher"/>

Вы можете очистить его, используя regex или BeautifulSoup следующим образом:

import re
import requests
from bs4 import BeautifulSoup

r = requests.get('https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher')

# Using regex (not sure if this is the best regex approach)
href_regex = re.compile(r'<link rel="canonical" href="(.*)"/>')
redirected_url = href_regex.search(r.text).groups()[0]

# Using BeautifulSoup
soup = BeautifulSoup(r.text, 'html.parser')
redirected_url = soup.find('link', rel='canonical')['href']

print(redirected_url)

Выход:

https://en.wikipedia.org/wiki/Ronald_Fisher

Или, чтобы получить желаемый результат, вы можете сделать это:

print(redirected_url.split('/')[-1])

Выход:

Рональд_Фишер

person Keyur Potdar    schedule 09.02.2018