写在前面
最近看到一篇博客《RNA-seq与miRNA-seq联合分析》,关于差异表达分析的,于是就想走一遍miRNA差异表达分析的过程。
数据下载地址也是该博客提供:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE77276,样本取自20个中国肝癌患者的肿瘤组织,门静脉组织和癌旁组织,共计60个,分别对其进行miRNA-seq,甲基化分析,拷贝数变异分析和RNA-seq分析。
进入下载地址,我想要的miRNA数据就在这里,miRNA的数据有60条,其他的还有180条。
先点击一个进去,再点击红线部分就可以下载了。
但是一想到要有60个样本数据要下载,这样一个个点进去下载得下到猴年马月吧!
我觉得肯定有人会遇到这种情况的,虽然不知道他们是怎么解决这个烦恼的,
但在这里,我想分享一句python名言:人生苦短,我用python!
python的世界里,可见即可爬,这种重复性的工作交给python最适合不过了。
进入正题
考虑到正在看这篇文章的你,可能没接触过爬虫,我就直接放代码吧!
import requests
import re
from urllib.request import urlretrieve
def getGSMid(GSEid):
'''
通过GSEid获得该GEO网页上的所有样本GSMid
:param GSEid:
:return: 包含所有样本GSMid的列表
'''
url = 'https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={}'.format(GSEid)
r = requests.get(url)
reg = re.compile('acc=(GSM\d{7})"')
GSMids = reg.findall(r.text)
return GSMids
def getDownloadUrl(GSMid):
'''
通过GSMid获取该样本信息的下载链接
:param GSMid:
:return: 返回一个下载链接
'''
url = 'https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc={}'.format(GSMid)
r = requests.get(url)
r.encoding = 'utf-8'
reg = re.compile('href="ftp://(.*?samples.*?)"')
href = reg.findall(r.text)[0]
href = str.replace(href, '%5F', '_')
href = str.replace(href, '%2E', '.')
href = 'https://'+ href
return href
def download(url,path,GSMid):
'''
下载样本信息
:param url: 下载链接
:param path: 文件夹路径
:param GSMid: 作为文件名
:return:保存为txt.gz文件
'''
urlretrieve(url, '{}/{}.txt.gz'.format(path,GSMid))
# 程序运行
GSEid = "GSE77276"
path = r'miRNA_seq'
GSMids = getGSMid(GSEid)
for GSMid in GSMids:
downloadUrl = getDownloadUrl(GSMid)
print(GSMid)
download(downloadUrl, path, GSMid)
print('运行结束')
现在教你怎么用!
首先,你要先安装python,很简单的,直接百度就知道了。
接着,你要安装三个模块,也很简单的,打开命令行窗口,输入:
pip install requests
pip install re
pip install urllib
每个模块安装完就可以运行程序啦,如果还是不会安装模块,直接百度就知道了。
再接着,打开你安装好的python IDLE,点击file—newfile,把代码复制粘贴进去。
最后,把GSEid换成你要下载的GSEid,把路径path换成你要保存的文件夹路径就可以啦!
第一次运行需要先保存Ctrl + S,然后run-run module,等待运行结束就大功告成了。
回到前面
前面说了,我只要60个miRNA seq的样本数据,但是运行上面程序将会把全部240个数据下载下来。
浪费时间,浪费内存,关键是没用啊!
那怎么办!稍微改下代码就好了,想下哪几个就下哪几个!
比如我想下载前60个数据,那么只需要
[:n]:表示前n个;
[n:]:表示后n个;
[m:n]:表示第m个(不包括m)到第n个(包括n)
最后的最后
事实上,有挺多软件或者工具用来下载GEO数据的,我知道的就有R语言的GEOquery包,具体下载的内容是不是我想要的这个不太清楚,毕竟我也没用过,而且也不知道能不能像我这样想下载哪几个就下载哪几个。
总之呢,人生苦短,我用python!
如果你运行程序出现错误,欢迎留言交流哈~