Как очистить ссылку URL из окна поиска в R? - PullRequest
1 голос
/ 27 октября 2019

Я хотел бы получить URL-ссылку на вывод из окна поиска. Например, если я наберу '4/271 Balmoral Road' в поле поиска https://www.realestate.co.nz/profile/, это покажет релевантные результаты, и это заставит меня перейти к https://www.realestate.co.nz/profile/0b27093b9ce641108f7a6033b9fdae28

То есть в R, если явведите «4/271 Balmoral Road» в качестве входных данных, я хочу, чтобы выходные данные были «https://www.realestate.co.nz/profile/0b27093b9ce641108f7a6033b9fdae28'

Не могли бы вы мне помочь? Это было бы очень полезно.

Я использовал Rvest со следующим кодом, но не работал

'https://www.realestate.co.nz/profile?query=4/271%20Balmoral%20Road' %>%
  read_html() %>%
  html_nodes(xpath = '//*[@id="ember386"]/div[1]/div/a') %>% html_attr('href')

1 Ответ

1 голос
/ 27 октября 2019

Контент извлекается динамически. Вы можете использовать httr для отправки запроса адреса на сервер и jsonlite для обработки ответа json с сервера. Вы получаете 'slugs' для URL-адресов в ответе, которые необходимо объединить с базовой строкой для окончательного URL-адреса.


R:

library(httr)
library(jsonlite)

params = list('q' = '4/271 Balmoral Road')
d <- jsonlite::parse_json(httr::GET(url = 'https://platform.realestate.co.nz/search/v1/suggest/property', query = params))
base <- 'https://www.realestate.co.nz/profile/'
print(paste0(base, d$data[[1]]$slug))

илиИспользуемая версия OP:

library(httr) 
library(jsonlite) 

params = list('q' = '4/271 Balmoral Road') 
get <- GET(url = 'https://platform.realestate.co.nz/search/v1/suggest/property', query = params) 
json <- fromJSON(paste(get, collapse="")) 
base <- 'https://www.realestate.co.nz/profile/' 
print(paste0(base, json$data[[1]]$slug))

Py:

import requests

params = (('q', '4/271 Balmoral Road'),)
r = requests.get('https://platform.realestate.co.nz/search/v1/suggest/property' , params=params).json()
links = [f"https://www.realestate.co.nz/profile/{i['slug']}" for i in r['data']]
print(links[0])
...