0

ここで問題を解決するために多くの時間を費やしてきましたが、残念ながらまだ運がありませんでした。誰かが私を正しい方向に向けてくれることを願っています。

以下のスクリプトで提供されているリンクにリストされているすべてのプロパティの住所要素を抽出しようとしています。ただし、出力は常に空のリストです。さまざまなバリエーションを試しましたが、うまくいきませんでした。

lapply(c('XML','httr'),require,character.only=TRUE)
link <- "http://www.realtor.ca/Map.aspx?CultureId=1&ApplicationId=1&RecordsPerPage=9&MaximumResults=9&PropertyTypeId=300&TransactionTypeId=2&SortOrder=A&SortBy=1&LongitudeMin=-114.52066040039104&LongitudeMax=-113.60536193847697&LatitudeMin=50.94776904194829&LatitudeMax=51.14246522072541&PriceMin=0&PriceMax=0&BedRange=0-0&BathRange=0-0&ParkingSpaceRange=0-0&viewState=m&Longitude=-114.063011169434&Latitude=51.0452194213867&ZoomLevel=11&CurrentPage=1#CultureId=1&ApplicationId=1&RecordsPerPage=9&MaximumResults=9&PropertyTypeId=300&TransactionTypeId=2&SortOrder=A&SortBy=1&LongitudeMin=-114.9913558959965&LongitudeMax=-113.1346664428715&LatitudeMin=50.91552869934793&LatitudeMax=51.1745480567661&PriceMin=0&PriceMax=0&BedRange=0-0&BathRange=0-0&ParkingSpaceRange=0-0&viewState=l&Longitude=-114.063011169434&Latitude=51.0452194213867&ZoomLevel=11&CurrentPage=1"
doc <- htmlTreeParse(link,useInternalNodes = T)
addresses <- xpathSApply(doc,"//div[@id='listView']//span",xmlValue)

の出力は次のaddressesとおりです。

> addresses
list()

実際、上記のリンクの他の html 要素は取得できませんでした。最初に完全にロードする機会を与えずに、ページのロードに時間がかかるGET{httr}か、Webページを瞬時にスクレイピングするためでしょうか. htmlTreeParse{XML}私の推論が理にかなっているのかどうかはわかりません。この問題に関するコミュニティの支援に感謝します。

4

2 に答える 2

3

サイトは AJAXPOST呼び出しを使用http://www.realtor.ca/api/Listing.svc/PropertySearch_Postして、結果リストのデータを動的に取得しています。同じことをして生データを取得し、結果の R リスト構造からアドレスを抽出する必要があります。

library(httr)

params <- list(CultureId=1,
               ApplicationId=1,
               RecordsPerPage=9,
               MaximumResults=9,
               PropertyTypeId=300,
               TransactionTypeId=2,
               SortOrder="A",
               SortBy=1,
               LongitudeMin="-114.9913558959965",
               LongitudeMax="-113.1346664428715",
               LatitudeMin="50.91552869934793",
               LatitudeMax="51.1745480567661",
               PriceMin=0,
               PriceMax=0,
               BedRange="0-0",
               BathRange="0-0",
               ParkingSpaceRange="0-0",
               viewState="l",
               Longitude="-114.063011169434",
               Latitude="51.0452194213867",
               ZoomLevel=11,
               CurrentPage=1)


pg <- POST("http://www.realtor.ca/api/Listing.svc/PropertySearch_Post",
           body=params, encode="form")

data <- content(pg)

sapply(data$Results, function(x) { x$Property$Address$AddressText })

## [1] "# 297 6220 17 AV SE|Penbrooke, Calgary, Alberta T2A0W6"         
## [2] "# 298 6220 17 AV|Redcarpet Mountview, Calgary, Alberta T2A0W6"  
## [3] "10 VILLAGE WY|Westpark Village, Strathmore, Alberta T1P1A2"     
## [4] "51 Village WY|Downtown Strathmore, Strathmore, Alberta T1P1A2"  
## [5] "# 324 6220 17 AV SE|Penbrooke, Calgary, Alberta T2A7H4"         
## [6] "# 345 6220 17 AV SE|Penbrooke, Calgary, Alberta T2A7H4"         
## [7] "# 28 6724 17 AV SE|Redcarpet Mountview, Calgary, Alberta T2A0W5"
## [8] "# 328 6220 17 AV SE|Penbrooke, Calgary, Alberta T2A7H4"         
## [9] "# 253 99 Arbour Lake RD NW|Arbour Lake, Calgary, Alberta T3G4E4"

警告スクレーパー

このコードを使用すると、サイトの著作権表示に違反することを指摘せざるを得ません。

このデータベースおよびこのウェブサイト上のすべての資料は、著作権法によって保護されており、CREA、またはデータを提供したメンバー、および/またはその他の第三者によって所有されています。このウェブサイトで利用可能な物件リストおよびその他のデータは、個人による非営利の私的使用を目的としています。著作権所有者の事前の書面による許可がない限り、リストまたはデータの全部または一部を直接的または間接的に商業的に使用することは明確に禁じられています。

ユーザーは、本利用規約に従い、私的使用のために個々のページを印刷または保存することができます。ただし、プロパティのリストおよび/またはデータは、いかなる点においても変更または変更したり、他のデータと統合したり、全体または一部をいかなる形式で公開したりすることもできません。禁止されている使用には、「スクリーン スクレイピング」、「データベース スクレイピング」、および CREA Web サイトによって作成または表示されるページのデータを収集、保存、再編成、または操作することを目的としたその他の活動が含まれます。

このコードを使用すると、TOS に違反することは間違いありません。

Realtor.[com|ca] のような組織は、前述のスクレイピング アクティビティを探し、それらを IP アドレスにまでさかのぼって追跡しているので、私はそれについて言及しているだけです。

于 2014-12-03T09:25:10.443 に答える