Preface

之前同学读研选导师,帮忙参考了一下。我发现有些老师很年轻,但是 Google Scholar 各项数据都高得离谱(主要是 citation 和 h-index ),甚至轻松碾压一些在人口耳的小牛导。直觉上来说这种应该是数据虚高了,我猜测是因为老师之间合作比较多,一篇文章挂好几个老师的名字,而这种成果共享在 gs 上的体现就是,每个人都多了一篇文章。编程学习资料点击免费领取

虽然参与论文即需署名是基本的学术规范,老师们合作并共享成果肯定是没问题的,但是这会导致老师的 gs 数据虚高,进而对学生产生一定误导。因此,我们可以利用 gs 上的公开数据,分析一下老师们的合著情况,比如看看所有论文中,平均每篇文章由多少位老师参与……这些信息可以在我们选导师的时候帮助我们降低噪声,提供一定参考。

原理

要想分析一位老师的合著情况,首先我们需要获取这位老师的所有出版物,可以从 Google Scholar 上爬取该老师的论文列表。得到论文列表之后,我们需要提取出每篇文章的作者,然后对这些作者的出现频次进行排序。最后,就要依靠自己的先验知识来判断了,如果比较熟悉学院里各位老师的话,可以直接认出来哪些人是老师。对于代码实现而言,需要做的就是爬取论文列表、统计作者出现频率了。

实现

爬取论文列表

首先,gs 用户主页的论文列表不是一次性全部展示的,需要手动点击下方的展开,而展开后的这些新信息并不是一开始就加载好的,而是点击之后通过一个新的 url 请求的,所以需要分批次爬取(第一次接触爬虫,只会这种笨办法)。不过好在新的 url 的格式是有规律可循的,因此,只需要根据用户论文总数,就能确定需要多少条 url 、每条 url 应该是什么。

url 的格式为:

  • 前20条论文数据(即首页展示的20篇)对应的url就是用户主页的链接;
  • 第20-100条,在主页链接后加&cstart=20&pagesize=80
  • 第100-200条,在主页链接后加&cstart=100&pagesize=100
  • 第200-300条,在主页链接后加&cstart=200&pagesize=100
  • 以此类推。

因此,只需要定义一个urls列表,根据老师的论文数量,把所有 url 都写好放进去即可。

接着,定义一个data字符串,把爬取到的信息都拼接到字符串里面,后面用正则表达式提取有效信息。

然后,定义函数获取信息:

def getData(url):header_dict={'Host': 'scholar.google.com','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.9','Referer': 'https://scholar.google.co.id/citations?hl=zh-CN&user=oqYL6fQAAAAJ','Connection': 'keep-alive'}req = urllib.request.Request(url=url,headers=header_dict)response = urllib.request.urlopen(req,timeout=120)tempdata = response.read()tempdata = tempdata.decode()return tempdata
复制代码

在刚才定义的urls中,用一个 for 循环依次爬取每个 url 的数据,拼接到data字符串上。

urls = ['https://scholar.google.co.id/citations?hl=zh-CN&user=oqYL6fQAAAAJ','https://scholar.google.co.id/citations?hl=zh-CN&user=oqYL6fQAAAAJ&cstart=20&pagesize=80','https://scholar.google.co.id/citations?hl=zh-CN&user=oqYL6fQAAAAJ&cstart=100&pagesize=100','https://scholar.google.co.id/citations?hl=zh-CN&user=oqYL6fQAAAAJ&cstart=200&pagesize=100']for each in urls:data += getData(each)
复制代码

这样,我们就已经得到了原始的论文列表数据,接下来需要从这些数据中提取有效信息。

提取信息

这一步主要通过正则表达式来实现。通过简单观察即可得到论文标题、作者和出版物等信息的正则表达式 pattern ,如下:

title_pattern = re.compile(r'gsc_a_at">.*?<')
author_pattern = re.compile(r'<div class="gs_gray">.*?</div><')
publisher_pattern = re.compile(r'</div><div class="gs_gray">.*?<span')
复制代码

然后我们利用这些 pattern 来提取相应的信息存入列表,同时进行裁切,进一步去除多余的字符;而一篇文章中有多位作者,也需要根据逗号将其拆分进列表。

title = re.findall(title_pattern, data)
author = re.findall(author_pattern, data)
publisher = re.findall(publisher_pattern, data)for i in range(len(title)):title[i] = title[i][10:-1]
for i in range(len(author)):author[i] = author[i][21:-7]author_list.append(author[i].split(', '))
复制代码

完成上述操作之后,就得到了每篇论文的标题、作者列表,接下来就是寻找作者姓名的共现情况。

合著分析

这一步就是简单的计数和排序了,我的做法是定义一个作者类,属性包含姓名、论文数,然后遍历上面得到作者列表,统计某位作者参与的论文数,最后对这些作者进行排序即可。最后输出结果:

从这个结果中可以看出,F Shen 老师最常合作的学者是 HT Shen 、Y Yang 等老师。当然,有了前面得到的那些作者列表之后,还可以从各种不同的维度去分析,上面这个截图只是其中一种很简单的应用场景。

这里我用了 F Shen 老师的论文数据,需要提一下,我这里只是随便举个例子,不代表我对这位老师有任何偏见。实际上 F Shen 老师是我一直非常敬仰的老师,也是我曾经的意向导师之一,口碑很好,这里也向大家推荐一下 ~

结语

以上就是利用 Google Scholar 数据进行合著分析的大致过程,技术实现上毫无难度,写在这里一方面是分享一些经验,比如在 Google Scholar 论文数据中正则表达式 pattern 应该怎么设计;另一方面也是给大家提供一种进一步了解老师的思路,毕竟 Google Scholar 的各项指数并不代表一切。希望能有所帮助。

①3000多本Python电子书有
②Python开发环境安装教程有
③Python400集自学视频有
④软件开发常用词汇有
⑤Python学习路线图有
⑥项目源码案例分享有

如果你用得到的话可以直接拿走,在我的QQ技术交流群里(技术交流和资源共享,广告勿入)可以自助拿走,群号是895937462。

爬取Google Scholar论文列表,如何利用公开数据进行合著作者分析?相关推荐

  1. 爬取google scholar数据

    突破限制爬取网页数据 googlesholar为例[转] 分类: 常用工具使用 2010-11-04 09:23 931人阅读 评论(1) 收藏 举报 浏览器google服务器stringwindow ...

  2. python中data.find_all爬取网站为空列表_利用Golang快速爬取盗版网站的整套音频

    01 前言 最近因为 Zigma 帮我写了个推广 Catcher 小程序软文的原因,答应了他帮他爬了一个盗版音频网站的整套 <李淼谈奇案> . 在制作爬虫脚本的过程中,也是遇到了一些有趣的 ...

  3. 爬取google scholar

    create table professor(cite char(10),professor char(60),title char(250),author char(200),publisher c ...

  4. 爬取全国未来十五天的天气数据(python3)

    爬取全国未来十五天的天气数据 一.网页分析 (一)请求分析(url) 1.观察 2.分析 3.结论 (二)行政区域分析 1.观察 2.分析 3.结论 (三)未来15日 天气数据分析 1.观察 2.分析 ...

  5. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

  6. 爬取Google patent上公司所有专利

    爬取Google patent上公司所有专利 需求:给出了需要爬取的公司列表,形式如下: ['DURATA THERAPEUTICS INC','DYNAVAX TECHNOLOGIES CORP'] ...

  7. 爬虫实战(二)—利用requests、selenium爬取王者官网、王者营地APP数据及pymongo详解

    概述 可关注微信订阅号 loak 查看实际效果. 代码已托管github,地址为:https://github.com/luozhengszj/LOLGokSpider ,包括了项目的所有代码. 本文 ...

  8. 运用requests模块爬取NCBI数据库论文题目及摘要

    本人生物专业,本身做湿实验的,但对python有着极大的兴趣,因此开始自学Python.在这里记录一下学习进程. 近期编一个爬取NCBI数据库文献的脚本,放在这里希望大家能帮忙看看可以改进的地方,谢谢 ...

  9. 如何利用 C# 爬取「猫眼电影专业版:票房」数据!

    在现代生活中,看电影已经成为大家的一种休闲方式. 前几天,我们介绍了 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!,通过这份"热映口碑"榜单,我们可以看到大家对当前 ...

最新文章

  1. Centos 6 常用服务部署命令说明
  2. vsftpd匿名用户上传和下载的配置
  3. Linux /etc/inittab 文件的解读
  4. Windows Server AppFabric Beta 2 for For Vistual Studio 2010已经发布
  5. Android NDK编译中在libs\armeabi中加入第三方so库文件的方法
  6. FLOAT或DOUBLE列与具有数值类型的数值进行比较 问题
  7. js模版引擎handlebars.js实用教程——结束语
  8. 操作系统——实验贰——进程通信(一)管道及共享内存
  9. JAVA获取别人发过来的json字符串(Post方式)
  10. matlab处理最优化问题,matlab求最优化问题
  11. 如何写程序自动下载BBC Learning English的所有在线课程
  12. 四川自考计算机信息管理专业,计算机信息管理专业2019年10月四川自考科目及考试时间[本科]...
  13. MAC-快捷键打开终端
  14. 如何有效去除博客上的广告
  15. MAK代理激活的使用方法和注意事项
  16. Multithreading and Synchronization
  17. 我要有女朋友肯定带她吃完这上面所有的小吃(很便宜哥们儿们行动起来吧)
  18. BI神器Power Query(18)-- PQ制作时间维度表(7)
  19. OpenCV绘制透明底的图片,简单易懂讲解alpha通道怎么用
  20. BigCommerce vs WooCommerce,哪个更适合跨境电商开展业务?

热门文章

  1. HDFS、Ceph、GFS、GPFS、Swift、Lustre
  2. 打工人都想知道的免费音频转文字软件分享,还不快收藏
  3. 金属切削有普通铣床(加工中心)或车床
  4. python的zipfile.open_Python模块:zipfile
  5. 寒武纪科技陈天石:在AI“石器”时代保留火种
  6. 【python】爬虫入门相关
  7. 枚举法------《啊哈!算法》
  8. 兰州市第五医院内六病区感染科简介及部分疾病健康教育
  9. 计算机组装教学工作计划中职,中职教学工作计划范文(精选3篇)
  10. 天津大学计算机基础知识,天津大学计算机应用考研心得摘录