主题:【第十六届原创】旁门左道:批量下载化合物结构式

浏览0 回复11 电梯直达
姜川
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
维权声明:本文为Insm_2319aa93原创作品,本作者与仪器信息网是该作品合法使用者,该作品暂不对外授权转载。其他任何网站、组织、单位或个人等将该作品在本站以外的任何媒体任何形式出现均属侵权违法行为,我们将追究法律责任。

旁门左道:批量下载化合物结构式






1 项目描述

本项目实现了利用化合物CAS编号从爱化学(ichemistry.cn)网站查询化合物信息并下载相对应的化合物结构式,然后将其导入到Excel文件中,以便打印和随时阅读。如图所示:

图1 结果实例



2 功能要求

2.1 批量读取excel文件中的数据

2.2 根据CAS号码批量下载化合物的结构式的.png或.gif图片

2.3 将图片批量插入数据表格中

3 功能实现

3.0 使用之前开发的批量获取PDF文件中的表格数据获取对应的表格信息,使用pandas对数据进行清洗,保存到excel文件中。详细信息请了解:旁门左道:如何一键提取pdf文档中的全部表格https://bbs.instrument.com.cn/topic/8245597_1_1_2_1_1




3.1 使用pandas对excel数据导入,这里导入已经经过清洗后的数据。


图2


3,2 使用requests构建URL并对URL发起请求,获取图片的SRC。

图3



3.3 使用requests下载图片的SRC的内容,并写入对应的图片文件。这里的图片文件名称使用cas编号直接命名,防止重名。

图4



3.4 使用openpyxl,读取excel文件并批量将图片插入CAS编号对应的单元格。

图5



3.5 使用excel中的嵌入指令将图片嵌入到单元格(非必须,也可以选择浮在单元格上方)




图6



4 使用方法

4.1 代码的使用需要有简单的python基础。

4.2 先展示代码的部分,水一篇帖子。需要的人多的话,会做成桌面小程序。

5 项目总结

在有机分析人员日常工作中,经常需要了解化合物的结构式,以便观察其功能基团,结构,极性等,这个demo主要解决上述问题。

这个demo的代码部分主要使用了openpyxl、requests、pandas对数据和图片进行处理、请求、下载等操作,最终实现一个完整的功能。

遇到的困难和核心难点主要有:

* 删除数据中的空值行和含有特定字符的行(数据清洗)。

* 请求网站的选择需要注意,测试了多个网站,目前爱化学比较稳定但速度较慢,估计是没钱租服务器了。

* 对于未找到图片的化合物下载的问题(目前未解决)。

* 图片批量导入只能执行一次,避免重复导入。

* 直接嵌入单元格图片的功能仍未实现

* 没有做单元格高度和宽度的调整


6 成果展示

图7

旁门左道系列:

《旁门左道:如何一键提取PDF文档中全部表格》https://bbs.instrument.com.cn/topic/8245597

《旁门左道:如何批量提取坛墨质检标准物质证书》https://bbs.instrument.com.cn/topic/8246943_1_3_1_1_2

该帖子作者被版主 zyl336789820积分, 2经验,加分理由:原创有奖
为您推荐
专属顾问快速对接
获取验证码
立即提交
xx_dxd_xx
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
不错的想法。不过要防止代码被奸商拿去滥用。有些人用代码把别人整个网站的数据都抓过来,然后打包卖钱。我在闲鱼上看到过这种
姜川
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 xx_dxd_xx(xx_dxd_xx) 发表:
不错的想法。不过要防止代码被奸商拿去滥用。有些人用代码把别人整个网站的数据都抓过来,然后打包卖钱。我在闲鱼上看到过这种
这代码稍微动点心思就编出来了,应该不难吧。不过爱化学的服务器本来就不太行,这样会爬崩了啊zzzzzzzz
yifan1117
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
zyl3367898
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
许之秦
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
有的化合物会有两个CAS号,这个在命名图片时候有处理方法么
123
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
m3316431
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
姜川
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 许之秦(xianshijiyi) 发表:
有的化合物会有两个CAS号,这个在命名图片时候有处理方法么


目前已登记的化合物和cas编号是一一对应的。不过在日常的工作中经常会出现多个物质共出的情况,比如间二甲苯+对二甲苯, 对应的cas号码分别108-38-3,106-42-3。可以用正则匹配进行判断。

图1



这个函数的返回一个列表,通过遍历cas列,通过列表长度可以判断该行的化合物对应几个cas号码,如果是1个,则按照正常处理。其他则按照异常处理。在异常处理中,可以下载第一个cas的结构式,并以此命名。在导入到excel的过程中,可以通过isin()函数确定cas是否在对应的单元格的行。

图2


图3


通过新增观察列,即新增列表长度列,再结合pandas的筛选功能,即可将异常列的数据筛选出来。不过如果这种异常值不多的话,只要代码能跑通。不处理也没关系。



赞贴
2
收藏
0
拍砖
0
2023/8/24 8:46:07 Last edit by Insm_2319aa93
许之秦
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
原文由 姜川(Insm_2319aa93) 发表:

目前已登记的化合物和cas编号是一一对应的。不过在日常的工作中经常会出现多个物质共出的情况,比如间二甲苯+对二甲苯, 对应的cas号码分别108-38-3,106-42-3。可以用正则匹配进行判断。

图1



这个函数的返回一个列表,通过遍历cas列,通过列表长度可以判断该行的化合物对应几个cas号码,如果是1个,则按照正常处理。其他则按照异常处理。在异常处理中,可以下载第一个cas的结构式,并以此命名。在导入到excel的过程中,可以通过isin()函数确定cas是否在对应的单元格的行。

图2


图3


通过新增观察列,即新增列表长度列,再结合pandas的筛选功能,即可将异常列的数据筛选出来。不过如果这种异常值不多的话,只要代码能跑通。不处理也没关系。



不错不错,期待楼主更多优秀想法
liangzi0312
结帖率:
100%
关注:0 |粉丝:0
新手级: 新兵
猜你喜欢 最新推荐 热门推荐
品牌合作伙伴