著作权归作者所有,任何形式的转载都请联系作者。
最近有同租的室友是一个资深的NGS产品经理,昨天要对涉及NGS测序
方面的国自然基金做一个调查,这是一项源于领导的任务,一是可以预测今后的科研成果走势,二是可以统一梳理,看看能不能筛选一下作为潜在的客户进行拜访。
首先他打开了 ,填好筛选的关键词-测序
和筛选年限之后,就得到了查询结果的页面。
这几百条信息,要转换成excel表格可真是不容易,在一顿Ctrl+C、Ctrl+V之后,手都有点酸了,没整几条不说,还有其他关键词搜索页面要弄(比如“单细胞”)。有幸都在都家办公,当相隔一个沙发坐垫的求助目光飘过来时,不等听到“你会爬虫吗?”这几个字,我已经明白,我有点临时的事情要做了。
不就是爬虫嘛,以前发过的《》和《》都玩过的,再之前帮室友批量下载**图也用过。
开始想的简单,本想拿前两篇的方法稍加改动实现就好,在我经过一轮尝试(此处省去五百字)之后,发现经验不能照搬,这一条条国自然基金没有躺在一个json列表里供我直接获取。
通过分析网页,我基本确定我要爬取的数据在这个网址里边:
这个网页是由/search
作为前缀,后边跟?
,再往后是请求的参数,具体的请求参数在下图所示的query String Parameters
里。
这样一来技术路线就明了了:通过request获取网页内容,再通过bs4解析网页内容导出到excel表格。
通过request获取目标网页
#如果是429,说明操作太频繁,你的IP被目标网站封了通过bs4解析网页内容
通过解析网页源码的结构组成,解析的代码如下:
下面是运行代码之后的结果,说明这个策略是成功的:
循环肿瘤细胞高效分型捕获与高通量单细胞转录组测序分析
关键词:微流控芯片;单细胞分析;循环肿瘤细胞
利用微孔板测序技术绘制人类细胞图谱
基于单细胞转录组测序的结肠癌肝转移的免疫特征研究
关键词:结肠癌;肝转移;单细胞转录组;免疫细胞
如果注意到params
中的参数'page':1
就知道我们现在的代码只是获取第一页的基金列表,再往后还有20个页面,要一键获取所有的页面,还需要解决对网站频繁操作导致的请求失败(response.status_code = 429)问题。
最终封装完成的代码做成了jupyter notebooks的形式放到了供读者复现,链接的同级目录还包括最终存储爬取数据的csv文件,下面是结果截图:
我注意到基金金额比较靠前的张泽民的和郭国骥老师的这两个基金涉及到的文章已经见刊。
如果要获取其他关键词的基金,修改params
中的参数'name'
选项即可。