首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >房地产广告上的网络抓取

房地产广告上的网络抓取
EN

Stack Overflow用户
提问于 2011-05-13 18:23:49
回答 2查看 3.6K关注 0票数 9

作为一个经济研究团队的实习生,我的任务是找到一种方法来自动收集房地产广告网站上的特定数据,使用R。

我假设相关的包是XMLRCurl,但我对他们的工作的理解非常有限。

这是该网站的主页:http://www.leboncoin.fr/ventes_immobilieres/offres/nord_pas_de_calais/?f=a&th=1&zz=59000理想情况下,我想构建我的数据库,使每一行对应一个广告。

这里是一个广告的细节:我的变量是:价格("Prix"),城市("Ville"),表面(" surface "),"GES“,”classeénergie“和房间的数量("Pièces"),以及在广告中显示的图片数量。我还想将文本导出到一个字符矢量中,稍后我将对其进行文本挖掘分析。

我正在寻找任何帮助,链接到教程或如何操作,这将给我一个线索的路径遵循。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 01:17:29

您可以使用R中的XML包来抓取这些数据。这里有一段代码应该会对你有所帮助。

代码语言:javascript
复制
# 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)
}

下面是如何使用这些函数将信息提取到数据框中。

代码语言:javascript
复制
# 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')

这将返回以下输出

代码语言:javascript
复制
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系列函数遍历多个页面以获取所有广告的详细信息。有两件事需要注意。一个是从网站上抓取的合法性。二是在循环函数中使用Sys.sleep,这样服务器就不会被请求轰炸。

让我知道这是如何工作的

票数 12
EN

Stack Overflow用户

发布于 2011-05-13 19:36:24

这是一个相当大的问题,所以您需要将其分解为较小的部分,并查看哪些部分被卡住了。

检索网页有问题吗?(请注意代理服务器问题。)或者,棘手的比特正在从它访问有用的数据位?(为此,您可能需要使用xPath。)

请查看Rosetta上的web-scraping example代码并浏览these SO questions以获取更多信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5990525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档