2017-12-16 10 views
0

私はいくつかのURLをループする方法を理解しようとしています。これは単なる学習課題です。私は基本的にこれを行う方法を知っていると思っていましたが、今は数時間問題に悩まされています。この時点では何の進歩もありません。私は以下の私のコードは近いと信じていますが、それは何らかの理由で何かを掻き立てているわけではありません。いくつかのURLを実行し、それぞれからデータをインポートします

library(rvest) 
URL <- "https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&rt=nc" 
WS <- read_html(URL) 
URLs <- WS %>% html_nodes("ResultSetItems") %>% html_attr("href") %>% as.character() 

は基本的に、私は、eBayに行き、簡単な検索語を入力し、「ResultSetItems」という名前のキーのノードを、発見し、そこからアイテムをこすりしようとしました。何も起こらなかった。また、私はどのように5つのURLを言うと、同じロジックを適用してインクリメントする方法を把握しようとしています。 URLは次のようになります。私はこの作業を取得することができないよう

for(i in 1:5) 
{ 

    site <- paste("https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=",i,"&_skc=0&rt=nc", jump, sep="") 
    dfList <- lapply(site, function(i) { 
     WS <- read_html(i) 
     URLs <- WS %>% html_nodes("ResultSetItems") %>% html_attr("href") %>% as.character() 
    }) 
} 
finaldf <- do.call(rbind, webpage) 

'https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=1&_skc=0&rt=nc'    

'https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=2&_skc=0&rt=nc' 

'https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=3&_skc=0&rt=nc' 

'https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=4&_skc=0&rt=nc' 

'https://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=mens%27s+shoes+size+11&_pgn=5&_skc=0&rt=nc' 

私は、コードは次のようになりべきだと思います。私は物事を過度に単純化するかもしれない。わからない。ここで少し助けてもらえますか? TIA。

答えて

1

ここにあります。与えられたURLのセット(私の場合はread_url)は、map関数を使って適用するだけです。

library(rvest) 
read_url %>% 
    map(~read_html(.))%>% 
    map(html_nodes, css = "xxxx") %>% 
    map(html_nodes, xpath = "xxx") %>% 
    map(html_attr, name = "xxx") %>% 
    unlist() 

同じ機能を適用して必要なデータを取得できるオブジェクトのリストが表示されます。あなたがそれを終えたら、リストをデータフレームにまとめるだけです。

しかし、http://www.ebay.com/robots.txtを見ることは、このeBayのドメインでスクラップすることはできないようです。別の例を試してみてください。 ;) HTH!

編集

それが禁止されているので、eBayであなたの例では、結果を出すことはできません。より明確にするために、私はthis web pageの例を使ってWeb廃棄を許可します。 これは、適用ファミリの機能を使用しないようにする方法です。。まず、は、情報を得るためのページのリストを生成します。

library(rvest) 
library(tidyverse) 

urls <- "http://books.toscrape.com/catalogue/page-" 

pag <- 1:5 

read_urls <- paste0(urls, pag, ".html") 

read_urls %>% 
    map(read_html) -> p 

は一度最終的な価格でタイトルケースに、または単にhtml_textattrにアクセスして、単純に(必要な場合にCSSとXPathを使用して)に含まれる情報を介してアクセスするhtml_nodesを使用して、あなたがが欲しい情報を抽出する情報を取得しました例。その結果

#Extract titles from the pages 
p %>% 
    map(html_nodes, "article") %>% 
    map(html_nodes, xpath = "./h3/a") %>% 
    map(html_attr, "title") %>% 
    unlist() -> titles 

#Extract price from the pages 
p %>% 
    map(html_nodes, "article") %>% 
    map(html_nodes, ".price_color") %>% 
    map(html_text) %>% 
    unlist() -> prices 

r <- tibble(titles, prices) 

:最後にtibbleに変換

# A tibble: 100 x 2 
           titles prices 
            <chr> <chr> 
1     A Light in the Attic £51.77 
2     Tipping the Velvet £53.74 
3       Soumission £50.10 
4       Sharp Objects £47.82 
5 Sapiens: A Brief History of Humankind £54.23 
6      The Requiem Red £22.65 

は、今では関数にこのすべてをオンにすることが可能です。しかし、私はあなたの手に残します。

+0

申し訳ありませんが、どういう意味ですか?あなたのコードは実際に何もしません。私はあなたが何を意味するかを知っています...私は必ずしもスクリーンスクラップebayリンクをしたくないです。私は私が知っていると思ったコンセプトを学びたいと思っていますが、私が今見ているように、私はこのことがどのように機能するのか本当に分かりません。ありがとう。 – ryguy72

+0

答えがより正確な例を提供するように編集されました。幸せなウェブスクレイピング:) –

+0

AWESOME !!これを共有してくれてありがとう! – ryguy72

関連する問題