美文网首页Bioconductor for R编程语言正则表达式 爬虫
Python爬虫(1): 从bioconductor 爬取 R

Python爬虫(1): 从bioconductor 爬取 R

作者: 魚晨光 | 来源:发表于2018-11-27 19:28 被阅读62次

    前言

    由于最近需要从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 可用字节
    

    结语

    从事生信分析多年,敲过很多代码,从生疏到熟练,从简单到复杂。除了之前受同事之托写过几篇编程培训的微信小文章以外,几乎没有写过任何相关博客。用博客分享自己写的代码,这还是第一次。前几天,办公室师妹突然问我有没有写过什么技术类博客文章,我答曰:没有。刚好最近写了这个爬虫脚本,于是乎就发到简书,与大家分享,欢迎指正。

    相关文章

      网友评论

        本文标题:Python爬虫(1): 从bioconductor 爬取 R

        本文链接:https://www.haomeiwen.com/subject/twjnqqtx.html