我现在正在写蜘蛛。我想从网上抓取一堆网页。我已经成功的一部分,我的目标,与数以百计的网址链接存储在我的手。但这些环节并不是最终的环节。这意味着,当你把一个网址放进像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=...
)
寻找
follow_redirects
选项。在python中,您可以使用requests
相关问题 更多 >
编程相关推荐