javascript - 使用 Requests 正确构建 XHR 请求 [python]

标签 javascript python

我正在尝试对一个网站进行一些网络抓取,通过 JavaScript 生成其数据。我已经在这里阅读了足够多的内容,现在知道抓取这些内容的方法是:

  1. 观察 Firebug 中的网络选项卡,了解发出请求时会发生什么
  2. 隔离 XHR 请求并在脚本中重新创建它们。

因此,当我执行 1 时,POST 请求将发送到此屏幕截图中可见的链接: enter image description here 您还可以看到它得到的响应。看起来很棒,对吧?

但是当我尝试重新创建该请求和响应时,使用我在 Firebug 的 Post 选项卡下看到的有效负载,在 Python 中如下所示:

import requests
from bs4 import BeautifulSoup

payload = {"Max":999,"RectCoord":"89,-179,-89,179","Source":"","SortField":"NEWID()","OfficeName":"","FirstName"
:"","LastName":"da","CityName":"","ZipCode":"","Category":"S","SecLanguageReq":"","OfficeCode":""}

r = requests.post('http://search.cnyrealtor.com/MyAjaxService.asmx/MemberSearch', data=payload)

print(r.content)

我收到一个显示错误消息的页面: 无法识别意外以\'/MemberSearch\' 结尾的 URL 的请求格式

所以,我的问题是 - 当 Firebug 中的响应工作正常时,为什么我会收到该响应?我在 Python 脚本中的 requests.post(url) 行中是否遗漏了某些内容?

最佳答案

您需要将字典转储为 JSON 并作为有效负载发送。设置 Content-Type 请求 header 也很重要:

import json
import requests

payload = {"Max": 999, "RectCoord": "89,-179,-89,179", "Source": "", "SortField": "NEWID()", "OfficeName": "",
           "FirstName": "", "LastName": "", "CityName": "", "ZipCode": "", "Category": "S", "SecLanguageReq": "",
           "OfficeCode": ""}

with requests.Session() as session:
    session.get("http://search.cnyrealtor.com/SiteContent/SYR/MemberSearchSYR.aspx")
    r = session.post('http://search.cnyrealtor.com/MyAjaxService.asmx/MemberSearch', data=json.dumps(payload),
                     headers={"Content-Type": "application/json; charset=UTF-8"})

    print(r.content)

关于javascript - 使用 Requests 正确构建 XHR 请求 [python],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38704592/

相关文章:

javascript - 当用户离开页面时自动提交表单

php - Javascript 和字符串格式的国际化

javascript - JS Javascript 变量泄漏

python - 将 Jar 添加到独立的 pyspark

python - 如何从 MySQL 中一个非常大的表的特定列中随机选择一些值,比如 1000 个值?

python - 如何正确设置此 API 调用的格式?

python - 如何将 .txt 文件中的列表转换为处理中的列表 (python)?

javascript - 如何在portia中渲染javascript页面?

python - GtkAboutDialog 关闭按钮错误

javascript - 我使用 ES6 模块以及使用导入/导出语法的 npm 模块的最简单方法是什么?