R语言rvest包网络爬虫xxxxxxxx1x2xxxxxxx

网上的数据和信息无穷无尽,如今人人都用百度谷歌来作为获取知识,了解新鲜事物的首要信息源。所有的这些网上的信息都是直接可得的,而为了满足日益增长的数据需求,我坚信网络数据爬取已经是每个数据科学家的必备技能了。在本文的帮助下,你将会突破网络爬虫的技术壁垒,实现从不会到会。

大部分网上呈现的信息都是以非结构化的格式存储(html)且不提供直接的下载链接,因此,我们需要学习一些知识和经验来获取这些数据。

网络爬虫是讲呈现在网页上以非结构格式(html)存储的数据转化为结构化数据的技术,该技术非常简单易用。

我确信你现在肯定在问“为什么需要爬取数据”,正如前文所述,爬取网页数据极有可能。(译者注:原文如此,我没看懂这个设问的逻辑)

为了提供一些使用的知识,我们将会爬取IMDB的数据,同时,利用爬虫你还可以:

网络数据抓取的方式有很多,常用的有:

我们会使用DOM解析的方式来获取数据,并基于网页的CSS选择器来寻找含有所需信息的网页部分。但在开始之前,我们必须满足一些前提条件。

利用R实现网络爬虫的前提条件有两大块:

使用这个插件你可以通过点击任一网页中你需要的数据就能获得相应的标签。你也可以学习HTML和CSS的知识并且手动实现这一过程。而且,为了更深入地了解网络爬取这一艺术,我很推荐你学习下HTML和CSS来了解其背后的机理。

这是页面的截图

Step1:爬取的第一步是使用selectorgadget获得排名的CSS选择器。你可以点击浏览器中的插件图标并用光标点击排名的区域。

要确保所有的排名都被选择了,你也可以再次点击选中区域来取消选择,最终只有高亮的那些部分会被爬取。

Step2:一旦你已经选择了正确的区域,你需要把在底部中心显示的相应的CSS选择器复制下来。

Step3:只要CSS选择器包含排名,你就能用几行简单的代码来获取所有的排名了:

#用CSS选择器获取排名部分rank_data_html<-html_nodes(webpage,'.text-primary')#把排名转换为文本rank_data<-html_text(rank_data_html)#检查一下数据head(rank_data)[1]"1.""2.""3.""4.""5.""6."Step4:获取数据之后,请确保他们被你所需的格式存储,我会把排名处理成数值型。

#数据预处理:把排名转换为数值型rank_data<-as.numeric(rank_data)#再检查一遍head(rank_data)[1]123456Step5:现在你可以清空选择部分并开始选择电影标题了,你可以看见所有的标题都被选择了,你依据个人需要做一些增删。

Step6:正如从前,再次复制CSS选择器并用下列代码爬取标题。

#爬取标题title_data_html<-html_nodes(webpage,'.lister-item-headera')#转换为文本title_data<-html_text(title_data_html)#检查一下head(title_data)[1]"Sing""Moana""Moonlight""HacksawRidge"[5]"Passengers""Trolls"Step7:下列代码会爬取剩余的数据–Description,Runtime,Genre,Rating,Metascore,Votes,Gross_Earning_in_Mil,DirectorandActordata.

#爬取metascoresectionmetascore_data_html<-html_nodes(webpage,'.metascore')#转为文本metascore_data<-html_text(metascore_data_html)#检查一下head(metascore_data)[1]"59""81""99""71""41"[6]"56"#去除多余空格metascore_data<-gsub("","",metascore_data)#检查metascoredata的长度length(metascore_data)[1]96Step8:metascore只有96个数据,可我们却爬取了100部电影。这个问题产生的原型是由4部电影没有Metascore数据。

Step9:这是爬取所有网页都会遇到的常见问题,如果我们只是简单地用NA来填充这四个缺失值,它会自动填充第97到100部电影。通过一些可视化检查,我们发缺失matascore的是第39,73,80和89部电影。我用下面的函数来解决这个问题。

for(iinc(39,73,80,89)){a<-metascore_data[1:(i-1)]b<-metascore_data[i:length(metascore_data)]metascore_data<-append(a,list("NA"))metascore_data<-append(metascore_data,b)}#转换为数值型metascore_data<-as.numeric(metascore_data)#再次检查下长度length(metascore_data)[1]100#看看描述性统计量summary(metascore_data)Min.1stQu.MedianMean3rdQu.Max.NA's23.0047.0060.0060.2274.0099.004Step10:同样的问题也会发生在Gross变量上,我用同样的方式来解决。

#爬取revenuesectiongross_data_html<-html_nodes(webpage,'.ghost~.text-muted+span')#转为文本gross_data<-html_text(gross_data_html)#检查一下head(gross_data)[1]"$269.36M""$248.04M""$27.50M""$67.12M""$99.47M""$153.67M"#去除'$'和'M'标记gross_data<-gsub("M","",gross_data)gross_data<-substring(gross_data,2,6)#检查长度length(gross_data)[1]86#填充缺失值for(iinc(17,39,49,52,57,64,66,73,76,77,80,87,88,89)){a<-gross_data[1:(i-1)]b<-gross_data[i:length(gross_data)]gross_data<-append(a,list("NA"))gross_data<-append(gross_data,b)}#转为数值gross_data<-as.numeric(gross_data)#再次检车长度length(gross_data)[1]100summary(gross_data)Min.1stQu.MedianMean3rdQu.Max.NA's0.0815.5254.6996.91119.50530.7014Step11:.我们已经成功爬取了100部电影的11个特征,让我们创建一个数据框并看看结构。

爬取好数据后,你们队数据进行一些分析与推断,训练一些机器学习模型。我在上面这个数据集的基础上做了一些有趣的可视化来回答下面的问题。

**Question1:**那个类型的电影市场最长?

**Question2:**市场130-160分钟的电影里,哪一类型东西好评率最高?

**Question3:**100-120分钟的电影中,哪类作品的票房成绩最好

我相信本文会让你对利用R爬取网页有一定了解,你对采集数据过程中可能遇到的问题也有所涉猎了。由于网页上的大部分数据是非结构化的,爬虫真的是非常重要的一项技能。

第一行是加载Rvest包。

第二行是用read_html函数读取网页信息(类似Rcurl里的getURL),在这个函数里只需写清楚网址和编码(一般就是UTF-8)即可。

第三行是获取节点信息。用%>%符号进行层级划分。web就是之前存储网页信息的变量,所以我们从这里开始,然后html_nodes()函数获取网页里的相应节点。在下面代码里我简单的重现了原网页里的一个层级结构。可以看到,实际上我们要爬取的信息在25个class属性为pl的

标签里的文本。

[清]曹雪芹著/人民文学出版社/1996-12/59.70元

而对于这样的结构,在htmlnodes()函数里的写法就是简单的"p.pl",其中“.”表示class属性的值,如果是id属性则用“#”,如果大家学过CSS选择器就很好理解了,是完全一致的。

最后我们用html_text()函数表示获取文本信息,否则返回的是整个

标签。总体上用以下一行代码就可以实现:

position<-web%>%html_nodes("p.pl")%>%html_text()比较与XML获取节点的方法(如下行代码),其实二者是异曲同工的,只不过将“/”分隔换为了“%>%”,同时个别写法有些许调整。

html_nodesRvest这个包的说明文档里给出了一些其他例子:

然后下面两行代码分别获取了ateam这个网页里

标签里的全部内容和
标签里的全部内容

ateam%>%html_nodes("center")%>%html_nodes("td")ateam%>%html_nodes("center")%>%html_nodes("font")运行结果如下,可见

标签下有7个标签,一个标签:

library(magrittr)ateam%>%html_nodes("table")%>%extract2(1)%>%html_nodes("img")ateam%>%html_nodes("table")%>%`[[`(1)%>%html_nodes("img")上面两行代码都可以获得该网页中第一个

标签(由extract2(1)或`[[`(1)获取)中的所有标签里的内容,运行结果如下:

rvest是R语言一个用来做网页数据抓取的包,包的介绍就是“更容易地收割(抓取)网页”。其中html_nodes()函数查找标签的功能非常好用。以抓取天猫搜索结果页的宝贝数据为例说明rvest的使用。

THE END
1.年度十大网络用语发布,果然有它……该词流行于某网络节目,节目中一些粉丝用“绝绝子”为选手加油。多用于赞美,表示“太绝了、太好了”。这个词引发了网友对网络语言的关注和讨论。七、躺平 该词指人在面对压力时,内心再无波澜,主动放弃,不做任何反抗。“躺平”更像是年轻人的一种解压和调整方式,是改变不了环境便改变心态的自我解脱。短暂“http://baijiahao.baidu.com/s?id=1718451705136469202&wfr=spider&for=pc
2.2021年十大网络用语最火网络流行词语最新网络流行梗→MAIGOO2021年十大网络用语 最火网络流行词语 最新网络流行梗 摘要:“2021年度十大网络用语”是基于国家语言资源监测语料库(网络媒体部分),采用“以智能信息处理技术为主,兼顾领域专家意见和相关站点收录情况”的方式获得的,2021最火网络用语分别是:觉醒年代、YYDS、双减、破防、元宇宙、绝绝子、躺平等,和Maigoo小编一起来了解下https://www.maigoo.com/top/422728.html
3.大语言模型(LLM)入门学习路线图,附资源汇总,收藏这篇就够了大语言模型基础: 这涵盖了学习LLM所需的基本知识,包括数学、Python编程语言以及神经网络的原理。 大语言模型前沿算法和框架: 在这一部分,重点是利用最新的技术构建LLM。这包括研究和应用先进的算法和模型架构,以提高模型的性能和效率。 大语言模型工程化: 这一部分专注于创建基于LLM的应用程序,并将这些应用部署到实际https://blog.csdn.net/2401_85325726/article/details/144059186
4.“清朗·规范网络语言文字使用”专项行动开展原标题:“清朗·规范网络语言文字使用”专项行动开展 记者11日从中央网信办获悉,为整治网上国家通用语言文字不规范使用乱象,塑造有利于未成年人健康成长的网络环境和育人生态,中央网信办、教育部近日印发通知,部署开展“清朗·规范网络语言文字使用”专项行动。 https://finance.sina.cn/2024-10-12/detail-incshxkx3531885.d.html
5.go语言区块链p2p网络实现mob64ca14061c9e的技术博客go语言区块链p2p网络实现 本文你将用Go(golang)语言创建自己的区块链、理解哈希函数是如何保持区块链的完整性、掌握如何用Go(golang)语言创造并添加新的块、实现多个节点通过竞争生成块、通过浏览器来查看整个链、了解所有其他关于区块链的基础知识。 但是,文章中将不会涉及工作量证明算法(PoW)以及权益证明算法(PoS)https://blog.51cto.com/u_16213641/12363974
6.网络流行语,网络新词,2023最新网络流行语大全流行语百科(www.lxybaike.com)打造最新最全的网络流行语大全,专注收集热门网络用语的平台,每日更新全网热门词汇用语解释,在这里你可以学习到最新最潮流的网络流行语!http://www.lxybaike.com/
7.最新网络流行语网络新词新语带我装b带我飞 带我装b带我飞:网络语言,自嘲,让别人带自己去装逼的意思。比喻:那个人很牛,想要跟着他混,和他在一起感觉整个人就很高大上,就是自己装了逼以后的造型,带我飞就是很嗨的感觉。用法:打游戏,例如lol,碰到大神,或想和好基友一起撸的话,可以说“带我装逼带我飞”。神回复:①走起,起飞!②带你http://waiyu.en369.cn/yingyu/1691019226a187931.html
8.网络语言大全网络语言的入侵 -作文 曾经,我是一只连OICQ为何物都一无所知的菜鸟,然而,在朋友的帮助和往来的巨大包容力下,我也成了一只在网络中自由穿梭的鱼儿,网络语言的入侵。在网上,我阅读消息,欣赏电影,与千里之外的友人谈天说地,写下自己每天的快乐与悲伤……网络是翅膀,让有梦的我自由飞翔。在网络那巨大的感染与诱惑https://www.unjs.com/h/b/103300.html
9.这些年的网络流行词语随着科技的发展,网络在人们的生活中扮演着越来越重要的角色,网络新词也以前所未有的速度产生、发展、传播起来,那么层出不穷的网络新词你们怎么看? 也许,未来新华字典都会添加进去网络语言,也许,人类未来的语言必将被网络语言所代替。也许所有的网语言终将只是昙花一现!是难以长久存在流传下去的,只是人们生活的调味剂! http://www.360doc.com/content/21/0406/18/64961777_970887847.shtml
10.网络流行语言俏皮话7篇(全文)网络流行语的语言模块化研究 第2篇 一、西方现代语言学理论方法中的模块式理论模型 在西方现代语言学理论是以研究人脑语言认知属性为目的的一门学科。由于人脑的语言认知属性是无法通过直接的生物或化学手段进行研究, 于是人们提出了一种建立理论模型的方法来研究暂时无法直接研究的事物。[1]所谓的语言学理论模型就是以https://www.99xueshu.com/w/file454aqx87.html