使用Rvest抓取网页

时间:2020-04-06 07:39:36

标签: r web-scraping rvest

我正在尝试从此网络page加载一些数据。我要获取的信息部分是此特定部分:

enter image description here

我检查了页面,看到了这个班级&id:

enter image description here

所以我尝试这样:

FormData formData = FormData.fromMap({
  "image-param-name": await MultipartFile.fromFile(
    imageFile.path,
    filename: fileName,
    contentType: new MediaType("image", "jpeg"), //add this
  ),
});

然后我得到一个没有任何信息的数据行。我在做什么错了?

谢谢。

已更新::感谢QHarr:

var dio = Dio();
String fileName = imageFile.path.split('/').last;
FormData formData = FormData.fromMap({
  "image-param-name": await MultipartFile.fromFile(
    imageFile.path,
    filename: fileName,
    contentType: new MediaType("image", "jpeg"), //add this
  ),
});

var response = await dio.post(
  "url",
  data: formData,
  options: Options(
    headers: {
      "Authorization": auth-token
    },
  ),
  onSendProgress: (int sent, int total) {
    debugPrint("sent${sent.toString()}" + " total${total.toString()}");
  },
).whenComplete(() {
  debugPrint("complete:");
}).catchError((onError) {
  debugPrint("error:${onError.toString()}");
});

1 个答案:

答案 0 :(得分:1)

它是动态填充的。如果您不介意一些微小的差异,则可以发出两个请求。一个到初始URL,以获取一个时间戳值;然后发出一个API请求(与页面一样),并添加先前检索到的时间戳,以获取正确期间的预测。解析响应以获取持有avisos的json

library(httr)
library(rvest)
library(jsonlite)

headers = c('Referer' = 'https://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna')

date_value <- read_html('https://www.aemet.es/es/eltiempo/prediccion/avisos?w=mna') %>% html_node('#fecha-seleccionada-origen') %>% html_attr('value')

data <- httr::GET(url = paste0('https://www.aemet.es/es/api-eltiempo/resumen-avisos-geojson/PB/', date_value , '/D+1'), httr::add_headers(.headers=headers)) 

avisos <- jsonlite::parse_json(read_html(data$content) %>% html_node('p') %>% html_text())$objects$Avisos$geometries