9

経済研究チームのインターンとして、Rを使って不動産広告のウェブサイトで特定のデータを自動的に収集する方法を見つけるという任務を与えられました。

関係するパッケージはとだと思いますがXMLRCurlそれらの作業についての私の理解は非常に限られています。

Webサイトのメインページは次のとおりです。http://www.leboncoin.fr/ventes_immobilieres/offres/nord_pas_de_calais/? f = a&th = 1&zz = 59000理想的には、各行が広告。

広告の詳細は次のとおりです。http://www.leboncoin.fr/ventes_immobilieres/197284216.htm?ca = 17_s 私の変数は、価格( "Prix")、都市( "Ville")、表面( "Ville")です。 「表面」)、「GES」、「Classeénergie」、部屋の数(「Pièces」)、および広告に表示される写真の数。また、文字ベクトルでテキストをエクスポートしたいと思います。後でテキストマイニング分析を実行します。

ヘルプ、チュートリアルまたはハウツーへのリンクを探しています。これにより、進むべき道を案内することができます。

4

2 に答える 2

12

Rのパッケージを使用して、XMLこのデータをスクレイプできます。これが役立つはずのコードです。

# DEFINE UTILITY FUNCTIONS

# Function to Get Links to Ads by Page
get_ad_links = function(page){
  require(XML)
  # construct url to page
  url_base = "http://www.leboncoin.fr/ventes_immobilieres/offres/nord_pas_de_calais/"
  url      = paste(url_base, "?o=", page, "&zz=", 59000, sep = "")
  page     = htmlTreeParse(url, useInternalNodes = T)

  # extract links to ads on page
  xp_exp   = "//td/a[contains(@href, 'ventes_immobilieres')]"
  ad_links = xpathSApply(page, xp_exp, xmlGetAttr, "href")
  return(ad_links)  
}

# Function to Get Ad Details by Ad URL
get_ad_details = function(ad_url){
   require(XML)
   # parse ad url to html tree
   doc = htmlTreeParse(ad_url, useInternalNodes = T)

   # extract labels and values using xpath expression
   labels  = xpathSApply(doc, "//span[contains(@class, 'ad')]/label", xmlValue)
   values1 = xpathSApply(doc, "//span[contains(@class, 'ad')]/strong", xmlValue)
   values2 = xpathSApply(doc, "//span[contains(@class, 'ad')]//a", xmlValue)
   values  = c(values1, values2)

   # convert to data frame and add labels
   mydf        = as.data.frame(t(values))
   names(mydf) = labels
   return(mydf)
}

これらの関数を使用して情報をデータフレームに抽出する方法は次のとおりです。

# grab ad links from page 1
ad_links = get_ad_links(page = 1)

# grab ad details for first 5 links from page 1
require(plyr)
ad_details = ldply(ad_links[1:5], get_ad_details, .progress = 'text')

これにより、次の出力が返されます

Prix :     Ville :  Frais d'agence inclus :  Type de bien :  Pièces :  Surface :  Classe énergie :          GES : 
469 000 € 59000 Lille                      Oui          Maison         8     250 m2  F (de 331 à 450)           <NA>
469 000 € 59000 Lille                      Oui          Maison         8     250 m2  F (de 331 à 450)           <NA>
140 000 € 59000 Lille                     <NA>     Appartement         2      50 m2  D (de 151 à 230) E (de 36 à 55)
140 000 € 59000 Lille                     <NA>     Appartement         2      50 m2  D (de 151 à 230) E (de 36 à 55)
170 000 € 59000 Lille                     <NA>     Appartement      <NA>      50 m2  D (de 151 à 230) D (de 21 à 35)

関数ファミリーを簡単に使用して、apply複数のページをループし、すべての広告の詳細を取得できます。注意すべき2つのこと。1つは、Webサイトからのスクレイピングの合法性です。2つはSys.sleep、サーバーがリクエストで攻撃されないように、ループ関数で使用することです。

これがどのように機能するか教えてください

于 2011-05-17T17:17:28.870 に答える
4

これは非常に大きな質問なので、小さな質問に分解して、どのビットが動かなくなっているかを確認する必要があります。

Webページの取得に問題がありますか?(プロキシサーバーの問題に注意してください。)または、そこからデータの有用なビットにアクセスするトリッキーなビットですか?(これにはおそらくxPathを使用する必要があります。)

詳細については、RosettaコードのWebスクレイピングの例を見て、これらのSOの質問を参照してください。

于 2011-05-13T11:36:23.620 に答える