1. 问题导向:
最近,老师给翔哥安派了个活,按老师的要求是需要从NCBI中收集大量SRR样本的信息,由于需要收集的样本数量较多,手动收集的效率比较低下,奈何自己对爬虫又不是很熟,于是就找到了我,让我帮忙给他写个python爬虫来完成这个任务,下面记录整个解决过程,仅供参考。
#所有需要收集的样本SRR号,存放在EXCEL中
SRR3656922
SRR3656924
...
ERR4494323
SRR5630644
2. 爬虫思路
因为已经有了SRR号,就可以直接在NCBI的搜索页面进行搜索,以样本SRR3656922为例:
搜索界面:https://www.ncbi.nlm.nih.gov/search/all/?term=SRR3656922
样本信息界面:https://www.ncbi.nlm.nih.gov/biosample/SAMN04545548/
通过观察发现我们所需要的数据都储存在二级网页中,需要我们从第一级网页中提取出二级网页所需要的SAM号,再从二级网页中提取出我们所需要的信息
Lv1_url = "https://www.ncbi.nlm.nih.gov/search/all/?term={}" # 一级网页基础链接
Lv2_url = "https://www.ncbi.nlm.nih.gov/biosample/{}/" # 二级网页基础链接
在二级网页中通过F12调出网页源码,通过元素定位发现我们所需要的信息都储存在<div class="docsum">...</div>元素中,可以直接上手提取
<div class="docsum">
<dl><dt>Identifiers</dt><dd>BioSample: SAMN07135495; Sample name: MT005-019; SRA: SRS2241134</dd></dl>
----
<dl><dt>Organism</dt><dd><a class="replace-link" href="/taxonomy/9913" ref="ncbi_uid=7135495&link_uid=9913">Bos taurus</a> (cattle)<br/><span id="bs_taxonomy">cellular organisms; Eukaryota; Opisthokonta; Metazoa; Eumetazoa; Bilateria; Deuterostomia; Chordata; Craniata; Vertebrata; Gnathostomata; Teleostomi; Euteleostomi; Sarcopterygii; Dipnotetrapodomorpha; Tetrapoda; Amniota; Mammalia; Theria; Eutheria; Boreoeutheria; Laurasiatheria; Artiodactyla; Ruminantia; Pecora; Bovidae; Bovinae; Bos</span></dd></dl>
----
<dl><dt>Package</dt><dd><a href='/biosample/?term="model organism animal 1 0"[filter]'>Model organism or animal; version 1.0</a></dd></dl>
----
<dl><dt>Attributes</dt><dd><table class="docsum"><tr><th>breed</th><td>Muturu </td></tr><tr><th>age</th><td>NA </td></tr><tr><th>sex</th><td>not determined </td></tr><tr><th>tissue</th><td>ear punch_D005 </t