使用状态码200链接重定向

时间:2018-03-27 12:44:43

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

我有一个状态代码为200的链接。但是当我在浏览器中打开它时会重定向。

在使用Python请求获取相同的链接时,它只显示原始链接中的数据。我尝试了Python请求和urllib但没有成功。

  1. 如何捕获最终的网址及其数据?

  2. 状态200的链接如何重定向?

  3. >>> url ='http://www.afaqs.com/news/story/52344_The-target-is-to-get-advertisers-to-switch-from-print-to-TV-Ravish-Kumar-Viacom18'
    >>> r = requests.get(url)
    >>> r.url
    'http://www.afaqs.com/news/story/52344_The-target-is-to-get-advertisers-to-switch-from-print-to-TV-Ravish-Kumar-Viacom18'
    >>> r.history
    []
    >>> r.status_code
    200
    

    This is the link

    Redirected link

2 个答案:

答案 0 :(得分:1)

这种重定向是由JavaScript完成的。因此,您不会使用requests.get(...)直接获取重定向的链接。原始URL具有以下页面源:

<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=http://www.afaqs.com/interviews/index.html?id=572_The-target-is-to-get-advertisers-to-switch-from-print-to-TV-Ravish-Kumar-Viacom18">
        <script type="text/javascript" src="http://gc.kis.v2.scr.kaspersky-labs.com/D5838D60-3633-1046-AA3A-D5DDF145A207/main.js" charset="UTF-8"></script>
    </head>
    <body bgcolor="#FFFFFF"></body>
</html>

在这里,您可以看到重定向的网址。你的工作就是抓住这个。您可以使用RegEx或简单的字符串拆分操作来完成。

例如:

r = requests.get('http://www.afaqs.com/news/story/52344_The-target-is-to-get-advertisers-to-switch-from-print-to-TV-Ravish-Kumar-Viacom18')
redirected_url = r.text.split('URL=')[1].split('">')[0]
print(redirected_url)
# http://www.afaqs.com/interviews/index.html?id=572_The-target-is-to-get-advertisers-to-switch-from-print-to-TV-Ravish-Kumar-Viacom18

r = requests.get(redirected_url)
# Start scraping from this link...

或者,使用正则表达式:

redirected_url = re.findall(r'URL=(http.*)">', r.text)[0]

答案 1 :(得分:1)

这些网址存在于脚本代码中,因为它们是javascript代码。因此它们也不是由python提取的。

要获取链接,只需从各自的标签中提取它们。