使用python查找url更改

时间:2018-02-09 11:49:48

标签: python python-3.x url python-requests

我有这个网址 - “https://en.wikipedia.org/wiki/Ronald_Aylmer_Fisher”,当我用网络浏览器打开它时,它会更改为“https://en.wikipedia.org/wiki/Ronald_Fisher”,我需要找到第一个网址:输入Ronaly_Aylmer_Fisher并获取Ronald_Fisher。

我尝试使用requests和urllib.request来查找重定向历史记录,但它不起作用 有没有办法使用Python检测这个?

1 个答案:

答案 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"/>

您可以使用regexBeautifulSoup来抓取它:

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])

输出:

  

Ronald_Fisher