网络爬虫(web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。各大搜索引擎都可以被看做爬虫,根据爬取的内容更新自身的网站内容或其对其他网站的索引。一般如果想批量从网页获取数据,有download或者API(之前推送过使用API提取TCGA数据)页面最好,没有的话可以考虑使用爬虫爬取。

本期使用R语言批量爬取NCBI基因注释信息,主要用到了XML包的getNodeSet函数。需要使用者有一定html+css基础,以及理解并能使用XML路径语言(xpath)。

使用R爬取NCBI人类基因信息流程如下:

首先准备目标基因文件,我们以下面这几个基因(gene symbol的形式)为例进行爬取其在NCBI(gene)中的信息,基因列表文件可以从这里下载(https://pan.baidu.com/s/1c2jbvby)。

gene list文件

载入要用到的包并读入基因列表:

library(RCurl)

library(stringr)

library(XML)

library(clusterProfiler)

rm(list=ls())

# 读入基因列表:

genes

从下图可以发现NCBI对于基因页面的索引方式都是 https://www.ncbi.nlm.nih.gov/gene/Entrze ID 的方式。

NCBI中基因页面

所以我们需要将gene symbos转为entrze ID,这里使用clusterProfiler包的bitr函数进行转换:

# 将gene symbol转为entrze ID:

genes

然后获得每个基因在NCBI中的索引链接:

# 网址数据框:

genes$NCBI_url

每个基因symbol、entrze ID和NCBI url

使用XML包的getNodeSet()函数需要两个参数,一个是根据URL获得的网页XML document对象,另一个是要定位的节点(xpath格式)。不了解xpath的可以点击页面左下角阅读全文查看其基本语法。不过我们可以在不了解语法的情况下获得要定位节点的xpath。只需要在chrome浏览器里打开NCBI的gene信息页面,我们以基因DBNDD1为例,然后再按一下F12就可以调出chrome浏览器自带的开发者工具:

在chrome浏览器中选择节点的xpath

比如说我们要爬取基因的Official Full name信息,我们只需要在调出来的开发者工具栏右上角点几下那个小箭头,然后在点下Official Full name然后在右上方的源代码显示Official Full name的位置点击右键,选择Copy,Copy XPath。

获得要爬取节点的xpath信息

我们可以得到这样的xpath字段:

# Official Full name的xpath://*[@id="summaryDl"]/dd[2]/text()

使用同样的方法,我们可以获得基因的HGNC ID,Gene type和Summary等任何部分的xpath。

# HGNC ID的xpath://*[@id="summaryDl"]/dd[3]/a

# Gene type的xpath://*[@id="summaryDl"]/dd[5]/text()

# Summary的xpath://*[@id="summaryDl"]/dd[10]/text()

到这里准备工作就结束了,接下来构建并调用函数来爬取每个基因这4个字段的信息:

# 根据xpath获取节点内容:

getNodesTxt

使用一个for循环获得每个基因的信息并存储到数据框:

for(i in 1:nrow(genes)){

# 获得网址:

doc

爬取结果如下:

爬取结果

上面的节点的xpath中的标签是按照顺序在chrome生成的,这样就存在一个问题,如果某个基因没有某个属性,则这个属性后续的所有节点的xpath都将发生改变。如下图所示的两个基因,一个有别名,一个没有别名,则这两个基因的Summary的xpath就是不同的,而我们是按照有别名基因的xpath爬取的,所以爬取到没有别名的基因时的summary就会出错。

不同基因同一属性的xpath可能不同

为了能够精确爬取到想要的数据,这里就需要使用到xpath的轴和函数获得准确的节点定位。下面直接附上代码:

# xpath精确定位:

for(i in 1:nrow(genes)){

# 获得网址:

doc

精确爬取结果如下,验证都是正确的。

精确爬取结果

爬取结果的准确性依赖于节点定位是否准确,定位既可以通过xpath,也可以通过CSS,rvest包提供里这两种定位方式。并且rvest包使用magrittr包的%*%操作符,增强了代码的可读性。

更多原创精彩视频敬请关注生信杂谈:

阅读原文

readxmls r语言_R语言批量爬取NCBI基因注释数据相关推荐

  1. python调用api接口获取数据_python批量爬取NCBI基因注释并调用谷歌API批量翻译

    作者:沙雕学习小组 这里有视频教程:https://www.bilibili.com/video/av87724182 今天想实现这个功能: 差异分析得到了200多个基因(甚至更多) 我要一个一个把基 ...

  2. 【Python】批量爬取OSM建筑瓦片数据并整合为shp格式数据

    目录 1 简介 2 效果展示 3 思路及代码 3 完整代码 4 一些说明 1 简介 最近在做一项课题,涉及到建筑足迹(Building footprints)数据.所以想看看现在比较常用的都有什么产品 ...

  3. PBI培训(4):批量爬取web来源公开数据

    前言:最近项目上有爬数据需求,好在只需要公开信息,用PBI就可以搞定,故整理了一下爬数步骤,查阅了简书和知乎大佬的文章发现还是会踩坑,这里整理一版详细的记录下来方便理解. 爬数方式: 爬单页数据并做简 ...

  4. 八爪鱼批量爬取html中的数据,网页数据如何批量采集_视频教程 - 八爪鱼采集器...

    本视频介绍循环方式中的URL循环和文本循环. URL循环适用场景: 在多个同类型的网页中,需要采集的字段相同. 例如: https://movie.douban.com/subject/2638793 ...

  5. 【大众点评评论爬虫】一键获取大众点评完整评论工具批量爬取保存为excel数据

    大众点评评论采集服务 服务v:spider_bj 与原网页对比 服务v:spider_bj

  6. 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。

    1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...

  7. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  8. Python每日一练(9)-批量爬取B站小视频

    目录 1. 批量爬取B站小视频 2. 获取动态请求的JSON数据 3. 随机生成浏览器的头部信息 4. 获取要下载视频的大小 5. 实时打印文件下载进度 1. 批量爬取B站小视频 哔哩哔哩网站(英文名 ...

  9. 每天弄个小爬取之Python爬取批量爬取B站小视频!

    1. 批量爬取B站小视频 哔哩哔哩网站(英文名称: bilibili),是年轻人的文化社区,被粉丝们亲切的称为B站.该网站中拥有动画.番剧.国创.音乐.舞蹈.游戏.科技.生活.鬼畜.娱乐.时尚等多个内 ...

  10. json spr路驾驶技术视频api_每天弄个小爬取之Python爬取批量爬取B站小视频

    1. 批量爬取B站小视频 哔哩哔哩网站(英文名称: bilibili),是年轻人的文化社区,被粉丝们亲切的称为B站.该网站中拥有动画.番剧.国创.音乐.舞蹈.游戏.科技.生活.鬼畜.娱乐.时尚等多个内 ...

最新文章

  1. 坑!只要年轻博士,薪资按考核结果发放, 高校的博后制度,究竟有多少门道?...
  2. Python二维离散余弦变换图像压缩应用(基于OpenCV)
  3. LeetCode Add Two Numbers
  4. js调试工具console详解
  5. 全球及中国霍乱菌苗行业模式分析及前景发展规划建议报告2022-2027年版
  6. 初始化HashMap的默认值——阿里巴巴编码规范系列
  7. 《机器学习》 周志华学习笔记第八章 集成学习(课后习题)python实现
  8. 仅用10个月!中国高中生拿下Kaggle Master,怎么做到的?
  9. excel几个数相加等于某个数_[求助]如何能计算出几个数字相加等于一个给定的数...
  10. k8s核心技术-Controller(Deployment)控制器对pod的管理实现_升级回滚和弹性伸缩---K8S_Google工作笔记0030
  11. 利用VB.NET绘制简易表白小程序
  12. Ubuntu18.04安装wireshark3.0.6(版本可自己选)
  13. shell训练营Day30
  14. 关于路由器,摄像头,防火墙的搜索方法(IOT设备)
  15. mmdetection 绘制PR曲线
  16. 中文转换成拼音实施方法
  17. csm和uefi_BIOS里的 CSM 是什么意思,我的只有UEFI
  18. Character类的常用方法
  19. 三重积分--------球坐标系
  20. 基于AM5728 DSP JTAG连接调试方法

热门文章

  1. 有限差分法求解高阶导数
  2. python连接S3
  3. 计算机电脑整蛊图片,双击就蓝屏 男子愚人节整蛊怒砸笔记本
  4. picgo+sharex写markdown笔记
  5. Flink 1.12.2 源码浅析 : Transformation 浅析
  6. 系统开发方法和开发模型
  7. 配置Spring AOP aspectj-autoproxy标签源码解析
  8. react实现上传文件进度条功能_react-progress 自定义一个进度条插件
  9. 卡西欧计算机fx82怎么玩游戏,casio计算器fx-82es使用说明.pdf
  10. php doctrine,PHP和Doctrine:如何创建唯一ID