首页 > 解决方案 > 使用非 JSON 格式的表单数据抓取 ajax 调用

问题描述

我的 Python 经验有限,正在尝试抓取一个使用 ajax 调用的网站。我尝试按照不同网站上提供的示例进行操作,但还没有成功,很可能是因为我的 ajax 调用的表单数据未格式化为 JSON。

在这种情况下,ajax 调用具有以下格式的表单数据:

filters[targetValueMin]: 0
filters[targetValueMax]: 15000000
filters[interestRateMin]: 0
filters[interestRateMax]: 20
filters[loanTermMin]: 0
filters[loanTermMax]: 240
filters[platforms]: 
filters[financingTypes]: 
filters[developmentPhases]: 
filters[investmentPurposes]: 

因此我的问题是:我怎样才能抓取来自这个 ajax 调用的内容?

可以通过转到https://www.crowdfundmarkt.nl/crowdfundingprojecten并调整左侧的过滤器之一来重新创建 ajax 调用。

标签: pythonajaxpython-3.xweb-scraping

解决方案


选中在请求文档中发出POST 请求以发送表单 URL 编码的数据。然后解析json结果:

import requests
payload = {
    'filters[routeName]' : 'projects_list', 
    'filters[pageNr]' : '1',
    'filters[funded]' : '1',
    'filters[targetValueMin]' : '0',
    'filters[targetValueMax]' : '15000000',
    'filters[interestRateMin]' : '0',
    'filters[interestRateMax]' : '20',
    'filters[loanTermMin]' : '0',
    'filters[loanTermMax]' : '240',
    'filters[platforms]' : '',
    'filters[financingTypes]' : '',
    'filters[developmentPhases]' : '',
    'filters[investmentPurposes]' : '',
    'filters[businessEntities]' : '',
    'filters[states]' : '',
    'filters[sectors]' : '',
    'filters[search]' : ''
}
r = requests.post("https://www.crowdfundmarkt.nl/crowdfundingprojecten/ajax-fetch", data=payload)
print r.json()

推荐阅读