R: Снятие даты публикации конкретного веб-сайта с помощью RVest - PullRequest
1 голос
/ 12 октября 2019

В настоящее время я работаю в R с использованием RVest. Мой текущий веб-сайт "https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz". Но мне не удается получить отдельные pushlishDates предложений недвижимости.

Fe, это HTML-часть, которую я нашел встроенной в скрипт.

"@ publishDate": "2019-10-12T10: 50: 57.831 + 02: 00"

Мне не удается найти правильный селектор RVest ... Код ниже возвращает символ[0], так как узел "publishDate" не работает.

Что требуется html_node () для очистки каждой отдельной publishDate? Заранее большое спасибо.

library(rvest)

immo_webp <- read_html ("https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz")

PDate <- immo_webp %>%
  html_nodes("publishDate") %>%
  html_text()


1 Ответ

0 голосов
/ 12 октября 2019

Содержимое динамически загружается из тега script. Вы можете вывести соответствующую строку и проанализировать с помощью jsonlite, а затем извлечь в интересующие элементы данных, например, purrr


R:

library(rvest)
library(stringr)
library(jsonlite)
library(purrr)

p <- read_html('https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz') %>% html_text()
data <- jsonlite::parse_json(str_match_all(p,'resultListModel: (.*\\})')[[1]][,2])
results <- data$searchResponseModel$resultlist.resultlist$resultlistEntries[[1]]$resultlistEntry

df <- map_df(results, function(item) {

  data.frame(property = item$resultlist.realEstate$address$description$text,
             datePublished = item$`@publishDate`,
             stringsAsFactors=FALSE)
})

View(df)

enter image description here


Py:

from bs4 import BeautifulSoup as bs
import requests, re, json
import pandas as pd

r = requests.get('https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz')
p = re.compile(r'resultListModel: (.*})')
data = json.loads(p.findall(r.text)[0])
info = [
        (entry['resultlist.realEstate']['address']['description']['text']
        ,entry['@publishDate']) 
        for entry in data['searchResponseModel']['resultlist.resultlist']['resultlistEntries'][0]['resultlistEntry']
        ]
print(pd.DataFrame(info,columns = ['Property','PublishedDate']))
...