基于Python爬蟲從NCBI批量下載數據的腳本
一、前言
當前NCBI作為分子生物學界最普遍使用的基因數據儲存和處理系統,由于在需要大批量下載基因序列時,網站未提供相應下載工具,所以本人以節約時間成本為目的,提高科研工作效率為出發點,編寫從NCBI上大批量爬取基因序列的腳本,同時以此為生物信息學課程作業。編碼編寫水平有限,望指教。
二、開發思路
1.當我們使用爬蟲爬取相關網站的數據時,首先我們需要了解瀏覽器與網站服務器如何實現數據交互。這里先介紹幾個基礎概念:
1.1 URL:Internet上的每一個網頁都具有一個唯一的名稱標識,通常稱之為URL (Uniform Resource Locator, 統一資源定位器)。它是www的統一資源定位標志,簡單地說URL就是web地址,俗稱“網址”。
1.2 http協議: Internet上的每一個網頁都具有一個唯一的名稱標識,通常稱之為UR(UniformResource Locator, 統一資源定位器)。它是www的統一資源定位標志,簡單地說URL就是web地址,俗稱“網址”,簡單來說,瀏覽器與服務器之間數據交流是按照http協議規定的方式進行。
如圖所示,瀏覽器遵循http協議按照指定url發送數據請求,即request,服務器響應瀏覽器發出的請求返回數據稱為response。在我們向瀏覽器請求數據時,需要一個實體發出請求,通常瀏覽器即為這個實體,也就是用戶代理,爬蟲爬取數據的過程也就是通過腳本程序將自己偽裝成瀏覽器來訪問服務器獲取數據,再對數據進行解析提取。
??? 2.首先我們看一下正常情況下,通過瀏覽器訪問NCBI數據庫的方式,如圖二所示,通過輸入網址National?Center for Biotechnology Information (nih.gov),瀏覽器就會打開此頁面,進入NCBI的核苷酸數據庫,在搜索框中輸入NCBI數據庫定義的Gene Bank號,就可以找到我們想要找的核苷酸序列,在NCBI數據庫每一個Gene Bank號對應唯一的核苷酸序列。
下面以gene bank:T42934為例,搜索該gene bank對應的核苷酸序列,在搜索框中輸入T42934,并點擊頁面FASTA選項,瀏覽器顯示頁面如圖三所示。
從圖中我們可以很明顯看出一些變化,第一點:網址的變化與圖二相比,圖三的網址添加了一些參數包括gene bank 和report= fasta。通過分析添加這些參數,我們知道每個參數的功能。Gene ban:定位到指定的序列,fasta:以fasta數據格式輸出。第二點我們需要爬取的網頁數據就是圖三中紅色框中的內容,所以我們只要通過指定的URL獲取到這個html文件,再提取關鍵數據。爬蟲的主要工作就完成了。通過以上描述,我們大致了解到瀏覽器與服務器之間數據傳輸的方式,現在我們借助爬蟲實現與服務器的數據交互。
三、 代碼實現
爬蟲主程序如圖四所示,由于圖三中紅色框內數據,并非由黃色框中url搜索的到的,而是另外動態加載得到的數據。需要gene bank對應的gene id為參數才能得到該ajax數據包。還是以T42934為例,當我們以URL=https://www.ncbi.nlm.nih.gov/nuccore/T42934.1?report=fasta來搜索數據時發現爬蟲返回的html文件不包含我們需要的數據,真正的數據是以圖五.2的動態數據加載而來,請求URL如圖中所示。因此我們需要先從gene bank 獲取對應的gene id 再搜索數據。
爬蟲開始爬取基因序列之前需要知道自己要爬取哪些基因,本人默認爬蟲讀取’C:/temp’路徑下的list.xlsx文件以獲取需要爬取的基因,該list.xlsx默認第一列填寫基因名,無header。腳本獲取數據函數如圖六所示
獲取genebank 對應id函數如下圖七
獲取gene id對應序列fasta格式文件如圖八
四、參考資料
CSDN 爬蟲爬取動態加載網頁
CSDN NCBI上爬取品種信息
Python道長—爬蟲入門到實踐
IT私塾 python爬蟲編程基礎五天速成
圖靈學院python爬蟲教程