我想从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。
你知道原因吗?我应该如何获得我在浏览器中看到的回复?
我检查了所有网址的标题,但我没有找到一些我应该根据请求发送的特殊内容。
答案 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响应。