我正在开发一个网络爬虫项目,现在我遇到了一个问题。
如何在重定向页面后获取URL?
我尝试了请求,并返回值<Response [200]>
当我抓取一个文件的下载链接时,例如这个http://filehippo.com/download_firefox/download/f28dbaab19e38f3239d69ed7c350ac5d/,它会打开一个页面,在那里编写程序正在下载但几秒后程序开始下载...我想要的网址是下载
提前感谢..
答案 0 :(得分:1)
您的示例网址似乎不是使用HTTP重定向重定向,一旦浏览器找到该页面并执行了某些客户端代码,它似乎就会启动下载。您的URL不是HTTP重定向。
要了解我所说的在浏览器的“网络”标签中打开开发控制台(FireBug,Chrome控制台等)并刷新页面,请查看浏览器下载实际文件之前发生的所有情况。在网络选项卡中,您也可以获取该文件的URL。
然而,抓取可能没有用,因为URL可能会被“腌制”一个令牌过期或仅对抓取它的客户端有效,基本上使该下载URL不可共享。
您可以使用某些浏览器自动化(如Selenium或PhantomJS)访问该URL,通过查看网络日志并获取所需的URL结构(例如,对于此文件,您正在寻找.exe
URL)
底线是:您可以获取该网址,方法是使用浏览器自动化工具并捕获其所有网络数据,但安全架构会使该网址无法共享。
但是,我会给你一个重定向的示例,向您展示如何使用Python requests library
实际重定向HTTP的URL您的网址未重定向
>>> import requests
>>> response = requests.get('http://filehippo.com/download_firefox/download/f28dbaab19e38f3239d69ed7c350ac5d/')
>>> response.history
[] # There's no redirect there
>>> response.status_code
200
让我们尝试使用重定向的测试网址
>>> 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
>>>
答案 1 :(得分:1)
直接下载文件的链接位于元标记中:
<meta http-equiv="Refresh" content="3; url=/download/file/0d48d61bb8c894b7388e83a3c873cde48f0b2cc330872f5ce77a3b38b24a4942/"/>
您需要从文件中读取该链接,然后请求它。完成后,它会引导您进入实际的文件下载链接:
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://fs41.filehippo.com/9452/f9851528b9974e08bf9fa217a7daa049/Firefox Setup 43.0.3.exe [following]
对于请求;它将自动为您处理此重定向;最后的结果是你可以开始下载文件。
答案 2 :(得分:0)
使用self.request.url
要么
获取当前网址
function mouseover() {
//this will make all the circle fade out
d3.selectAll("circle").style("opacity", 0.2);
//this will make our circle opacity 1
d3.select(this).select("circle").style("opacity", 1)
d3.select(this).select("circle").transition().style("stroke-width","9");
}