Menemukan perubahan url dengan python

Saya memiliki URL ini - 'https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher' dan ketika saya membukanya dengan browser web berubah menjadi 'https://en.wikipedia.org/wiki/Ronald_Fisher' dan saya perlu mencari URL kedua dari yang pertama: masukkan Ronaly_Aylmer_Fisher dan dapatkan Ronald_Fisher.

Saya mencoba menggunakan request dan urllib.request untuk menemukan riwayat pengalihan tetapi tidak berhasil.
Apakah ada cara untuk mendeteksi ini menggunakan Python?


person Mechanical Python    schedule 09.02.2018    source sumber


Jawaban (1)


Anda bisa mendapatkan alasan mengapa Anda tidak dapat melihat pengalihan dalam riwayat permintaan dari jawaban ini di SO:

Permintaan tidak menampilkan pengalihan karena Anda sebenarnya tidak dialihkan dalam pengertian HTTP. Wikipedia melakukan beberapa tipu daya JavaScript (mungkin modifikasi riwayat HTML5 dan pushState) untuk mengubah alamat yang ditampilkan di bilah alamat, tetapi tentu saja hal itu tidak berlaku untuk Permintaan.

Jika Anda memeriksa sumber halaman
(view-source:https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher), url yang dialihkan tersedia di sini:

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

Anda dapat mengikisnya menggunakan regex atau BeautifulSoup seperti ini:

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="/id(.*)"/>')
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)

Keluaran:

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

Atau, untuk mendapatkan hasil yang Anda inginkan, Anda dapat melakukan ini:

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

Keluaran:

Ronald_Fisher

person Keyur Potdar    schedule 09.02.2018