我是网络抓取的新手,需要帮助。我正在尝试从一个拥有约20个页面的属性网站中抓取数据,并且在每个页面中有〜18个指向不同属性的链接。我的最终目标是从每个属性链接中抓取所有数据。为此,我正在考虑通过将page参数加1来运行20页循环。
但是在执行此操作之前,我需要从单个页面上的每个属性中抓取数据,为此我需要链接到单个页面上的所有属性,因此需要从一个页面上抓取所有(指向属性的链接)。我试图使用 html_nodes(“ a”)实现这一目标,但徒劳无功。
这是我要抓取的页面和网站。
https://property.jll.co.in/search?city=Hyderabad&mode=list-view&page=0
这是一段代码,用于获取单个页面上的所有链接,但未获得所需的输出。我也尝试过使用不同的类和CSS选择器。
url <- 'https://property.jll.co.in/search?city=Hyderabad&mode=list-view&page=0'
download.file(url, destfile = "scrapedpage.html", quiet=TRUE)
content <- read_html("scrapedpage.html")
content %>%
html_nodes("a") %>%
head()
如果有人可以在这里提供帮助,我将不胜感激。预先感谢。
答案 0 :(得分:0)
该网页通过<script>
标签中的数据在您的Web浏览器中构建其结构。下载时,JavaScript无法运行。
data = html_text(html_nodes(content,"script")[10])
substr(data,1,100)
### [1] "window.store = {\"properties\":[{\"PropertyId\":\"109667\",\"PropertyName\":\"White House - Block A\",\"Address"
如果您将分配位从substr
处切掉,则可以使用R中的JSON解析器来解析该数据:
> d = rjson::fromJSON(substr(data,16,nchar(data)))
> names(d)
[1] "properties" "units_count" "units_count_text"
[4] "properties_count_text" "map_data" "pagination"
[7] "view_mode" "query_string"
然后您可以向下钻取,例如:
> d$map_data[[1]]
$PropertyName
[1] "White House - Block A"
$TransactionType
[1] "For Lease"
$Address
[1] "Kundanbagh Colony"
$ListingTypeDescription
[1] "Lease"