我试图废弃一个网站,我一直收到404错误

时间:2017-11-12 19:03:56

标签: python google-chrome curl web-scraping python-requests

我正在试图废弃这个网站:

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错误!

我想它与编码有关,但我不确定我应该改变什么......

任何帮助将不胜感激!

1 个答案:

答案 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中间结果来调整位置或其他字段