【问题标题】:Reading list of URLs from a file in R从R中的文件中读取URL列表
【发布时间】:2016-04-17 00:20:19
【问题描述】:

我有一个包含 URL 列表的文件

http://www.programmableweb.com/api-university
http://www.programmableweb.com/api-research
http://www.programmableweb.com/api/facebook
http://www.programmableweb.com/api/google-maps

我想使用 R,尤其是 rvest 用于网络抓取 https://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/。我基本上需要收集SPECS下的所有字段,比如

    htmlpage <- read_html("http://www.programmableweb.com/api/swrve-events")
    text1 <- html_nodes(htmlpage, ".field")

问题:

  1. 如何读取文件? 当我执行 read.csv(filename) 或 read.table(filename) 然后使用 read_html 时,它会说

    no applicable method for 'read_xml' applied to an object of class "data.frame"
    
  2. 如何迭代文件?

【问题讨论】:

  • 你可以 lapply(readLines(filepath), function(eachlink) ......

标签: r file url screen-scraping


【解决方案1】:
file_urls <- readLines ("path/to/file")
  node_data <- sapply(file_urls,function(i)read_html (i) %>% html_nodes (".field"))

【讨论】:

  • @carl_boneri 谢谢。 node_data 是什么格式?如何将输出数据保存到文件中?我尝试了 datafile
  • 格式为xml-nodeset。它是每个 HTML 元素的列表,其 css 类为“.field”。至于保存……你对数据做了什么/你希望对数据做什么。阅读有关 saveRDS 的文档。 .. node_data 是您工作区中的数据对象..因此您可以随意保存
  • 我假设你只想要文本...添加 "%>% html_text " 到链中,你应该有一个原始文本列表而不是 html 对象
  • 我想分析输出数据。也就是说,我得到了每个 API 的所有字段,现在我需要对它们进行聚合以找到所有 API 中每个字段的频率。我将它保存为 .rds 并且可以使用 [n] 读取每个条目。但是,有没有其他方法可以保存数据以便于汇总?也许是 csv?
  • 有很多方法。你尝试过做什么?
【解决方案2】:

在尝试从从 .csv 文件导入的表中读取 url 时,我收到了相同的错误消息。我注意到通过读取 .csv 文件创建的表类型错误。即导入的具有 10 个 url 的表“URLs”具有以下属性:

> typeof(URLs)
[1] "list"
> length(URLs)
[1] 1

同时,我希望它是:

> typeof(URLs)
[1] "character"
> length(URLs)
[1] 10

因此我做了以下解决方法:

a<-character()
for (i in 1:10) {
  a[i]<-as.character(URLs[i,1])
}

现在我可以看到“a”为:

> typeof(a)
[1] "character"
> length(a)
[1] 10

read_html 命令终于起作用了:

> htmlpage <- read_html(a[i])
> show(htmlpage)
{xml_document}
<html lang="en">
[1] <head>\n<style>\r\n#headerlocal {\r\n    position: fixed;\r\n    z-index: 999;\r\n    top: 0;\r\n    height ...
[2] <body style="background-color:#eeeeee;"> \r\n\r\n\r\n\r\n\t\t<script type="text/javascript">\r\n\t\t\tcheck ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多