如何检查和记录URL地址?

2024-05-16 03:51:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在写蜘蛛。我想从网上抓取一堆网页。我已经成功的一部分,我的目标,与数以百计的网址链接存储在我的手。但这些环节并不是最终的环节。这意味着,当你把一个网址放进像googlechrome这样的浏览器时,网址会自动重定向到另一个页面,这就是我想要的。但这只适用于网络浏览器。当我编写代码从该URL爬网时,就不会发生重定向。你知道吗

举个例子:

给定(URL\u 1):

 http://weixin.sogou.com/websearch/art.jsp?sg=CBf80b2xkgZ8cxz1-SgG-dBH_4QL8uVunUQKxf0syVWvynE5nPZm2TPqNuEF6MO2xv0MclVANfsVYUGr5-1b3ls29YYxgU27ra8qaaU15iv7KVkBsZp5Td27Cb2A24cIwEuw__0ZHdPeivmW-kcfnw..&url=p0OVDH8R4SHyUySb8E88hkJm8GF_McJfBfynRTbN8wjVuWMLA31KxFCrZAW0lIGG1EpZGR0F1jdIzWnvINEMaGQ3JxMQ33742MRcPWmNX2CMTFYIzOo-v8LrDlfP2AnF54peD-GxvCNYy-5x5In7jJFmExjqCxhpkyjFvwP6PuGcQ64lGQ2ZDMuqxplQrsbk

将此链接放到浏览器中,它将自动重定向到(URL\u 2):

http://mp.weixin.qq.com/s?__biz=MzA4OTIxOTA4Nw==&mid=404672464&idx=1&sn=bdfff50b8e9ac28739cf8f8a51976b03&3rd=MzA3MDU4NTYzMw==&scene=6#rd

这是另一个环节。你知道吗

但将其放入python代码中,例如:

response=urllib2.urlopen(URL_1)
print response.read()

自动重定向不会发生!你知道吗

总之,我的问题是:给定一个URL,如何获得重定向的URL?你知道吗

有些人给了我一些java代码,这些代码在其他情况下也能工作,但在我的情况下却没有帮助:

import java.net.HttpURLConnection;
import java.net.URL;

public class Main {
    public void test()throws Exception {
        String expectedURL ="http://www.zhihu.com/question/20583607/answer/16597802";
        String url = "http://www.baidu.com/link?url=ByBJLpHsj5nXx6DESXbmMjIrU5W4Eh0yg5wCQpe3kCQMlJK_RJBmdEYGm0DDTCoTDGaz7rH80gxjvtvoqJuYxK";
        String redirtURL = getRedirectURL(url);

        if (redirtURL.equals(expectedURL)) {
            System.out.println("Equal");
        }else{
            System.out.println(url);
            System.out.println(redirtURL);
        }
    }

    public String getRedirectURL(String path) throws Exception {
        HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
        conn.setInstanceFollowRedirects(false);
        conn.setConnectTimeout(5000);
        return conn.getHeaderField("Location");
    }

    public static void main(String[] args) throws Exception{
        Main obj = new Main();
        obj.test();
    }
}

在这种情况下,它将打印出等于,这意味着我们现在可以从url得到expecteURL。但是这在前一种情况下是可行的(我不知道为什么,但是仔细查看上面的URL\u1和java代码中的url,我注意到有一些有趣的区别:在上面的java代码中的url中有一个片段.../link?url=...,这可能意味着一些方向。但是在上面的URL\u1中,它是.../art.jsp?sg=...


Tags: 代码comhttpurlstring情况浏览器java
1条回答
网友
1楼 · 发布于 2024-05-16 03:51:24

寻找follow_redirects选项。在python中,您可以使用requests

import requests

response = requests.get('http://example.com', follow_redirects=True)
print response.url

# history contains list of responses for redirects
print response.history

相关问题 更多 >