невозможно подключиться к сайту https с помощью R - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь подключиться к удаленному сайту через https и загрузить некоторую информацию. Я делаю это:

library("httr")
library("XML")
library(RCurl)
url<-c("https://salesweb.civilview.com/Sales/SalesSearch?countyId=3")
file<-getURL(url, ssl.verifyhost = 0L, ssl.verifypeer = 0L)

каждая строка имеет ссылку «Подробности», которая дает больше информации о каждой записи. Мне нужно скачать URL и перейти в каждый раздел «Подробности» и объединить его с исходным набором данных.

Как я могу это сделать?

1 Ответ

1 голос
/ 26 марта 2019

Если я понял ваш вопрос, вы хотели бы получить данные из основной таблицы по URL-адресу https://salesweb.civilview.com/Sales/SalesSearch?countyId=3, а также подробные данные для каждой записи в основном URL-адресе.

В качестве примера я написал код, который позволяет извлекать данные с главной страницы в структурированном фрейме данных, в котором первый столбец является URL-адресом записи сведений.

#load libraries
library(rvest)
library (tidyverse)

#assign url
url <- "https://salesweb.civilview.com/Sales/SalesSearch?countyId=3"

#extract td tags contents
readUrlHtml <- read_html(url) %>% html_nodes("td")

#create empty dataframe
df <- data.frame(Details=character(),
                 Sheriff=character(), 
                 SalesDate=character(),
                 Plaintiff=character(),
                 Defendant=character(),
                 Address=character(),
                 stringsAsFactors=FALSE)

#loop to harvest the data
j = 1

for (i in 1:(length(readUrlHtml)/6))
  {
    df[i,c('Details')] <- paste0("https://salesweb.civilview.com/Sales/SaleDetails?PropertyId=",substr(readUrlHtml[j],65,73))
    df[i,c('Sheriff')] <- readUrlHtml[j+1] %>% html_text()
    df[i,c('SalesDate')] <- readUrlHtml[j+2] %>% html_text()
    df[i,c('Plaintiff')] <- readUrlHtml[j+3] %>% html_text()
    df[i,c('Defendant')] <- readUrlHtml[j+4] %>% html_text()
    df[i,c('Address')] <- readUrlHtml[j+5] %>% html_text()

    j = j + 6
  }

#values check
df[1,]

df[50,]

df[525,]

С пакетом rvest вы сможете извлекать и сохранять в новом фрейме данных данные страницы сведений.

РЕДАКТИРОВАТЬ 2019-03-29

Чтобы получить подробные данные, вам необходимо сохранить информацию о файлах cookie с основного URL. После этого вы можете создать новый фрейм данных для хранения этих данных: это показано в обновленной версии кода.

1) новая библиотека httr используется для получения данных куки

2) извлекаемые данные - это те, которые находятся внутри красного прямоугольника на экране печати (чтобы получить последнее, я предлагаю создать новый фрейм данных для хранения дополнительных данных, но я предполагаю, что это значительно увеличит количество типов необходимо обработать все данные!)

3) два кадра данных df & dfDetails можно объединить с помощью клавиши Details

#load libraries
library(rvest)
library (tidyverse)
library (httr) #new library

#assign url
url <- "https://salesweb.civilview.com/Sales/SalesSearch?countyId=3"

#extract td tags contents
readUrlHtml <- read_html(url) %>% html_nodes("td")

#create empty dataframe
df <- data.frame(Details=character(),
                 Sheriff=character(),
                 SalesDate=character(),
                 Plaintiff=character(),
                 Defendant=character(),
                 Address=character(),
                 stringsAsFactors=FALSE)

#loop to harvest the data
j = 1

for (i in 1:(length(readUrlHtml)/6))
  {
    df[i,c('Details')] <- paste0("https://salesweb.civilview.com/Sales/SaleDetails?PropertyId=",substr(readUrlHtml[j],65,73))
    df[i,c('Sheriff')] <- readUrlHtml[j+1] %>% html_text()
    df[i,c('SalesDate')] <- readUrlHtml[j+2] %>% html_text()
    df[i,c('Plaintiff')] <- readUrlHtml[j+3] %>% html_text()
    df[i,c('Defendant')] <- readUrlHtml[j+4] %>% html_text()
    df[i,c('Address')] <- readUrlHtml[j+5] %>% html_text()

    j = j + 6
  }


#values check
df[1,]

df[50,]

df[525,]


## UPDATED SECTION TO RETRIEVE THE URLS DETAILS ##

#retrieve session cookie by taking the url of the main page
urlInfos <- GET(url)

#create empty details dataframe
dfDetails <- data.frame(Details=character(),
                 Sheriff=character(), 
                 CourtCase=character(),
                 SalesDate=character(),
                 Plaintiff=character(),
                 Defendant=character(),
                 Address=character(),
                 Description=character(),
                 ApproxUpset=character(),
                 Attorney=character(),
                 AttorneyPhone=character(),
                 stringsAsFactors=FALSE)

#loop to harvest the details
for (i in 1:length(df$Details)) #takes a while to retrieve all records! (5-6 mins)
#for (i in 1:3) #loop through few record for testing purposes
{

  responseDetail <- GET(df[i,c('Details')], set_cookies(`urlInfos$cookies[6]` = paste0('"',urlInfos$cookies[7],'"')))
  readUrlHtmlDetail <- read_html(responseDetail) %>% html_nodes("td")

  dfDetails[i,c('Details')] <- df[i,c('Details')]
  dfDetails[i,c('Sheriff')] <- readUrlHtmlDetail[2] %>% html_text()
  dfDetails[i,c('CourtCase')] <- readUrlHtmlDetail[4] %>% html_text()
  dfDetails[i,c('SalesDate')] <- readUrlHtmlDetail[6] %>% html_text()
  dfDetails[i,c('Plaintiff')] <- readUrlHtmlDetail[8] %>% html_text()
  dfDetails[i,c('Defendant')] <- readUrlHtmlDetail[10] %>% html_text()
  dfDetails[i,c('Address')] <- readUrlHtmlDetail[12] %>% html_text()
  dfDetails[i,c('ApproxUpset')] <- readUrlHtmlDetail[14] %>% html_text()
  dfDetails[i,c('Attorney')] <- readUrlHtmlDetail[16] %>% html_text()
  dfDetails[i,c('AttorneyPhone')] <- readUrlHtmlDetail[18] %>% html_text()

}


#values detail check
dfDetails[1,]

dfDetails[50,]

dfDetails[525,]

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...