0

ここに示されているように、「Dated Posted」と「Date Updated」の値を取得しようとしています。ウェブサイトの URL はhttp://sulit.com.ph/3991016です。

このスレッドWeb Scraping (in R?)で提案されているように、xpathSApply を使用する必要があると感じていますが、機能させることができません。

url = "http://sulit.com.ph/3991016"
doc = htmlTreeParse(url, useInternalNodes = T)

date_posted = xpathSApply(doc, "??????????", xmlValue)

また、「P27M」という語句をウェブサイトにも掲載する簡単な方法を知っている人はいますか? 助けていただければ幸いです。

4

2 に答える 2

3

別の方法を次に示します。

> require(XML)
> 
> url = "http://www.sulit.com.ph/index.php/view+classifieds/id/3991016/BEAUTIFUL+AYALA+HEIGHTS+QC+HOUSE+FOR+SALE"
> doc = htmlParse(url)
> 
> dates = getNodeSet(doc, "//span[contains(string(.), 'Date Posted') or contains(string(.), 'Date Updated')]")
> dates = lapply(dates, function(x){
+         temp = xmlValue(xmlParent(x)["span"][[2]])
+         strptime(gsub("^[[:space:]]+|[[:space:]]+$", "", temp), format = "%B %d, %Y")
+ 
+ })
> dates
[[1]]
[1] "2012-07-05"

[[2]]
[1] "2011-08-11"

htmlParse が URL を解析するため、RCurl を使用する必要はありません。getNodeSet は、値として「投稿日」または「更新日」を持つノードのリストを返します。lapply はこれらのノードの両方をループし、最初に親ノードを見つけ、次に 2 番目の「スパン」ノードの値を見つけます。この部分は、ウェブサイトが異なるページのフォーマットを変更する場合、あまり堅牢ではない可能性があります (そのサイトの html を見ると、非常に可能性が高いようです)。SlowLearner の gsub は両方の日付をクリーンアップします。日付を日付クラスとして返すために strptime を追加しましたが、その手順はオプションであり、将来どのように情報を使用するかによって異なります。HTH

于 2012-07-14T06:07:09.553 に答える
2

これはエレガントではなく、おそらくあまり堅牢ではありませんが、この場合は機能するはずです。

呼び出しの後の最初の 4 行requireは、URL を取得してテキストを抽出します。grepは、TRUEまたはFALSE探している文字列が見つかったかどうかに応じて、それをリスト内のwhichインデックスに変換します。これを 1 ずつ増やします。これをcleantext見ると、更新日が文字列 "Date Updated" の後のリスト内の次の要素であることがわかるからです。したがって、+1「更新日」の後に要素が取得されます。行はgsub文字列をクリーンアップするだけです。

「P27M」の問題は、それが何にも固定されていないことです。それは、自由なテキストが任意の位置に浮かんでいるだけです。価格が常に "P" の後に 1 ~ 3 桁の数字、その後に "M" が続き、しかもページにそのような文字列が 1 つしかないことが確実な場合は、grep または正規表現が機能します。入手困難。

require(XML)
require(RCurl)

myurl <- 'http://www.sulit.com.ph/index.php/view+classifieds/id/3991016/BEAUTIFUL+AYALA+HEIGHTS+QC+HOUSE+FOR+SALE'
mytext <- getURL(myurl)
myhtml <- htmlTreeParse(mytext, useInternal = TRUE)
cleantext <- xpathApply(myhtml, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue)

cleantext <- cleantext[!cleantext %in% " "]
cleantext <- gsub("  "," ", cleantext)

date_updated <- cleantext[[which(grepl("Date Updated",cleantext))+1]]
date_posted <- cleantext[[which(grepl("Date Posted",cleantext))+1]]
date_posted <- gsub("^[[:space:]]+|[[:space:]]+$","",date_posted)
date_updated <- gsub("^[[:space:]]+|[[:space:]]+$","",date_updated)

print(date_updated)
print(date_posted)
于 2012-07-12T20:26:32.773 に答える