我正在试图废弃这个网站:
https://www.nadlan.gov.il
这是以色列的一个网站,显示有关历史房地产交易的数据。
在搜索框中,您可以在自由文本中搜索要查看历史优惠的城市/社区。
它只支持希伯来语,因此我输入:שכונתגבעתמרדכי,ירושלים
这意味着耶路撒冷的Givat Mordechai社区。
我跟踪chrome上的网络选项卡,我看到返回实际数据(网格)的函数是GetAssetsAndDeals
- 它返回一个包含所有必需数据的JSON。
所以我复制了CURL,并使用https://curl.trillworks.com/
将其转换为Python代码 - 然后它返回给我这段代码:
import requests
cookies = {
'_ga': 'GA1.3.584052889.1509031917',
'_gid': 'GA1.3.66244842.1510507506',
'keshet-client-token': 'dvVFgVcuJrTgXPx+w9KtJktxk2wVZXGU1EfZ+3uBhMUYr9ZNWFKIBogGUbb8GjCRqetT2Vf0RRap26mkrYNDp8Nf0ZntyB3fYPNn65i9lrzVYU7bZpI79aqu/D9pYlm4aJj76C5fGsU+ncV5IsysqlqCa0ihRtWhncW6xMxr0l7H4L2OqPk2A5rSCHyAbzdn',
}
headers = {
'Origin': 'https://www.nadlan.gov.il',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Content-Type': 'application/json;charset=UTF-8',
'Accept': 'application/json, text/plain, */*',
'Referer': 'https://www.nadlan.gov.il/',
'Connection': 'keep-alive',
}
data = '^{^\\^MoreAssestsType^\\^:0,^\\^FillterRoomNum^\\^:0,^\\^GridDisplayType^\\^:0,^\\^ResultLable^\\^:^\\^^\u05E9^\u05DB^\u05D5^\u05E0^\u05EA'
requests.post('https://www.nadlan.gov.il/KeshetAnnan.REST/Main/GetAssestAndDeals', headers=headers, cookies=cookies, data=data)
但是当我在Python上运行此代码时 - 我收到404错误!
我想它与编码有关,但我不确定我应该改变什么......
任何帮助将不胜感激!
答案 0 :(得分:2)
查看实际请求后,您不会发送获取响应所需的完整JSON数据。从网络日志中,可以使用以下命令检索要在POST端点中发送的数据:
获取https://www.nadlan.gov.il/Nadlan.REST/Main/GetDataByQuery?query=CONTENT
这提供了在下一个POST请求中发送的完整JSON:
POST https://www.nadlan.gov.il/Nadlan.REST/Main/GetAssestAndDeals
但由于某些原因,您必须更改PageNo
字段,因为默认情况下它设置为0
,这会提供404状态代码。将其设置为某些内容> 0似乎正在起作用。
以下是完整的脚本:
# -*- coding: utf-8 -*-
import requests
import json
data = requests.get(
'https://www.nadlan.gov.il/Nadlan.REST/Main/GetDataByQuery',
params={'query': 'שכונת גבעת מרדכי, ירושלים'}
)
json_data = data.json()
json_data['PageNo'] = 1
r = requests.post(
'https://www.nadlan.gov.il/Nadlan.REST/Main/GetAssestAndDeals',
headers = {
'Content-Type': 'application/json;charset=UTF-8'
},
data = json.dumps(json_data)
)
print(r.status_code)
print(r.json())
我想你会想要修改json_data
中间结果来调整位置或其他字段