仪器信息网APP
选仪器、听讲座、看资讯

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

  • 姜川
    2023/08/23
    Chromcycle
  • 私聊

气相色谱(GC)

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






    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

  • 该帖子已被版主-zyl3367898加20积分,加2经验;加分理由:原创有奖
    +关注 私聊
  • xx_dxd_xx

    第1楼2023/08/23

    不错的想法。不过要防止代码被奸商拿去滥用。有些人用代码把别人整个网站的数据都抓过来,然后打包卖钱。我在闲鱼上看到过这种

3
    +关注 私聊
  • 姜川

    第2楼2023/08/23

    这代码稍微动点心思就编出来了,应该不难吧。不过爱化学的服务器本来就不太行,这样会爬崩了啊zzzzzzzz

    xx_dxd_xx(xx_dxd_xx) 发表:不错的想法。不过要防止代码被奸商拿去滥用。有些人用代码把别人整个网站的数据都抓过来,然后打包卖钱。我在闲鱼上看到过这种

3
    +关注 私聊
  • yifan1117

    第3楼2023/08/23

    厉害,可以试试。

1
    +关注 私聊
  • zyl3367898

    第4楼2023/08/23

    应助达人

    很实用的工具,楼主是个高手。

2
    +关注 私聊
  • 许之秦

    第5楼2023/08/23

    应助工程师

    有的化合物会有两个CAS号,这个在命名图片时候有处理方法么

2
    +关注 私聊
  • 123

    第6楼2023/08/24

    应助达人

    谢谢分享!

2
    +关注 私聊
  • m3316431

    第7楼2023/08/24

    非常实用,期待更多好的作品

2
    +关注 私聊
  • 姜川

    第8楼2023/08/24

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

    图1



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

    图2


    图3


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



    许之秦(xianshijiyi) 发表:有的化合物会有两个CAS号,这个在命名图片时候有处理方法么

2
    +关注 私聊
  • 许之秦

    第9楼2023/08/24

    应助工程师

    不错不错,期待楼主更多优秀想法

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

    图1



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

    图2


    图3


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



0
    +关注 私聊
  • liangzi0312

    第10楼2023/08/25

    感谢分享……

0
查看更多
举报帖子

执行举报

点赞用户
好友列表
加载中...
正在为您切换请稍后...