Bioconductor for R编程语言正则表达式 爬虫

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

2018-11-27  本文已影响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 可用字节

结语

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

上一篇下一篇

猜你喜欢

热点阅读