分享一款懒人必备的Python爬虫神器!

前言

今天把最近的一个应用做好了,测试了一下运行没有问题,剩下的就是检验一下结果如何.从光谱到Lab值通常使用matlab中的roo2lab(),不过经过我最近的测试发现转换的结果并不理想,而且这个转化的代码也不是我写的所以另寻他法,找到了下面这个网页。
在这里插入图片描述

动手

有了这个网页,很简单就想到去解析.然后很快找到了这个api,可以看到用post提交表单请求就可以返回结果

在这里插入图片描述

于是一番操作,修改form表单,构造传入的spectrum,但是最终请求得到的却是一个页面,并不是想要的json.然后许久没写爬虫的我直接恼火,想到自动化工具模拟操作.可是selenium很难用而且还得去找浏览器新版本的驱动,随后直接搜索一番,发现了这个神器—playwright。

首先老规矩去它的首页看看教程

在这里插入图片描述

接着安装一下playwright以及浏览器的驱动

pip install pytest-playwright
playwright install

第二步的时候很慢,所以我只等他下载好了chrome和ffmpeg直接就ctrl+c停止了,毕竟我也用不着其他的浏览器驱动。

然后稍微浏览一下这个文档功能非常丰富,不过我用到的功能也不多,接下来的使用才是真正适合我们懒人的.

记住一行代码

python -m playwright codegen xxx.com

其中xxx.com就是我们的目标网址,运行后会创建一个熟悉的自动化页面,然后我们就进行一些我们想要的操作,比如设置开始的最小波长为400nm,然后观察以及光源改为D65/10.一系列操作后会看到对应的代码已经生成好了

在这里插入图片描述

至今为止我还没有写一行代码,不过构造输入的光谱还是得自己来的

把这一段代码复制下来,然后自己写构造输入的函数(就几行),然后通过选择器(直接左键元素复制xpath)得到lab值,这样目标就搞定了

整体代码如下

import time
from playwright.sync_api import Playwright, sync_playwright, expect
import numpy as np

data_test=np.loadtxt('./dist/1_res.csv',delimiter=',')

def get_str(arr):
    arr_str=""
    for i in arr:
        arr_str+=str(format(i,".2f"))+"\r\n"
    return arr_str

labs=[]

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://www.qtccolor.com/secaiku/tool/spectrum
    page.goto("https://www.qtccolor.com/secaiku/tool/spectrum")

    # Click div[role="tab"]:has-text("光谱数据")
    page.locator("div[role=\"tab\"]:has-text(\"光谱数据\")").click()

    # Click text=最小波长:nm
    page.locator("text=最小波长:nm").click()

    # Fill [placeholder="\33 80"]
    page.locator("[placeholder=\"\\33 80\"]").fill("400")

    # Select 1964
    page.locator("select[name=\"obs\"]").select_option("1964")

    # Select D65
    page.locator("select[name=\"ill\"]").select_option("D65")
    # Fill textarea[name="spectrum"]
    for i in range(len(data_test)):
        inputs=get_str(data_test[i,:])
        # Click textarea[name="spectrum"]
        page.locator("textarea[name=\"spectrum\"]").click()
        page.locator("textarea[name=\"spectrum\"]").press("Control+a")
        page.locator("textarea[name=\"spectrum\"]").fill(inputs)

        # Click button:has-text("转换颜色")
        page.locator("button:has-text(\"转换颜色\")").click()
        time.sleep(1)
        # Click text=Lab0.000.000.00 >> td >> nth=1
        L=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[2]').inner_text())
        # Click text=Lab0.000.000.00 >> td >> nth=2
        a=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[3]').inner_text())
        # Click text=Lab0.000.000.00 >> td >> nth=3
        b=float(page.locator('xpath=//*[@id="scroll_container"]/div[1]/div/div[2]/table/tbody/tr[2]/td[4]').inner_text())
        print(L,a,b)
        labs.append([L,a,b])
    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)
    np.savetxt('./1_lab_res.csv',labs,delimiter=",")

可以说从安装到实现就几分钟,而且特别容易上手,我第一次用也一下就能实现效果

在这里插入图片描述
剩下的就是简单的写个函数计算色差啥的就没难度了.

最后

如果你对Python技术比较感兴趣,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,整理不易,请多多点赞分享哦~

微信扫描下方CSDN官方认证二维码即可领取

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述

三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值