前言
由于最近需要从bioconductor下载R包,考虑到有时候联网不方便,如果能够将bioconductor 上所有的R包都下载到本地,那就可以离线安装了(事实上要完全实现离线安装,还是稍微有点复杂的~)。便尝试着写一个Python爬虫,这里将代码贴出来,分享给大家。
方法
1)脚本准备
创建一个名为 bioRpkg.download.v1.py 的脚本,代码如下:
# -*- coding: utf-8 -*-
"""
运行环境 :Windows 系统
Python :3.x
作者 :魚晨光
"""
import requests
import re
import os
import numpy as np
import pandas as pd
import xlrd
import sys
def get_HTMLText(url):
try:
r=requests.get(url)
return r.text
except:
return "产生异常"
def get_pks_html(urltext):
reg = r'href="(html/.*.html)"'
imgre = re.compile(reg)
imglist = re.findall(imgre, urltext)
return imglist #返回所有包的相对地址
def get_pks_addr(html_addr):
pkn_reg=re.compile(r'html/(.*).html')
pk_name=re.findall(pkn_reg,html_addr)[0]
pk_text=get_HTMLText(html_addr)
reg = r'src/contrib/([A-Za-z0-9._]*.tar.gz)'
imgre = re.compile(reg)
pks_gz = re.findall(imgre, pk_text)[0]
pks_list=[pk_name, pks_gz]
return pks_list
if __name__=="__main__":
pks_names = []
pks_urls = []
lst = []
url = "http://bioconductor.org/packages/release/bioc/"
outdir = os.getcwd()
text = get_HTMLText(url)
addrs = get_pks_html(text) #'html/a4.html'
npaddrs = np.array(addrs)
pknum = npaddrs.shape[0]
#获取包的下载地址信息
n = 1
for j in addrs:
pk_html=url + j
pks_inf=get_pks_addr(pk_html)
lst.append(pks_inf)
pk_name = pks_inf[0]
pk_gz = pks_inf[1]
process = str(n) + ' / ' + str(pknum)
print("正在获取下载地址: " + pk_name + " (" + process + ")")
link = "http://bioconductor.org/packages/release/bioc/src/contrib/" + pk_gz
pks_names.append(pk_name)
pks_urls.append(link)
np_lst = np.array(lst)
num = np_lst.shape[0]
""" 为测试脚本,这里只下载5个包,如果要下载所有数据,请注释掉下面两行代码: """
if num >= 5:
break
n = n + 1
pks_tab = pd.DataFrame({
'Package': pks_names,
'Url': pks_urls,
})
pks_tab.to_csv(outdir + '/' + 'biocR.urls.csv')
#下载包
#想要获取完整代码,请在留言处留邮箱地址
print("完成下载!")
sys.exit(0)
2)脚本运行
打开Windows cmd窗口,运行脚本
> python bioRpkg.download.v1.py
显示下载进程(测试脚本只下载5个包):
正在获取下载地址: a4 (1 / 1639)
正在获取下载地址: a4Base (2 / 1639)
正在获取下载地址: a4Classif (3 / 1639)
正在获取下载地址: a4Core (4 / 1639)
正在获取下载地址: a4Preproc (5 / 1639)
正在下载: a4 (1 / 1639)
正在下载: a4Base (2 / 1639)
正在下载: a4Classif (3 / 1639)
正在下载: a4Core (4 / 1639)
正在下载: a4Preproc (5 / 1639)
完成下载!
查看下载结果:
> dir
2018/11/28 15:48 <DIR> .
2018/11/28 15:48 <DIR> ..
2018/11/28 15:41 <DIR> .idea
2018/11/27 18:44 357,280 a4Base_1.30.0.tar.gz
2018/11/27 18:44 5,374 a4Classif_1.30.0.tar.gz
2018/11/27 18:44 3,662 a4Core_1.30.0.tar.gz
2018/11/27 18:44 1,914 a4Preproc_1.30.0.tar.gz
2018/11/27 18:44 972,443 a4_1.30.0.tar.gz
2018/11/27 18:44 463 biocR.urls.csv
2018/11/27 18:45 2,740 bioR.download.v1.py
7 个文件 1,343,876 字节
3 个目录 344,123,457,536 可用字节
结语
从事生信分析多年,敲过很多代码,从生疏到熟练,从简单到复杂。除了之前受同事之托写过几篇编程培训的微信小文章以外,几乎没有写过任何相关博客。用博客分享自己写的代码,这还是第一次。前几天,办公室师妹突然问我有没有写过什么技术类博客文章,我答曰:没有。刚好最近写了这个爬虫脚本,于是乎就发到简书,与大家分享,欢迎指正。
网友评论