Ошибка в open.connection (x, "rb"): ошибка HTTP 404 в R - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь очистить данные с помощью R, чтобы получить подробную информацию о некоторых списках на веб-сайте, указанном ниже, но я получаю ошибку, которую не знаю, как ее исправить: Ошибка в open.connection (x, "rb"): Ошибка HTTP 404 Я попытался использовать пакет httr и попробовать функцию, как показано в аналогичных сообщениях, но не могу ее решить. Я что-то не так делаю?

library(XML)
library(RCurl)
library(curl) 
library(rvest)
library(tidyverse)
library(dplyr)
library(httr) 

url <- "https://www.sgcarmart.com/new_cars/index.php"
cardetails <- read_html(url)

listing <- html_nodes(cardetails, "#nc_popular_car")
popularcars <- html_nodes(listing,".link")
count<-length(popularcars)


info <- data.frame(CarName=NA, Distributer=NA, Hotline= NA, CountryBuilt= NA, Predecessor= NA, stringsAsFactors = F )

for(i in 1:count)
{
  h <- popularcars[[i]]

details_url <- paste0("https://www.sgcarmart.com/new_cars",html_attr(h,"href"))

details <- read_html(details_url)

info[i,]$CarName <- html_node(details,".link_redbanner")

}

info

1 Ответ

1 голос
/ 15 февраля 2020

TL; DR

Добавить sla sh:

  details_url <- paste0("https://www.sgcarmart.com/new_cars/",html_attr(h,"href"))
  # --->          --->          --->          --->         ^

Путешествие

  1. Я запустил ваш источник достаточно далеко, чтобы получить popularcars и посмотрел на первый:

    h <- popularcars[[1]]
    h
    # {html_node}
    # <a href="newcars_overview.php?CarCode=12618" class="link">
    # [1] <div style="position:relative; padding-bottom:6px;">\r\n                                < ...
    # [2] <div style="padding-bottom:3px;" class="limittwolines">Toyota Corolla Altis</div>
    details_url <- paste0("https://www.sgcarmart.com/new_cars",html_attr(h,"href"))
    details_url
    # [1] "https://www.sgcarmart.com/new_carsnewcars_overview.php?CarCode=12618"
    

    Как и вы, для меня этот URL-адрес возвратил 404.

  2. Я прошел (скучно, нормальный, браузер) к основному URL, посмотрел на источник для страницы и искал 12618:

    <div style="padding:10px 10px 5px 10px;" id="nc_popular_car">
                                            <div class="floatleft" style="text-align:center;width:136px;padding-right:22px;">
                            <a href="newcars_overview.php?CarCode=12618" class="link">
                                <div style="position:relative; padding-bottom:6px;">
                                    <div style="position:absolute; border:1px solid #B9B9B9; width:134px; height:88px;"><img src="https://i.i-sgcm.com/images/spacer.gif" width="1" height="1" alt="spacer" /></div>
                                    <img src="https://i.i-sgcm.com/new_cars/cars/12618/12618_m.jpg" width="136" height="90" border="0" alt="Toyota Corolla Altis" />
                                </div>
                                <div style="padding-bottom:3px;" class="limittwolines">Toyota Corolla Altis</div>
                            </a>
                            <div style="padding-bottom:14px;" class="font_black">$91,888</div>
                        </div>
    
  3. Я щелкнул правой кнопкой мыши на части <a href="newcars_overview.php?CarCode=12618" class="link"> и скопировал ссылку "местоположение. Я обнаружил, что это было:

    https://www.sgcarmart.com/new_cars/newcars_overview.php?CarCode=12618 <-- from the source
    https://www.sgcarmart.com/new_carsnewcars_overview.php?CarCode=12618  <-- from your code
    

Кстати, вам может показаться, что управлять этим немного легче, чем for l oop Итеративное построение фрейма ужасно неэффективно, и хотя оно может быть неплохим для 18 записей, которые я нашел, в долгосрочной перспективе это не очень хорошо (если вы можете избежать этого).

info <- lapply(popularcars, function(h) {
    details_url <- paste0("https://www.sgcarmart.com/new_cars/", html_attr(h,"href"))
    details <- read_html(details_url)
    html_text(html_node(details,".link_redbanner"))
  })

str(info)
# List of 18
#  $ : chr "Toyota Corolla Altis"
#  $ : chr "Hyundai Venue"
#  $ : chr "Hyundai Avante"
#  $ : chr "SKODA Octavia"
#  $ : chr "Honda Civic"
#  $ : chr "Mazda 3 Sedan Mild Hybrid"
#  $ : chr "Honda Jazz"
#  $ : chr "Kia Cerato"
#  $ : chr "Mazda CX-5"
#  $ : chr "Mercedes-Benz GLA-Class(Parallel Imported)"
#  $ : chr "Toyota Raize(Parallel Imported)"
#  $ : chr "Toyota Camry Hybrid(Parallel Imported)"
#  $ : chr "Mercedes-Benz A-Class Hatchback(Parallel Imported)"
#  $ : chr "Mercedes-Benz A-Class Saloon(Parallel Imported)"
#  $ : chr "Honda Fit(Parallel Imported)"
#  $ : chr "Mercedes-Benz C-Class Saloon(Parallel Imported)"
#  $ : chr "Mercedes-Benz CLA-Class(Parallel Imported)"
#  $ : chr "Honda Freed Hybrid(Parallel Imported)"

Последнее замечание: хотя это и стоит обучения , Условия обслуживания этого веб-сайта четко сформулированы: "Вы соглашаетесь, что не будете: ... участвовать в массовый автомат d, систематизация c или любая форма извлечения материала («Контент») на нашем Веб-сайте ". Я предполагаю, что ваши усилия находятся под этим пределом.

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