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

时间:2023-07-06 22:04:48 来源: 哔哩哔哩

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开头的查不到,不晓得为什么。但是能交差就行。

标签:

相关文章

社会面清零后第十天,三问吉林省复工复产怎样了

新华社长春4月23日电 题:社会面清零后第十天,三问吉林省复工复产怎样了 新华社记者段续、张建、赵丹丹...

来源:2022-04-24

青海海北州门源县发生3.9级地震 震源深度10千米

4月23日电 据国家地震台网官方微博消息,中国地震台网正式测定:04月23日22时07分在青海海北州门源县(...

来源:2022-04-24

山西太原万柏林区报告1例无症状感染者 公布行程轨迹

(抗击新冠肺炎)山西太原万柏林区报告1例无症状感染者 公布行程轨迹 太原4月23日电 (记者 李新锁)山西...

来源:2022-04-24

上海战疫:从严从重从快查处食品安全违法行为

(抗击新冠肺炎)上海战疫:从严从重从快查处食品安全违法行为 上海4月23日电 (记者 许婧)近日,上海出现...

来源:2022-04-24

杭州本轮疫情已发现98例阳性感染者 有进一步扩散可能

杭州4月23日电(张煜欢 崔倩娴)23日,记者从杭州市新冠肺炎疫情防控工作新闻发布会上获悉,截至23日18时...

来源:2022-04-24

精彩推送

X 关闭

X 关闭