【问题标题】:R web scraping: I can't pull up the elements I wantR网络抓取:我无法提取我想要的元素
【发布时间】:2021-02-22 15:01:53
【问题描述】:

我是使用 R 进行网页抓取的初学者。我正在尝试抓取以下网页:https://bkmea.com/bkmea-members/#/company/2523

我想用class="company_name" 获取div 节点下的所有文本元素,以及td 节点下的文本元素。例如,我正在尝试获取以下 HTML 文本中的公司名称(“MOMO APPARELS”)。

<div class="comapny_header">
    <div class="company_name">MOMO APPARELS LTD</div> 
    <div class="view_all">View All</div>
</div>

所以我写了以下代码:

library(textreadr)
library(rvest)

companyinfo <- read_html("https://bkmea.com/bkmea-members/#/company/2523")

html_nodes(companyinfo,"div")%>% 
  html_text()  # it works

html_nodes(companyinfo,"div.company_name")%>% 
  html_text()  # doesn't work 

html_nodes(companyinfo,"td") %>% 
  html_text()  # doesn't work

如果我理解正确 - 第一个应该使用 div 节点提取文本。 第二个应该在div 节点中提取属性等于company_name 的文本。 第三个应该在td 节点中提取文本。

第一个有效(这不是我想要得到的),但第二个和第三个无效 - 我做错了什么吗?

如果你能在这里帮助我,我将不胜感激!

非常感谢, 桑

【问题讨论】:

    标签: html r web-scraping rvest


    【解决方案1】:

    您要查找的数据由该 API 检索(它不存在于 html 正文中):

    GET https://bkmea.com/wp-admin/admin-ajax.php?action=bkmea_get_company&id=2523
    

    您只需要从您的原始网址中提取id,构建上面的网址并解析json结果如下:

    library(httr)
    
    originalUrl <- "https://bkmea.com/bkmea-members/#/company/2523"
    id <- sub("^.+/", "", originalUrl)
    userAgent <- "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
    
    output <- content(GET("https://bkmea.com/wp-admin/admin-ajax.php", query = list(
            "action" = "bkmea_get_company",
            "id" = id
        ), add_headers('User-Agent' = userAgent)), as = "parsed", type = "application/json")
    
    print(output$company$company_info$company_name)
    

    输出:

    [1] "MOMO APPARELS LTD"
    

    【讨论】:

    • 谢谢!这很神奇,得到了我想要的。作为初学者,可能还有另一个尴尬的问题:对于任何网页,我怎么可能知道数据是否正在被 API 检索?我在 html 文本中找不到 url。非常感谢提前。
    • @SanghyunPark 你可以打开开发者工具,进入网络标签/响应标签并检查html。同样在这种情况下,加载页面内的数据需要很长时间,而页面已经加载。可以通过检查结果并查找 json 结果(或其他人类可读格式)来发现 API 端点
    • 抱歉,我不知道如何接受这个答案。我只是接受了。非常感谢您的帮助!
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2015-01-20
    • 1970-01-01
    相关资源
    最近更新 更多