Python爬蟲獲取geneID對(duì)應(yīng)的NCBI注釋

在海量的組學(xué)數(shù)據(jù)中唆缴,我們經(jīng)常需要根據(jù)已有的差異表達(dá)基因找到對(duì)應(yīng)的注釋信息。那么針對(duì)一系列基因ID批量獲取其注釋無疑能夠大大簡(jiǎn)化后繼的分析,提高科研效率深胳。本次來分享使用python爬蟲完成NCBI基因注釋的方法。

Sample input: 輸入文件如下宁仔,是一列g(shù)eneID稠屠。

輸入文件樣式峦睡,以xls文件保存


待獲取的信息來源于NCBI-geneID頁中Description項(xiàng),也就是下圖中紅色方框項(xiàng):

NCBI網(wǎng)站中g(shù)ene ID號(hào)為833792的基因信息頁权埠。

Sample output: 最終輸出結(jié)果如下

輸出文件樣式


下面講解一下思路流程:
1. 逐行讀取xls文件列名并獲取基因ID榨了。
2. NCBI搜索基因ID,進(jìn)入網(wǎng)站并獲取注釋信息攘蔽。
3. 記錄注釋信息并逐行保存在xls文件中龙屉。

所使用的python API:

urllib 獲取網(wǎng)頁信息。
pandas 讀取xls格式輸入文件满俗。
tqdm 可視geneID注釋信息獲取進(jìn)度转捕。
re 正則表達(dá)式找到網(wǎng)頁URL對(duì)應(yīng)的信息行。

下面我們分步完成:


Step1:逐行讀取xls文件列名并獲取基因ID

首先唆垃,因?yàn)槲覀兊妮斎胛募莤ls格式的五芝,我們需要通過pandas包將輸入數(shù)據(jù)讀入計(jì)算機(jī)內(nèi)存中。在這里定義了read_xlsx方法辕万,通過輸入文件路徑(path)枢步,輸入文件中的工作表名稱(sheetname),該工作表中待獲取的列數(shù)(i)渐尿。最終以數(shù)組形式返回基因ID醉途,可供后繼遍歷使用。

# 1.逐行讀取xls文件列名并獲取基因ID
def read_xlsx(path, sheetname,i):
    sheet = pd.read_excel(path, sheetname)
    geneID = []
    for row in sheet.index.values:
        geneID.append(sheet.iloc[row, i-1])
    return geneID

Step2:NCBI搜索基因ID砖茸,進(jìn)入網(wǎng)站并獲取注釋信息隘擎。

將Step1中得到的geneID數(shù)組作為Step2的輸入數(shù)據(jù)。逐行讀取geneID凉夯,并將獲得的geneID保存到變量i中并傳入"https://www.ncbi.nlm.nih.gov/gene/?term={i}"货葬,這樣相當(dāng)于獲得了每一個(gè)geneID在NCBI的信息頁。

此時(shí)恍涂,我們使用urllib包的request打開剛剛得到的url宝惰,獲取網(wǎng)頁信息并保存到content 中(decode用于html解碼)。

最后使用正則表達(dá)式re.findall匹配注釋信息(Description)所在的模式行:<dd>(.*?)</dd>再沧。這是所獲取的信息就是Description尼夺,我們將它保存在p中并輸出到數(shù)組infoID中。

# 2.NCBI搜索基因ID炒瘸,找到注釋信息
def get_infoID(GeneID):
    infoID = []
    for i in tqdm(GeneID):
        url = f'https://www.ncbi.nlm.nih.gov/gene/?term={i}'  # 查找基因的網(wǎng)址
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
        }
        request = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(request)
        content = response.read().decode('utf-8')
        p = re.findall('<dd>(.*?)</dd>', content)[0]# (.*?)為正則表達(dá)式的目標(biāo)區(qū)域
        infoID.append(p)
    return infoID

Step3:運(yùn)行上述代碼淤堵,記錄注釋信息并逐行保存在xls文件中。

輸入文件的路徑為"C:/Users/Administrator/Desktop/gene-NCBI_NO.xlsx"顷扩,而geneID信息保存在此表中的“218”工作表的第一列拐邪。

分別執(zhí)行Step1和Step2。

最后使用pandas的ExcelWriter寫入新的excel之中隘截。

if __name__ == '__main__':
    # 1.逐行讀取xls文件列名并獲取基因ID
    GeneID = read_xlsx("C:/Users/Administrator/Desktop/gene-NCBI_NO.xlsx", "218", 1)
    print("讀取基因標(biāo)簽完畢扎阶,正在獲取基因注釋汹胃!")

    # 2.NCBI搜索基因ID,找到注釋信息
    infoID = get_infoID(GeneID)
    print("基因注釋獲取完畢东臀,正在生成注釋表格着饥!")

    # 3.記錄注釋信息并逐行保存在xls文件中
    df = pd.DataFrame({'GeneID': GeneID,  'Description': infoID})
    writer = pd.ExcelWriter('C:/Users/Administrator/Desktop/218_with_Description.xls')
    df.fillna(' ', inplace=True)  # 文本空格消除掉
    df.to_excel(writer, sheet_name='218', index=False)
    writer.save()

    print("完成")

總結(jié)

本篇博客分享了使用Python語言實(shí)現(xiàn)NCBI爬蟲獲取基因注釋的方法。當(dāng)然惰赋,對(duì)于基因功能宰掉,分子組分和通路注釋的方法,在生物信息學(xué)方面有對(duì)應(yīng)的GO和KEGG注釋可以實(shí)現(xiàn)并且可視化赁濒。亦可采用R來解決轨奄,實(shí)現(xiàn)的方法很豐富。

在本篇博客以代碼實(shí)現(xiàn)為主拒炎,對(duì)于python爬蟲的實(shí)現(xiàn)原理講解相對(duì)較少挪拟。實(shí)現(xiàn)網(wǎng)站爬蟲需要了解html開發(fā)者模式,re正則表達(dá)式等等击你,有興趣的小伙伴可以自行學(xué)習(xí)舞丛,或者在下方評(píng)論區(qū)討論~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市果漾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谷誓,老刑警劉巖绒障,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捍歪,居然都是意外死亡户辱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門糙臼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庐镐,“玉大人,你說我怎么就攤上這事变逃”啬妫” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵揽乱,是天一觀的道長(zhǎng)名眉。 經(jīng)常有香客問我,道長(zhǎng)凰棉,這世上最難降的妖魔是什么损拢? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撒犀,結(jié)果婚禮上福压,老公的妹妹穿的比我還像新娘掏秩。我一直安慰自己,他們只是感情好荆姆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布蒙幻。 她就那樣靜靜地躺著,像睡著了一般胞枕。 火紅的嫁衣襯著肌膚如雪杆煞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天腐泻,我揣著相機(jī)與錄音决乎,去河邊找鬼。 笑死派桩,一個(gè)胖子當(dāng)著我的面吹牛构诚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铆惑,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼范嘱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了员魏?” 一聲冷哼從身側(cè)響起丑蛤,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撕阎,沒想到半個(gè)月后受裹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虏束,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年棉饶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镇匀。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡照藻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汗侵,到底是詐尸還是另有隱情幸缕,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布晰韵,位于F島的核電站冀值,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宫屠。R本人自食惡果不足惜列疗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浪蹂。 院中可真熱鬧抵栈,春花似錦告材、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至产艾,卻和暖如春疤剑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷堡。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工隘膘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杠览。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓弯菊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親踱阿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子管钳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容