html_nodes()
には、最初に "。"が必要です。 css-classであなたのタグを見つける。あなたはsugestのように手動で
V <- c(".ListItem_001_Price", ".ListItem_002_Price", ".ListItem_003_Price")
を作成することができ、私はあなたがユーザーの正規表現ので、あなたは肉体労働を避けることができ'ListItem_([0-9]{3})_Price'
のようなクラスを一致させることをお勧めします。 html-nodeオブジェクトではなく、マークアップの実際の文字列を正規表現してください。 (下を参照)
Rでは、apply()、lapplay()、sapplay()などは、短いループのように機能します。その中で、リスト、データフレーム、行列、ベクトルなどの多数の値を含むデータ型のすべてのメンバーに関数を適用できます。あなたのケースでは
は、それが好きで、それを考えているの仕組みを理解するために、ベクター、および先頭に方法です:あなたのケースでは
sapply(vector, function(x) THING-TO-DO-WITH-ITEM-IN-VECTOR)
を、あなたは何をする事を希望しますベクトルの項目をベクトル内の項目に対応するhtml_textのフェッチとします。 例えば、以下のコードを参照してください:
library(rvest)
# An example piece of html
example_markup <- "<ul>
<li class=\"ListItem_041_Price\">Brush</li>
<li class=\"ListItem_031_Price\">Phone</li>
<li class=\"ListItem_002_Price\">Paper clip</li>
<li class=\"ListItem_012_Price\">Bucket</li>
</ul>"
html <- read_html(example_markup)
# Avoid manual creation of css with regex
regex <- 'ListItem_([0-9]{3})_Price'
# Note that ([0-9]{3}) will match three consecutive numeric characters
price_classes <- regmatches(example_markup, gregexpr(regex, example_markup))[[1]]
# Paste leading "." so that html_nodes() can find the class:
price_classes <- paste(".", price_classes, sep="")
# A singel entry is found like so:
html %>% html_nodes(".ListItem_031_Price") %>% html_text()
# Use sapply to get a named character vector of your products
# Note how ".ListItem_031_Price" from the line above is replaced by x
# which will be each item of price_classes in turn.
products <- sapply(price_classes, function(x) html %>% html_nodes(x) %>% html_text())
製品の結果は、名前の文字ベクトルです。名前を削除するにはunname(products)
を使用してください。
ありがとう、ティム、それは完璧に動作します!内部の '関数(x)'は、私が理解できなかったものでした。 – Juraj