您当前的位置: 首页 > 快讯 > 详情

摸鱼笔记|基于Python爬虫和CAS号爬取化合物信息

2023-07-06 22:04:38 来源:哔哩哔哩

GC-MS

气相色谱质谱联用(Gas chromatography mass spectrometry, GC-MS)是广泛应用于环保行业、电子行业、纺织品行业、石油化工、香精香料行业、医药行业、农业及食品安全等领域;环境中有机污染物分析(空气、水质、土壤中污染分析);农残、兽残、药残分析;香精香料香气成分分析;纺织品行业中的有害物质检测。@气相色谱质谱联用仪_百度百科 ()

问题描述

GCMS测试反馈的数据不包含化合物的中文名和分子式,有的测试单位甚至不包含分子量等信息。为了更加直观的了解测试样品中化合物的分布,种类,还得手动根据CAS手动查询补全这些信息,然而手动查询实在折磨,故试着用Python爬虫来代劳!

通过Python爬虫查询特定的CAS号对应化合物的中文名,分子式的信息,并整理成表格。


(资料图片)

〓测试数据的形式与结构〓

把样品寄给测试单位,得到的数据表格反馈如图1:

以化合物编号列的计数,图1展示的是一组半。

每组化合物编号都对应了正好20组数据,并且在其组内以定性列数字从大到小排序。

这意味着不能完全确定对应的是哪种化合物,只能在定性栏注明可能性的高低。

此外面积(Ab*s)指的是质谱峰面积,此处我把峰面积的占比称为相对丰度,也要整理出来。

根据要求,我需要的是每组化合物的第一匹配项,也就是说我应该把图1中出现的两组化合物整理成图2格式。

然而,CAS:138781-42-7没有找到对应的中文名,就空着吧!

可见,只有中文名和分子式是从网上查来的,相对丰度是计算来的,其他项目都是直接从图1表格中搬来的。用Python来取代人工再合适不过了。

〓简而言之就是6步〓:

从图1表格中抽取每组化合物的第一行的面积(Ab*s)、匹配项名称、分子量、CAS号。

把步骤1中CAS号重复的整合成一项,但是该项面积(Ab*s)要加和起来。

算出各项面积在总面积中的占比,也就是峰面积占比,此处且称作相对丰度。

利用CAS号上网爬取对应化合物的介绍页面的网页源码。

从网页源码中遍历寻找中文名称和分子式。

将中文名称、匹配项名称(英文),分子式、分子量、CAS、相对丰度填表并保存。

〓其他格式的数据〓

不同测试机构可能给出的数据形式不太一样,比如图3就是另外一个测试机构给出的,文件形式不是表格,而是一个txt文本文件,每组化合物三个匹配项,只包含CAS号,峰面积占比(Area%),故需要多出一部从这样的文本中读取CAS号的操作,在爬虫时也需要多一步:爬分子量。但总体上来说差别不大!

Python代码

用到pandas、numpy、request、my_fake_useragent几个库。

〓步骤1-3的实现方式〓

从图1表格中抽取每组化合物的第一行的面积(Ab*s)、匹配项名称、分子量、CAS号。

把步骤1中CAS号重复的整合成一项,但是该项面积(Ab*s)要加和起来。

算出各项面积在总面积中的占比,也就是峰面积占比,此处且称作相对丰度。

这段是read()函数,该函数调用以下2个自定义函数:

relative_abundance(df)

delete_duplicates(df)

功能为读取图1所示的表格文件。完成问题描述中的1-3步。

返回一个一个有   ['化学名','分子量','CAS','相对丰度']   四列的Pandas DataFrame变量

〓步骤4-5的实现方式〓

利用CAS号上网爬取对应化合物的介绍页面的网页源码。

从网页源码中遍历寻找中文名称和分子式。

这段是gethtml()函数,该函数调用以下3个自定义函数:

delete_0(df)

get_name_chinese(html)

get_name_chinese1(html1)

完成问题描述中的4-5步

返回的是分子式和中文名的list变量

〓步骤6的实现方式〓

将中文名称、匹配项名称(英文),分子式、分子量、CAS、相对丰度填表并保存。

主函数main()调用read()、gethtml()、write(),最后将新表格保存在原路径。

最后实现的效果如图4,基本上CAS100开头的查不到,不晓得为什么。但是能交差就行。

标签:

下一篇: 最后一页
上一篇: 泉港区上半年电子商务网络零售额预计达10.78亿元
新华社华盛顿3月29日电(国际观察)美联储或加速加息对抗通胀引担忧新华社记者高攀 熊茂伶 许缘近期,美国联邦
人民网北京3月30日电 (记者夏晓伦)记者近日获悉,博鳌亚洲论坛2022年年会定于4月20至22日在海南博鳌举行,年会