【问题标题】:R: readLines on a URL leads to missing linesR:URL 上的 readLines 导致缺少行
【发布时间】:2023-03-03 14:26:01
【问题描述】:

当我在URLreadLines() 时,我会丢失行或值。 This might be due to spacing that the computer can't read.

当您使用上面的 URL 时,CTR + F 会找到 38 个与“TV-”匹配的文本实例。另一方面,当我运行 readLines()grep("TV-", HTML) 时,我只找到 12 个。

那么,如何避免编码/间距错误,以便获得完整的 HTML 行?

【问题讨论】:

  • 你想从页面中提取什么信息。顺便说一句,您共享的链接我在该页面上使用 CTR + F 找不到任何“TV-”实例。
  • @RonakShah 谢谢。我正在尝试提取在加拿大温哥华拍摄的所有电视节目的标题。 IMDB 链接应该有几个“TV-”字符串,例如 TV-MA、TV-14 等。我有部分工作代码可以做到这一点。首先,我索引“TV-”在哪里。然后取上面 4 行的标题。不幸的是,readLines() 正在跳过一些行或将值留空,因为它不知道它在读什么。

标签: r web html-parsing


【解决方案1】:

您可以使用rvest 来抓取数据。例如,要获取您可以做的所有标题:

library(rvest)

url <- 'https://www.imdb.com/search/title/?locations=Vancouver,%20British%20Columbia,%20Canada&start=1.json'
url %>%
  read_html() %>%
  html_nodes('div.lister-item-content h3 a') %>%
  html_text() ->  all_titles

all_titles

# [1] "The Haunting of Bly Manor"               "The Haunting of Hill House"             
# [3] "Supernatural"                            "Helstrom"                               
# [5] "The 100"                                 "Lucifer"                                
# [7] "Criminal Minds"                          "Fear the Walking Dead"                  
# [9] "A Babysitter's Guide to Monster Hunting" "The Stand"   
#...                 
#...

【讨论】:

  • 谢谢。这可以获取所有标题。我需要再次运行 html_nodes() 并附加一个包含“TV-”或 CSS 选择器内的任何内容的新列。最后,我只过滤掉不包含“TV-”的行。后续问题:为什么 html_nodes('span.certificate') 有时会显示与网页上显示的内容不同的内容。比如网页显示“TV-14”,但是html_nodes()会输出“14+”。
  • 这很奇怪。我不确定为什么会这样。您是否使用html_text() 从中提取文本?
  • 是的,我也使用了 html_text()。向上移动代码, html_nodes() 也有不同的值。与来自 Chrome 的“查看页面源”的原始 HTML 代码交叉引用,它们是不同的。例如,电视节目:超自然是 TV-14。但是, read_html() 将其视为“PG”。这是编码问题吗?这些是完全不同的电影认证。
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 2020-10-31
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多