python-requests给出了我在浏览器中看到的不同响应,为什么?

时间:2017-07-17 14:30:39

标签: python python-requests

我想从this site获取数据。

当我从主网址获取数据时。我得到的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。

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

我检查了所有网址的标题,但我没有找到一些我应该根据请求发送的特殊内容。

2 个答案:

答案 0 :(得分:0)

您使用浏览器的第一个连接是获得302重定向响应(到同一个URL)。

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

这是一种常用技术,因此其他人未经许可不得使用其API。

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

答案 1 :(得分: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响应。