【问题标题】:Finding element in a web page - Rselenium/rvest在网页中查找元素 - Rselenium/rvest
【发布时间】:2018-11-10 19:35:25
【问题描述】:

我正在尝试从该网站收集所有个人 URL(律师的 URL) - https://www.linklaters.com/en/find-a-lawyer。我找不到如何提取 URL 的方法——当我使用 CSS 选择器时它不起作用。您能否建议其他方法来查找网页中的特定元素? 另外要收集我需要单击“加载更多”按钮的所有数据,我正在使用 RSelenium。 我认为我在通过 docker 运行 Rselenium 时没有做正确的事情,因为它出现了错误 - checkError(res) 中的错误: httr 调用中的未定义错误。 httr 输出:无法连接到 localhost 端口 4445:连接被拒绝

library(dplyr)
library(rvest)
library(stringr)
library(RSelenium)

link = "https://www.linklaters.com/en/find-a-lawyer"
hlink = read_html(link)
urls <- hlink %>%
        html_nodes(".listCta__subtitle--top") %>%
        html_attr("href")
urls <- as.data.frame(urls, stringsAsFactors = FALSE)
names(urls) <- "urls"

remDr <- RSelenium::remoteDriver(remoteServerAddr = "localhost",
                                 port = 4445L,
                                 browserName = "chrome")
remDr$open()

replicate(20,
          {       # scroll down
                  webElem <- remDr$findElement("css", "body")
                  webElem$sendKeysToElement(list(key = "end"))
                  # find button
                  allURL <- remDr$findElement(using = "css selector", ".listCta__subtitle--top")
                  # click button
                  allURL$clickElement()
                  Sys.sleep(6)
          })

allURL <- xml2::read_html(remDr$getPageSource()[[1]])%>%
        rvest::html_nodes(".field--type-ds a") %>%
        html_attr("href")

【问题讨论】:

    标签: r rvest rselenium


    【解决方案1】:

    它只是通过 XHR 请求加载动态数据。只需抓住可爱的 JSON:

    jsonlite::fromJSON("https://www.linklaters.com/en/api/lawyers/getlawyers")
    jsonlite::fromJSON("https://www.linklaters.com/en/api/lawyers/getlawyers?searchTerm=&sort=asc&showing=30")
    jsonlite::fromJSON("https://www.linklaters.com/en/api/lawyers/getlawyers?searchTerm=&sort=asc&showing=60")
    jsonlite::fromJSON("https://www.linklaters.com/en/api/lawyers/getlawyers?searchTerm=&sort=asc&showing=90")
    

    继续递增 30 直到返回错误结果,最好在请求之间有 5 秒的睡眠延迟,以免作为一个混蛋出现。

    【讨论】:

    • 谢谢!因为我需要为 100 多个网站做同样的事情。如何查看其他网站的 JSON?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多