这个网站的数据更新比较频繁,而且数据齐全,这里我们就以爬取药草的靶点基因数据为例。
首先,我们在browse页面随便进入一个药草页面
1.分析该网站所发送的请求
打开web调试器(F12),抓包分析请求,发现
在后台打印发现这一条就是用来获取数据的请求
但是所得到的数据并不是该网页所展示的内容,其实是因为我们并没有携带想要获取哪一个对象的资料,symmap网站可能返回的是默认某一对象的数据。
所以我们要研究请求数据需要携带什么参数。
2.查看网页源码
这里我们要获取的数据是如下图的table
了解一下点击Target时会发生什么响应
直接下载网页源码,然后在里面定位搜索该DOM标签的id,发现该点击事件中有一个函数change_browse()
于是乎研究下该函数的内容
这样阅读下来,了解到了发送请求的参数:
继续阅读,同时结合网页上的DOM元素定位,找到了data里面的三个key的值:
1)filter_type
这里是通过DOM标签的browse_select获取的,而这个值是用来做target基因的排序,筛选的
2)source_type
这个是通过DOM标签的req_name获取值的,而且这个值表示的是请求哪个对象,也就是哪个药草的id
3)browse_type
继续阅读源码不断搜索,browse_type=filter_text,而filter_text的值对应于该字典中,这个又是什么意思呢?其实这里就是symmap table上面的按钮,我们要的是target,对应的值就是字典里的Gene
3.后台请求
知道了对应三个参数的意义,我们就可以在后台进行数据爬取了
import requests
import json
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}
url='http://www.symmap.org/related_components/'
da={
'rrid':'SMHB00001',
'table_name':'Gene'
}
res = requests.post(url,headers=headers,data=da)
print(res.text)
这里我筛选获取其中三项,如下所示:
数值完全一样。