在检索变量时将观察名称分配给值

时间:2018-06-11 16:41:00

标签: r dataframe web-scraping

我想创建一个包含>的数据框对~20个变量进行100次观察。现在,这将基于保存到我的本地文件夹的html文件列表。我想确保每个观察值与每个变量的正确值匹配。假设R将使用相同的顺序通过文件来构造每个变量而不是在出现错误或类似情况时跳过变量,这应该自动发生。 但是,有没有"保存方式"对此,意味着在检索信息时为每个变量值分配观察名称?

获取我的示例代码以提取变量以使其更清晰:

#Specifying the url for desired website to be scrapped
url <- 'http://www.imdb.com/search/title? 
count=100&release_date=2016,2016&title_type=feature'

#Reading the HTML code from the website
webpage <- read_html(url)

title_data_html <- html_text(html_nodes(webpage,'.lister-item-header a'))
rank_data_html <- html_text(html_nodes(webpage,'.text-primary'))
description_data_html <- html_text(html_nodes(webpage,'.ratings-bar+ .text- 
muted'))

df <- data.frame(title_data_html, rank_data_html,description_data_html)

这将提供排名和描述数据的列表,但是没有引用排名或描述的观察名称(在将其绑定在df之前)。现在,在我的实际代码中,一个变量突然出现1个值太多,所以201个描述但只有200个电影。如果没有引用描述所属的电影,那么很明显为什么会发生这种情况。

一位同事建议一次提取1个观察的所有变量,并逐行扩展数据帧(一次1个观察),而不是逐列扩展(每次1个变量),但发现错误并清理每个变量的需求似乎更耗时这种方式。

有没有人建议什么是&#34;最佳做法&#34;在这种情况下?

谢谢!

1 个答案:

答案 0 :(得分:0)

我知道这不是一个令人满意的答案,但没有一种策略可以解决这类问题。这是网络抓取的工作。无法保证html的结构将按照您期望的结构。

您还没有向我们展示一个可重复的示例(我们可以在自己的计算机上运行,​​可以重现您遇到的问题),因此我们无法帮助您解决为什么您最终解压缩的问题当您预期200个时,在一次调用html_nodes期间有201个节点。这里的最佳做法是在您正在搜索的网站上查看LOOK的无聊旧建议,查看您的数据,并查看额外或重复描述的位置(或者丢失的电影是)。也许有一个奇怪的元素,它的属性也与你的xpath选择器文本相匹配。查看浏览器中显示的网站以及源代码。右键单击,CTL + U(PC)或OPT + CTL + U(Mac)是获取源代码的一些方法。使用搜索功能查看与选择器文本匹配的内容。

如果您使用的html文档与您使用的示例相似,则您无法使用您正在寻求帮助的策略(一起提取电影的名称)与描述)。您已经提取了名称。名称与描述的元素不同。

相关问题