2017-07-17 33 views
0

我想从this site获取数据。python-requests让我在浏览器中看到不同的反应,为什么?

当我从主网址获取数据。我得到一个包含结构但不包含值的HTML文件。

import requests 
from bs4 import BeautifulSoup 

url ='http://option.ime.co.ir/' 
r = requests.get(url) 
soup = BeautifulSoup(r,'lxml') 
print(soup.prettify()) 

我发现,该网站从

url1 = 'http://option.ime.co.ir/GetTime' 
url2 = 'http://option.ime.co.ir/GetMarketData' 

获取值当我观看在浏览器网址那些回应。我以特定的格式看到JSON格式的响应和时间。

但是当我使用请求获取数据时,它给了我从url获得的相同的HTML。

你知道最新的原因吗?我应该如何获得我在浏览器中看到的回复?

我检查所有网址的标题,但没有找到与我的请求一致的特殊内容。

+0

你怎么能说标题没有用?这是关于标题的东西。 –

+0

检查用户代理字段是否不同,通常可以根据客户端类型获取不同的响应。 – thorhunter

+0

@Ujival我没有说头文件没有用,我说我找不到任何有用的东西:) – Mehdi

回答

0

您必须在请求中提供正确的HTTP标头。在我的情况下,我能够使用以下标题使其工作。请注意,在我测试中,HTTP响应是200 OK,而不是重定向到根网站(因为请求中未提供HTTP标头)。

原始HTTP请求:

GET http://option.ime.co.ir/GetTime HTTP/1.1 
Host: option.ime.co.ir 
Referer: "http://option.ime.co.ir/" 
Accept: "application/json, text/plain, */*" 
User-Agent: "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0" 

这应该给你你需要正确的JSON响应。

+0

不,我尝试添加这些http请求到我的get请求结果是一样的,我使用Postman扩展和python他们都没有给我JSON。 – Mehdi

0

您首先使用浏览器进行连接获取302重定向响应(对于相同的url)。

然后它运行一些JS,所以第二个请求不再重定向,并获得预期的JSON。

这是一种常用的技术,所以其他人在未经许可的情况下不使用他们的API。

在dev中设置“保存日志”复选框。工具,所以你可以自己看到它。

+0

有没有什么方法可以得到这些数据?我设置保留日志“复选框,但没有任何更改 – Mehdi

+0

设置保留日志,然后刷新。您将所有请求发送到服务器。不,服务器具有相同的原始策略,所以除非您使用代理,否则无法通过它 – JuanGG

相关问题