【问题标题】:Requests doesnt retrieve the site after post request发布请求后请求不检索站点
【发布时间】:2021-02-02 09:15:22
【问题描述】:

我想从这个站点抓取数据:https://ispu.mgipu.hr/

这里是过程(至少在缩放到 1:5000 之后):

  1. 您必须单击右侧具有正方形、三角形和圆形的符号。
  2. 然后您必须点击下方的“Info lokacija”。
  3. 那么您必须在“Odabir”上方选择“Poligonom”。
  4. 现在您必须用鼠标拖动任何东西(完成后双击)。

如果您检查网络,您会看到一个新请求出现:'obuhvat'。

我尝试直接向同一个站点发出 POST 请求,但我总是得到我的身体是空的答案。

只有在我首先在浏览器中执行所有操作并在 python 中重复请求时,我才能工作。

这是我的尝试:

s = requests.Session()
s.get('https://ispu.mgipu.hr/')
data = {
    "geom":"POLYGON((460050.4401008804 5073385.306770615,460196.600393201 5073256.506513015,460327.64065528155 5073458.106916216,460183.16036632087 5073556.107112216,460050.4401008804 5073385.306770615))"
    }
s.post('https://ispu.mgipu.hr/geo/api/info-lokacija/obuhvat',
       data=json.dumps(data))

【问题讨论】:

  • 您错过了提问。确保它对于 Stack Overflow 来说足够具体。
  • 我想检索 ''obuhvat'' 请求的输出。您可以运行代码。它不起作用。步骤说明了我想要自动化哪些步骤。

标签: python web-scraping python-requests


【解决方案1】:

因为你必须放“json”而不是“data”(并放一个标题)。以下代码适用于我:

import requests as rq

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"}
url = "https://ispu.mgipu.hr/geo/api/info-lokacija/obuhvat"
data = {
    "geom":"POLYGON((460050.4401008804 5073385.306770615,460196.600393201 5073256.506513015,460327.64065528155 5073458.106916216,460183.16036632087 5073556.107112216,460050.4401008804 5073385.306770615))"
    }
resp = rq.post(url, json=data, headers=headers)

无需事先放置“get”查询并创建会话。

除了 CRS 的更改之外,发布请求不会向您发送太多信息...

再见

【讨论】:

  • 感谢您的回复。您的代码有效,因为我已经在网站上绘制了一个多边形。如果您只更改 data 参数的一个编号(例如 460050.4401008804 到 460050.4401008805,最后一个数字)它不起作用!我不明白为什么如果我改变一个数字它就不起作用。它返回 400 状态码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2022-06-24
  • 1970-01-01
  • 2019-06-08
  • 2017-08-08
  • 2018-11-25
相关资源
最近更新 更多