Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用python重定向后获取url_Python_Python 2.7 - Fatal编程技术网

如何在使用python重定向后获取url

如何在使用python重定向后获取url,python,python-2.7,Python,Python 2.7,我正在从事一个网络爬虫项目,现在我面临一个问题 如何在页面重定向后获取url 我尝试了请求,它返回值 当我抓取一个文件的下载链接时,比如这一个,它会打开一个页面,在那里它是被写的,程序正在下载,但几秒钟后程序开始下载。。。我想要下载的url 提前感谢。使用geturl() 或 要获取当前url,请使用 self.request.url 只有在浏览器上运行某些代码后,才会启动下载 您的示例URL似乎没有使用HTTP重定向进行重定向,而是在浏览器找到该页面并执行某些客户端代码后启动下载。您的URL

我正在从事一个网络爬虫项目,现在我面临一个问题

如何在页面重定向后获取url

我尝试了请求,它返回值

当我抓取一个文件的下载链接时,比如这一个,它会打开一个页面,在那里它是被写的,程序正在下载,但几秒钟后程序开始下载。。。我想要下载的url

提前感谢。

使用
geturl()
或 要获取当前url,请使用

self.request.url
只有在浏览器上运行某些代码后,才会启动下载 您的示例URL似乎没有使用HTTP重定向进行重定向,而是在浏览器找到该页面并执行某些客户端代码后启动下载。您的URL不是HTTP重定向

要理解我的意思,请在浏览器的“网络”选项卡中打开开发控制台(FireBug、Chrome控制台等),然后刷新页面,查看在浏览器下载实际文件之前发生的所有事情。在“网络”选项卡中,您也可以获取文件的URL

但是,爬网可能没有什么用处,因为URL可能被一个过期的令牌“腌制”,或者只对爬网它的客户端有效,基本上使下载URL不可共享

浏览器自动化 您可以通过浏览器自动化(如Selenium或PhantomJS)查看网络日志并搜索所需的URL结构(例如,对于此文件,您正在URL中查找
.exe

底线是:通过使用浏览器自动化工具并捕获其所有网络数据,您可以获得该URL,但是安全的体系结构会使该URL不可共享。

确实重定向的URL 不过,我会给你们一个重定向的例子,向你们展示如何对一个实际使用HTTP重定向的URL进行重定向

你的URL没有重定向

>>> import requests
>>> response = requests.get('http://filehippo.com/download_firefox/download/f28dbaab19e38f3239d69ed7c350ac5d/')
>>> response.history
[]  # There's no redirect there
>>> response.status_code
200
让我们尝试使用重定向的测试URL

>>> response = requests.get('http://httpbin.org/redirect/3')
>>> response.history
[<Response [302]>, <Response [302]>, <Response [302]>]
>>> for r in response.history: print r.status_code, r.url
... 
302 http://httpbin.org/redirect/3
302 http://httpbin.org/relative-redirect/2
302 http://httpbin.org/relative-redirect/1
>>> 
响应=请求。获取('http://httpbin.org/redirect/3') >>>回应.历史 [, ] >>>对于response.history中的r:打印r.status\u代码,r.url ... 302http://httpbin.org/redirect/3 302http://httpbin.org/relative-redirect/2 302http://httpbin.org/relative-redirect/1 >>>
直接下载文件的链接位于meta标记中:

<meta http-equiv="Refresh" content="3; url=/download/file/0d48d61bb8c894b7388e83a3c873cde48f0b2cc330872f5ce77a3b38b24a4942/"/>

请求;它将自动为您处理此重定向;最终的结果是你可以开始下载文件。

你想获取哪个url?当我在像filehippoI这样的网站上爬行时,我面临着一个问题,但问题到底是什么?您需要更具体一些。您是否希望在发出请求后检索页面内容?问题不完整。好的,我的url没有重定向,我接受,但该页面的源代码中没有下载链接为什么?我如何获取下载链接,因为在一个不希望人们轻松找到url并共享的系统中它们,您不会将它们嵌入到页面的源代码中,您会将其从服务器返回到页面,然后页面在浏览器上启动下载。返回的URL也可以设置为仅在给定时间内有效,客户端使用令牌标识,这使得共享非常困难。我已经用工具更新了我的答案,以进一步研究这个问题,比如Selenium和PhantomJS。真的,你是个天才,希望我能点击更多的投票:)
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://fs41.filehippo.com/9452/f9851528b9974e08bf9fa217a7daa049/Firefox Setup 43.0.3.exe [following]