2019独角兽企业重金招聘Python工程师标准>>>

在这篇文章,主要展示的是如何抓取Google学术网页。示例展示的是用rvest包来抓取作者博士指导老师的个人学术数据。我们可以看到他的合著者,论文被引用了多少次以及它们的附属机构。Hadley Wickham在RStudio Blog中写道:“rvest的灵感来源于类似beautiful soup这样可以轻易的从HTML网页抓取数据的一些库”。因为它被设计成跟magrittr一起使用。我们可以通过一些简单和易于理解的代码块组成的管道操作来表示复杂的操作。

加载R包:

ggplot2包来作图

library(rvest)
library(ggplot2)

他的论文被引用了多少次?

使用SelectorGadget的CSS选择器来找出"cited by"列。

page <- read_html("https://scholar.google.com/citations?user=sTR9SIQAAAAJ&hl=en&oi=ao")

html_nodes()中指定CSS选择器,html_text()用来提取文本。最后,用as.numernic()将字符串类型转换为数值类型。

citations <- page %>% html_nodes ("#gsc_a_b .gsc_a_c") %>% html_text()%>%as.numeric()

查看引用此次数:

citations
148 96 79 64 57 57 57 55 52 50 48 37 34 33 30 28 26 25 23 22 

绘制引用次数的条形图:

barplot(citations, main="How many times has each paper been cited?", ylab='Number of citations', col="skyblue", xlab="")

合著者,他们的附属单位以及被引用的次数

同样,我们使用SelecotGadget的CSS选择器来找出匹配的合著者:

page <- read_html("https://scholar.google.com/citations?view_op=list_colleagues&hl=en&user=sTR9SIQAAAAJ")
Coauthors = page%>% html_nodes(css=".gsc_1usr_name a") %>% html_text()
Coauthors = as.data.frame(Coauthors)
names(Coauthors)='Coauthors'

查看下合著者

head(Coauthors) Coauthors
1               Jason Evans
2             Mutlu Ozdogan
3            Rasmus Houborg
4          M. Tugrul Yilmaz
5 Joseph A. Santanello, Jr.
6              Seth Guikemadim(Coauthors)
[1] 27  1

截止到2016年1月1日,他的合著者共有27人。

他的合著者被引用了多少次?

page <- read_html("https://scholar.google.com/citations?view_op=list_colleagues&hl=en&user=sTR9SIQAAAAJ")
citations = page%>% html_nodes(css = ".gsc_1usr_cby")%>%html_text()citations [1] "Cited by 2231"  "Cited by 1273"  "Cited by 816"   "Cited by 395"   "Cited by 652"   "Cited by 1531" [7] "Cited by 674"   "Cited by 467"   "Cited by 7967"  "Cited by 3968"  "Cited by 2603"  "Cited by 3468"
[13] "Cited by 3175"  "Cited by 121"   "Cited by 32"    "Cited by 469"   "Cited by 50"    "Cited by 11"
[19] "Cited by 1187"  "Cited by 1450"  "Cited by 12407" "Cited by 1939"  "Cited by 9"     "Cited by 706"
[25] "Cited by 336"   "Cited by 186"   "Cited by 192" 

通过全局替代提取数值字符串

citations = gsub('Cited by','', citations)citations[1] " 2231"  " 1273"  " 816"   " 395"   " 652"   " 1531"  " 674"   " 467"   " 7967"  " 3968"  " 2603"  " 3468"  " 3175"
[14] " 121"   " 32"    " 469"   " 50"    " 11"    " 1187"  " 1450"  " 12407" " 1939"  " 9"     " 706"   " 336"   " 186"
[27] " 192"

将字符串转成数值型,再得到ggplot2可用的数据框格式:

citations = as.numeric(citations)
citations = as.data.frame(citations)

合著者的附属机构

page <- read_html("https://scholar.google.com/citations?view_op=list_colleagues&hl=en&user=sTR9SIQAAAAJ")
affilation = page %>% html_nodes(css = ".gsc_1usr_aff")%>%html_text()
affilation = as.data.frame(affilation)
names(affilation)='Affilation'

创建一个由coauthors,citations和affiliation组成的数据框

cauthors=cbind(Coauthors, citations, affilation)cauthors Coauthors citations                                                                                  Affilation
1                          Jason Evans      2231                                                               University of New South Wales
2                        Mutlu Ozdogan      1273    Assistant Professor of Environmental Science and Forest Ecology, University of Wisconsin
3                       Rasmus Houborg       816                    Research Scientist at King Abdullah University of Science and Technology
4                     M. Tugrul Yilmaz       395 Assistant Professor, Civil Engineering Department, Middle East Technical University, Turkey
5            Joseph A. Santanello, Jr.       652                                                  NASA-GSFC Hydrological Sciences Laboratory
.....

根据引用次数,对合著者重新排序

根据引用次数对合著者重新排序,以便得到递减的顺序图:

cauthors$Coauthors <- factor(cauthors$Coauthors, levels = cauthors$Coauthors[order(cauthors$citations, decreasing=F)])ggplot(cauthors,aes(Coauthors,citations))+geom_bar(stat="identity", fill="#ff8c1a",size=5)+
theme(axis.title.y   = element_blank())+ylab("# of citations")+
theme(plot.title=element_text(size = 18,colour="blue"), axis.text.y = element_text(colour="grey20",size=12))+ggtitle('Citations of his coauthors')+coord_flip()

与他合著的科学家中,有引用超过了12000次。他的学生中像我(图中最后一个)这样的刚处在"学走路的阶段"。

总结

在这篇文章,我们看到了如何抓取Google学术数据。我抓取了我导师的账户,获得了论文引用次数数据,合著者的附属机构以及他们被引用的次数。

正如我们在这篇文章所看到的一样,利用rvest包可以很容易的抓取HTML网页数据。同样重要的是,SelectorGadget通过CSS选择器可以帮助我们找出感兴趣的数据。

修正:我的导师告诉我Google学术只收录了他的小部分合著者。跟他合作发表的一些科学家以及一些引用很多次文章并没有显示出来。进一步,上面得到的结果对于有些人来说是不符合常理的(如:资历更深的人发表了更多的文章却比资历浅的人引用的次数更少)。因此,Google学术数据应该谨慎使用。

本文由雪晴数据网负责翻译整理,原文请参考Google scholar scraping with rvest package作者Fisseha Berhane。转载请注明原文链接http://www.xueqing.cc/cms/article/109

转载于:https://my.oschina.net/u/2605101/blog/601281

用rvest包来抓取Google学术搜索数据相关推荐

  1. python抓取google搜索结果

    1. 搜索引擎的选取 选择一个好的搜索引擎意味着你能够得到更准确的搜索结果.我用过的搜索引擎有四种:Google.Bing.Baidu.Yahoo!. 作为程序员,我首选Google.但当我看见我最爱 ...

  2. 如何用Python快速抓取Google搜索?

    「免费学习 60+ 节公开课:投票页面,点击讲师头像」 作者 | linksc 译者 | 弯月,编辑 | 郭芮 来源 | CSDN(ID:CSDNnews) 自从2011年 Google Web Se ...

  3. python request url 转义_Python多线程抓取Google搜索链接网页

    1)urllib2+BeautifulSoup抓取Goolge搜索链接 近期,参与的项目需要对Google搜索结果进行处理,之前学习了Python处理网页相关的工具.实际应用中,使用了urllib2和 ...

  4. 如何用 Python 快速抓取 Google 搜索?

    本文是通过 requests 和 Beautiful Soup 抓取 Google 搜索的快速指南. 作者 | linksc 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews ...

  5. 绕过SSL双向校验抓取Soul App的数据包

    参考了这篇文章:Android抓包总结 - 先知社区 https://xz.aliyun.com/t/6551#toc-10 毫无反编译经验的我,硬着头皮参考这篇文章抓到数据,记录一下抓包过程,全部是 ...

  6. 【解决抓包工具fiddler不抓取360浏览器的数据的问题】

    抓包工具fiddler不抓取360浏览器的数据 fiddler可以抓到Firefox浏览器的包,但是抓不到360浏览器的包. 操作步骤: 打开Fiddler -> 菜单栏 工具(Tools )- ...

  7. 使用Wireshark抓包工具抓取直播源

    介绍Wireshark Wireshark是一款世界范围最广.最好用的网络封包分析软件,功能强大,界面友好直观,操作起来非常方便.它的创始人是Gerald Combs,前身是Ethereal,作为开源 ...

  8. 抓包软件抓取手机数据(app,浏览器等)

    抓包软件抓取手机app数据 抓包软件,Charles配置 proxy-windows proxy(打钩) proxy-proxy settings 端口号8888 箭头处打钩 proxy-ssl pr ...

  9. Burpsuite 抓取微信小程序数据包

    Burpsuite 抓取微信小程序数据包 一.网上的方法 ① 手机导入CA证书,设置指定DNS,亲测无效 备注:此方法可抓取微信公众号的数据,但是无法抓取微信小程序的数据 ② 使用安卓模拟器,我下载的 ...

最新文章

  1. 中 自动展示链接的内容_织梦DEDECMS文章内容中的图片自动添加ALT和title属性方法...
  2. 【渝粤题库】陕西师范大学200271 微分几何 作业(专升本)
  3. dataframe 空值替换为0_Python数据分析:Pandas之DataFrame
  4. Java编程时如何节省内存,效率高
  5. 疫情肆虐之下,阿里巴巴的攻与防!
  6. mac版有道云笔记切换笔记后内容仍展示前一个笔记内容问题解决
  7. 8.1.2 学习更多关于ConcurrentHashMap
  8. velocity include
  9. SQL删除重复数据并只保留一条
  10. 西门子系列PLC教学视频资源3——S7-1500博图
  11. 微机原理交通灯控制系统设计
  12. 计算机主机总线,什么是计算机总线,计算机总线包括什么?
  13. KVM/QEMU虚拟机申请和释放内存的步骤
  14. Virtualbox上openSUSE 15.2 Leap安装guest additions
  15. java double保留四位小数_double类型数据保留四位小数的另一种思路
  16. 著作权范围大于版权?如何进行著作权查询?
  17. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。...
  18. python设置单元格宽度_python – 在Excel中调整单元格宽度
  19. (批处理BAT)批量提取pdf大小
  20. django项目支持外网访问--花生壳

热门文章

  1. 软考-信息系统项目管理师-项目合同管理
  2. 手机python3_python3 简单手机验证码的实现
  3. python画切片图_python切片操作
  4. swift golang java,解决两数之和 (Javascript, Java, C#, Swift, Kotlin, Python,C++, Golang)
  5. 他们的背后,是我们!
  6. 神策数据曹犟将出任导师:宝洁黑客马拉松聚焦工业大数据
  7. 大型分布式C++框架《四:netio之请求包中转站 上》
  8. 常用SQL Server 小语法、函数 等的实例汇总
  9. K NEAREST NEIGHBOR 算法(knn)
  10. 从Http它被连接到WebSocket