c爬虫抓取网页数据(没有反爬虫机制的生物网站上如何利用Python做“省力”)
优采云 发布时间: 2021-12-23 03:03c爬虫抓取网页数据(没有反爬虫机制的生物网站上如何利用Python做“省力”)
我们可以用Python对一些没有反爬虫机制的生物做一些“省力”的事情网站,比如ID转换
我们以uniprot为例,进入它的转换页面入口,页面:
如果我有需要转换的ID,那么在对话框中输入转换即可。如果有很多,那么我们尝试通过计算机来解决它。
这里介绍Python库urllib,非常强大,可以爬取动态网页
所谓动态网页,并不是说页面会移动,是动态网页;这里的动态网页是指前后端(数据库)的接口,前后端的交互是通过表单来实现的。
按照这个思路,我们来看看网站的网页结构:
我们找到了对应的对话框,发现它的表单模型如图所示,然后根据urllib,我们设置一个参数,以字典的形式保存
import urllib.parse
import urllib.request
url = "https://www.uniprot.org/uploadlists/"
params = {
"from": "ACC+ID",
"to": "GENENAME",
# 返回结果的格式
"format": "tab",
"uploadQuery": 'p31946'
}
data = urllib.parse.urlencode(params)
data = data.encode('utf-8')
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as f:
response = f.read()
c_id = response.decode('utf-8')
print(c_id)
url是id转换的URL,params是你要爬取的内容,以字典的形式存储,那么字典的key值代表的是HTML表单(form)中name的内容:
例如来自:
字典的键值对应表单的名称标签内容
to 是一样的:
对于上传查询:
必须是对应表单的名称标签中的内容
至于“格式”:“tab”是指我们将抓取到的网页转换成tab格式
TAB是属性数据的表结构文件。属性数据表结构文件定义了地图属性数据的表结构,包括字段数、字段名称、字段类型和字段宽度、索引字段以及对应图层的一些关键空间信息的描述。TAB 文件实际上是一个文本文件,您可以在写字板中打开它来观察其内容。
当然,这个技巧适用于表单提交爬虫。如果爬取的内容太多,不妨写一个函数:
import urllib.parse
import urllib.request
url = "https://www.uniprot.org/uploadlists/"
def uniprot(id):
params = {
# 返回结果的格式
"format": "tab",
"from": "ACC+ID",
"to": "GENENAME",
"uploadQuery": id
}
data = urllib.parse.urlencode(params)
data = data.encode('utf-8')
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as f:
response = f.read()
c_id = response.decode('utf-8')
print(c_id)
参考:传送门