我有这个网址 - “https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher”,当我用网络浏览器打开它时,它会更改为“https://en.wikipedia.org/wiki/Ronald_Fisher”,我需要找到第一个网址:输入Ronaly_Aylmer_Fisher并获取Ronald_Fisher。
我尝试使用requests和urllib.request来查找重定向历史记录,但它不起作用 有没有办法使用Python检测这个?
答案 0 :(得分:0)
您可以从this answer on SO获取请求历史记录中无法看到重定向的原因:
请求不显示重定向,因为您实际上并不存在 在HTTP意义上重定向。维基百科做了一些JavaScript技巧 (可能是HTML5历史修改和pushState)改变了 地址栏中显示的地址,但不适用于 当然是请求。
如果您检查页面来源
(view-source:https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher
),重定向的网址可在此处获取:
<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)
输出:
或者,要获得所需的输出,您可以这样做:
print(redirected_url.split('/')[-1])
输出:
Ronald_Fisher