【发布时间】:2021-02-04 09:42:22
【问题描述】:
我想从这个站点抓取数据:https://ispu.mgipu.hr/ 这个想法是提取放大后可以看到的小点(它们的坐标)。
这是我想要自动化的过程(至少在缩放到 1:5000 之后):
- 您必须单击右侧具有正方形、三角形和圆形的符号。
- 然后您必须点击下方的“Info lokacija”。
- 那么您必须在“Odabir”上方选择“Poligonom”。
- 现在您必须用鼠标拖动任何东西并在完成后双击。
如果您在上述过程中检查网络,您会看到一个新的 XHR 请求出现:'obuhvat'。这是一个 POST 请求,它只有一个有效负载元素(带有坐标的 POLYGON)。
我尝试将这些 POST 请求直接发送到同一个站点,但我总是得到 400 响应。
只有在我首先在浏览器中执行所有操作并将相同的有效负载复制粘贴到请求时才有效。
这是我的尝试:
library(httr)
# params
url <- 'https://ispu.mgipu.hr/geo/api/info-lokacija/obuhvat'
ua <- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36'
# this works becuase I have already draw these polygon in app manually
data <- list(
geom = "POLYGON((466131.6322632646 5062601.925203851,466141.4322828647 5062489.924979851,466292.63258526527 5062489.924979851,466287.03257406526 5062596.325192652,466131.6322632646 5062601.925203851))"
)
req <- POST(url, body = data, encode = 'json', user_agent(ua))
print(req$status_code)
# this doesnt work, I have just change the one number in data
data <- list(
geom = "POLYGON((466131.6322632647 5062601.925203851,466141.4322828647 5062489.924979851,466292.63258526527 5062489.924979851,466287.03257406526 5062596.325192652,466131.6322632646 5062601.925203851))"
)
req <- POST(url, body = data, encode = 'json', user_agent(ua))
print(req$status_code)
【问题讨论】:
-
我可以告诉你原因,但我还没有足够的解决方案
-
迫不及待地想听听 :) 也许我没有在介绍帖子中解释。我的计划是去掉你在地图上看到的小点。我最感兴趣的是您可以使用右侧的“Prijava početka građenja, u...”过滤的点。我知道我可以通过在 URL
https://ispu.mgipu.hr/geo/api/identify上针对每个纬度/经度发送 POST 请求来废弃它们。但这是太多的要求。多边形“返回所有点”给定多边形。这是一个请求而不是数千个请求。但不知何故,当我构建自己的多边形时,它不起作用,只有当我首先在地图上绘制它时。 -
我将在今天晚些时候发布答案。恐怕这不是一个完整的答案,因为由于它是一个不熟悉的领域,我还有很长的路要走。但我可以给你我认为的起点!
-
太好了。非常感谢您花时间解决这个问题。
标签: python r web-scraping rvest httr