在单词后获取文本——R Webscraping

2024-05-01

几周前,这里有人帮助我极大地获得了名人数据库中所有链接的列表。我能够运行此代码并获得以下输出

library(purrr)
library(rvest)
url_base <- "https://www.nndb.com/lists/494/000063305/"    
## Gets A-Z links
all_surname_urls <- read_html(url_base) %>%
      html_nodes(".newslink") %>%
      html_attrs() %>%
      map(pluck(1, 1))

all_ppl_urls <- map(
      all_surname_urls, 
      function(x) read_html(x) %>%
        html_nodes("a") %>%
        html_attrs() %>%
        map(pluck(1, 1))
    ) %>% 
      unlist()

all_ppl_urls <- setdiff(
      all_ppl_urls[!duplicated(all_ppl_urls)], 
      c(all_surname_urls, "http://www.nndb.com/")
    )

all_ppl_urls[1] %>%
      read_html() %>%
      html_nodes("p") %>%
      html_text()

# [1] "AKA Lee William Aaker"
# [2] "Born: 25-Sep-1943Birthplace: Los Angeles, CA"
# [3] "Gender: MaleRace or Ethnicity: WhiteOccupation: Actor"
# [4] "Nationality: United StatesExecutive summary: The Adventures of Rin Tin Tin"
# ...

我的初衷是获得一个数据框,在其中我可以得到name的人,他们的gender, race, 职业 and 国籍到单个数据帧中。

如果您的数据位于 html 表中,而著名姓名数据库的情况并非如此,那么我在这里和其他网站上看到的很多问题都会很有帮助。我知道所有 40K 站点都需要涉及一个循环,但经过一个周末的搜索答案后,我似乎无法找出如何实现。有人可以帮忙吗?

编辑添加我尝试遵循这里的一些规则但是有点复杂

## I tried to run list <- all_ppl_urls%>% map(read_html) but that was taking a LONG time so I decided to just get the first ten links for the sake of showing my example:

example <- head(all_ppl_urls, 10)

list  <- example %>% map(read_html)

test <-list  %>% map_df(~{
   text_1 <- html_nodes(.x, 'p , b') %>% html_text

我收到这个错误: 错误: 另外:警告消息: 关闭未使用的连接 3 (http://www.nndb.com/people/965/000279128/ http://www.nndb.com/people/965/000279128/)


在这里,您可以通过查看每个 html 文件来获取数据。这只是一种获得一些好的结果的方法...但是...您必须注意到应该编辑那些 gsub 函数以获得更好的结果。发生这种情况是因为该 url 列表,或者说,该网页,在数据显示方式上并不均匀。这是你必须处理的事情。例如,这里只是两个屏幕截图,您可以在其中找到网络演示中的差异:

无论如何,您可以通过调整此代码来管理此操作:

library(purrr)
library(rvest)

[...] #here is your data

all_ppl_urls[100] %>%
    read_html() %>%
    html_nodes("p") %>%
    html_text()
# [3] "Gender: MaleReligion: Eastern OrthodoxRace or Ethnicity: Middle EasternSexual orientation: StraightOccupation: PoliticianParty Affiliation: Republican"  

#-----------------------------------------------------------------------------------------------
# NEW WAY
toString(read_html(all_ppl_urls[100])) #get example of how html looks...
#><b>AKA</b> Edmund Spencer Abraham</p>\n<p><b>Born:</b> <a href=\"/lists/681/000106363/\" class=\"proflink\">12-Jun</a>-<a href=\"/lists/951/000105636/\" class=\"proflink\">1952</a><br><b>Birthplace:</b> <a href=\"/geo/604/000080364/\" class=\"proflink\">East Lansing, MI</a><br></p>\n<p><b>Gender:</b> Male<br><b>

#1. remove NA urls (avoid problems later on)
urls <- all_ppl_urls[!is.na(all_ppl_urls)]
length(all_ppl_urls)
length(urls)

#function that creates a list with your data
GetLife <- function (htmlurl) {
    htmltext <- toString(read_html(htmlurl))
    name <- gsub('^.*AKA</b>\\s*|\\s*</p>\n.*$', '', htmltext)
    gender <- gsub('^.*Gender:</b>\\s*|\\s*<br>.*$', '', htmltext)
    race <- gsub('^.*Race or Ethnicity:</b>\\s*|\\s*<br>.*$', '', htmltext)
    occupation <- gsub('^.*Occupation:</b>\\s*|\\s*<br>.*$|\\s*</a>.*$|\\s*</p>.*$', '', htmltext)
    #as occupation seems to have to many hyperlinks we are making another step
    occupation <- gsub("<[^>]+>", "",occupation)
    nationality <- gsub('^.*Nationality:</b>\\s*|\\s*<br>.*$', '', htmltext)
    res <- c(ifelse(nchar(name)>100, NA, name), #function that cleans weird results >100 chars
             ifelse(nchar(gender)>100, NA, gender),
             ifelse(nchar(race)>100, NA, race),
             ifelse(nchar(occupation)>100, NA, occupation),
             ifelse(nchar(nationality)>100, NA, nationality),
             htmlurl)
    return(res)
}

emptydf <- data.frame(matrix(ncol=6, nrow=0)) #creaty empty data frame
colnames(emptydf) <- c("name","gender","race","occupation","nationality","url") #set names in empty data frame
urls <- urls[2020:2030] #sample some of the urls
for (i in 1:length(urls)){
    emptydf[i,] <- GetLife(urls[i])
}
emptydf

以下是分析这 10 个 url 的示例:

name gender     race occupation   nationality                                       url
1                        <NA>   Male    White   Business United States http://www.nndb.com/people/214/000128827/
2  Mark Alexander Ballas, Jr.   Male    White     Dancer United States http://www.nndb.com/people/162/000346121/
3       Thomas Cass Ballenger   Male    White Politician United States http://www.nndb.com/people/354/000032258/
4  Severiano Ballesteros Sota   Male Hispanic       Golf         Spain http://www.nndb.com/people/778/000116430/
5  Richard Achilles Ballinger   Male    White Government United States http://www.nndb.com/people/511/000168007/
6      Steven Anthony Ballmer   Male    White   Business United States http://www.nndb.com/people/644/000022578/
7        Edward Michael Balls   Male    White Politician       England http://www.nndb.com/people/846/000141423/
8                        <NA>   Male    White      Judge United States http://www.nndb.com/people/533/000168029/
9                        <NA>   Male    Asian   Engineer       England http://www.nndb.com/people/100/000123728/
10         Michael A. Balmuth   Male    White   Business United States http://www.nndb.com/people/635/000175110/
11        Aristotle N. Balogh   Male    White   Business United States http://www.nndb.com/people/311/000172792/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单词后获取文本——R Webscraping 的相关文章

  • R 颜色 - 许多独特的颜色仍然很漂亮

    我很好奇你是否有一些关于 R 中颜色酿造的技巧 对于许多独特的颜色 在某种程度上图形仍然好看 我需要相当数量的独特颜色 至少 24 种 可能需要更多 50 种 用于堆叠区域图 所以不是热图 渐变颜色不起作用 我发现了 viridis 它的调
  • ggplot 的每个方面都有不同的 `geom_hline()`

    这个问题在这里已经有答案了 library tidyverse ggplot mpg aes cty hwy geom point facet grid year fl geom hline yintercept mean mpg hwy
  • 上传到 Shiny 服务器后在 R 中解压文件

    我正在尝试在我们的本地服务器上使用 Shiny 来构建一个应用程序 允许用户上传包含 ESRI shapefile 和关联文件的 zip 文件 Shiny 服务器的 fileInput 可以获取数据 并且当它这样做时 它会将其存储在临时目录
  • 文件错误(文件,“rt”):complete.cases 程序中的“描述”参数无效

    我正在编写一个 R 函数 该函数读取充满文件的目录并报告每个数据文件中完全观察到的案例的数量 该函数返回一个数据框 其中第一列是文件名称 第二列是完整案例数 such as id nobs 1 108 2 345 etc 这是我写的函数 c
  • 使用 dplyr 对连续变量进行分类[重复]

    这个问题在这里已经有答案了 我想基于连续数据创建一个具有 3 个任意类别的新变量 set seed 123 df lt data frame a rnorm 100 使用基地我会 df category df a lt 0 5 lt low
  • 函数速度测试的奇怪结果

    我编写了一个使用递归来查找最大公因数 分母 的函数 gt gcd function a b if length a length b gt 1 warning Only scalars allowed using first element
  • 根据列中的部分字符串匹配选择数据框行

    我想根据列中字符串的部分匹配从数据框中选择行 例如列 x 包含字符串 hsa 使用sqldf if它有一个like语法 我会做类似的事情 select from lt gt where x like hsa 很遗憾 sqldf不支持该语法
  • Rplotly:悬停时显示图像

    我正在尝试重现this https plotly r com interactives tooltip image html显示数据点悬停图像的简单绘图 代码可用here https plotly r com supplying custo
  • 如何使用“NA”作为字符串

    我有一个 csv 文件 其中一列是字符类型 该变量的很少有值是 NA 字符串 但是当我使用 read csv 读取 R 中的 csv 文件时 NA 字符串存储为 NA 我该如何修复它 您可以使用na strings论证中read csv r
  • R 和系统调用

    我过去曾使用 R 对命令行进行非常基本的调用 例子可以找到here https stackoverflow com questions 3284301 command line in r code 这一次 我希望模仿这段从 Windows
  • 在 R 中,如何获得某些向量值的所有可能组合?

    背景 我有一个需要一些参数的函数 我想要获得所有可能的参数组合的函数结果 一个简化的例子 f lt function x y return paste x y sep colors c red green blue days c Monda
  • 基于两列对数据框中的行进行求和[重复]

    这个问题在这里已经有答案了 我想添加一列的值 将它们按两列分组 我找到了如何在一列上执行此操作 但无法弄清楚如何在两列上执行此操作 例如 如果我有以下数据框 x c a a b b c c a a b b c c a a b b c c y
  • 如何扩展 ggplot y 轴限制以包含最大值

    通常 在图中 Y 轴值标签会在绘制的最大值下方被截断 For example library tidyverse mtcars gt ggplot aes x mpg y hp geom point 我知道scale y continous
  • 计算横截面积作为高度的函数

    我试图弄清楚如何计算不同水位的河流横截面的充满水的面积 对于横截面 我有 5 m 宽河流上每 25 cm 的深度 并且可以根据之前很好回答的问题来计算面积计算不同高度的横截面积 https stackoverflow com questio
  • 对 data.table 进行子集化的最快方法是什么?

    在我看来 这是执行行 列子集的最快方法data table是使用 join 和nomatch option 它是否正确 DT data table rep 1 100 100000 rep 1 10 1000000 setkey DT V1
  • if(interactive()) 是否相当于 Python 中的“if __name__ == ”__main__“: main()”?

    我希望 R 脚本有一个 main 函数 可以在交互模式下执行 但在获取文件时不应执行 main 函数 已经有一个关于这个的问题了 https stackoverflow com questions 2968220 is there an r
  • 使用 rvest 进行抓取 - 当标签不存在时,使用 NA 完成抓取

    我想解析这个 HTML 并从中获取这个元素 a p标签 与class normal encontrado b div with class price 有时 p某些产品中不存在标签 如果是这种情况 NA应添加到从该节点收集文本的向量中 这个
  • 将 SAS sas7bdat 数据读入 R

    R 有哪些选项可以读取本机 SAS 格式的文件 sas7bdat 进入R The NCES 共同核心 https nces ed gov ccd pubschuniv asp例如 包含以此格式保存的大量数据文件存储库 为了具体起见 让我们集
  • 使用 R 将图例添加到绘图中

    我使用 R 在一个图中创建了 4 条线 这是代码 Define 2 vectors cars lt c 123 07 110 51 96 14 98 71 101 3 trucks lt c 110 31 89 91 89 81 89 31
  • 获取数据集 R 包中所有对象名称的列表?

    如何获取对象中对象的确切名称列表datasets https stat ethz ch R manual R devel library datasets html 00Index html包裹 我在这里找到了很多 data package

随机推荐

  • 当代码依赖于两个对象的子类型时,是否有设计模式可以处理

    我会尽力尽可能明确 以防有比回答我的问题更好的解决方案 我正在使用 C 工作 我有一个报告模板 可以包含任意数量的打开的 功能 功能可能是信息表 饼图 条形图 列表等 我将报告生成为文本文件或 PDF 将来可能有其他选项 到目前为止我有一个
  • 在 C# .Net 中将小数转换为小时、分钟和秒

    我在数据库中有一个分钟字段 例如 138 34 我需要将其转换回 HH MM SS 最简单的方法是什么 您可以使用TimeSpan FromMinutes minutesInDouble 以双精度格式传递上述值 欲了解更多信息 检查 MSD
  • Pandas - 使用其他列值作为列名选择列

    我有一个包含一列的数据框 我们称之为 名称 names 具有其他列的名称 我想添加一个新列 该列的每一行都有基于 名称 列中包含的列名称的值 Example 输入数据框 pd DataFrame from dict a 1 2 3 4 b
  • 在单击的 li 上添加类并从兄弟姐妹中删除类

    单击时 我想将一个类添加到锚标记 并从所有同级中删除该类 但是 我当前的代码似乎没有从其他元素中删除该类 尽管它似乎确实在单击时添加了该类 这是我的代码 ul li each function this click function thi
  • 如何在 OS X 10.9 上使用 Ghost4j

    当我想在 OS X 10 9 上使用 Ghost4j 时 我看到以下错误 无法加载库 gs dlopen libgs dylib 9 找不到图像 我已经在我的 macbook 上安装了 Ghostscript 库 使用这个网站 http p
  • 如何访问使用 YUI 检查的单选按钮的值?

    我有以下单选按钮结构 div div
  • Soundcloud CORS

    正如我在文档中读到的那样 Soundcloud api 应该支持 cors http developers soundcloud com docs api guide crossdomain http developers soundclo
  • 存在类型和类型成员的 Scala 类型推断

    以下代码无法编译 trait A F def find x Int F def fill f F Unit object TestA def test T lt A F forSome type F t T t fill t find 0
  • Python setuptools:打包根目录(每个包不需要子目录)

    我需要将一个包写入存储库 但它是一个小型快速包 因此我认为不需要将文件放入子目录中 我只是想要 import mypkg module1 具有目录结构 root folder setup py init py the init for pa
  • 无法使用mailer类在php中发送邮件

    今天我在php中做了一些邮件处理 我发现有两种方法 一种是Php提供的简单邮件功能 另一种是我在互联网上找到的关于使用网站上的PHP邮件程序类https github com PHPMailer PHPMailer https github
  • AWS S3在两个存储桶之间复制文件和文件夹

    我一直在寻找一种工具来帮助我将 AWS S3 存储桶的内容复制到第二个 AWS S3 存储桶 而无需先将内容下载到本地文件系统 我尝试使用 AWS S3 控制台复制选项 但这导致一些嵌套文件丢失 我尝试过使用 Transmit 应用程序 由
  • 如何处理 Visual Studio Code 消息框中的单击事件?

    根据 API 文档 消息框可以采用第二个参数 一个字符串数组 充当消息框上的操作 通常只有一个关闭按钮 操作 https code visualstudio com docs extensionAPI vscode api window h
  • 让右侧的 Div 填满所有可用空间

    我想创建两个并排的 div 但我希望左侧的 div 为 300px 右侧的 div 占据屏幕上的剩余部分 这怎么可能呢 谢谢 最直接的 我会说正确的 方法是使用display table wrapper display table widt
  • 分享一些东西到phonegap应用程序

    有什么方法可以注册phonegap应用程序以显示在要共享的应用程序菜单中吗 要出现在此列表中 您必须修改 AndroidManifest xml 文件并在您的 Activity 下添加以下行
  • PHP保存图像文件[重复]

    这个问题在这里已经有答案了 可能的重复 从 PHP URL 保存图像 https stackoverflow com questions 724391 saving image from php url using php 我有一个图像作为
  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • Google 地图视图无法在模拟器上显示

    您好 我正在尝试在 Android 模拟器中显示地图 但它无法在地图视图中显示谷歌地图 并且也不从 Android 模拟器上的浏览器连接 www google com 那么是否有关于在模拟器上运行互联网的任何设置 谁能帮我解决这个问题 尝试
  • 是否有一个“OneOf”类用于对没有共同祖先的类进行分组

    与此类似 https stackoverflow com a 3508555 33689 我不想接受几个不相关的类之一 而是想返回一个 我有一个利用多个底层存储库的编排服务 每个存储库都可以传回一个错误 然而 这些错误类没有共同的祖先 例如
  • Windows批量编程中读取文件名

    我想在Windows批处理编程中读取文件的名称 我尝试使用不同的方法但失败了请帮助 下面给出了场景 我的文件夹中有不同的文件 但所有文件的文件名长度相同 例如 1000342578 30062011 PDF 1000342329 30062
  • 在单词后获取文本——R Webscraping

    几周前 这里有人帮助我极大地获得了名人数据库中所有链接的列表 我能够运行此代码并获得以下输出 library purrr library rvest url base lt https www nndb com lists 494 0000