一个例子带你入门影刀编码版(二)

摘要

将通过一个电商业务场景下的真实需求,带领大家零基础入门影刀编码版,本系列将会分三步讲解,从接到需求到最后完成发版,整个过程中我们需要做些什么?带你们走一个完整开发流程。

接上文《一个例子带你入门影刀编码版(一)》

本文主要讲解上文拆出的各个模块的实现,主要包含:

  • 打开网页,登录淘宝
  • 抓取总页数,循环
  • 抓取每一页信息

涉及内容主要包含:元素定位–>选中元素的属性–>与选中元素进行交互(点击,悬浮,填写等)
在这里插入图片描述

元素定位

浏览器 按F12 或选中一个页面元素鼠标右键检查
定位到元素后copy xpath,如果用其他方式可以选择对应路径,然后通过修改标签的属性去进行限制调整
更详细的知识请查阅前端资料了解下html的结构
在这里插入图片描述

店铺所有宝贝

涉及知识点:

  • 与网页建立交互
  • xpath定位(所有)元素
  • 元素点击
  • 元素属性
  • 循环判断
  • 影刀数据表格处理
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

    # webBrowser = login_info()
    # url = "https://gap.tmall.com/search.htm"
    # webBrowser.navigate(url)
    # 随机休眠避免反扒
    # sleep(random.uniform(2,3))
    # 避免重复开网页以及网页跳转,测试时直接激活当前网页即可
    webBrowser = xbot.web.get_active(mode="chrome")
    page_count = 0
    while True:
        all_id_elements = webBrowser.find_all_by_xpath('//div[@class="J_TItems"]/div')
        # print(len(all_id_elements))
        result = []
        for element in all_id_elements:
            if element.get_attribute("class")=="pagination":
                # print("到底了,点击下一页翻页")
                # break
                next_page_btn = element.find_by_xpath('//a[text()="下一页"]')
                # 判断下一页是否可用,不可用则到末尾页了
                next_page_btn_stau = next_page_btn.get_attribute("class")
                if next_page_btn_stau !="disable":
                    next_page_btn.click()
                break # 跳出当前循环

            else:
                # 获取每一组(一排5个)商品
                dl_elements = element.find_all_by_xpath("dl")
                for dl_element in dl_elements:
                    ID = dl_element.get_attribute("data-id")
                    ID_element = dl_element.find_by_xpath('dt/a/img')
                    ID_title = ID_element.get_attribute("alt")
                    ID_main_pic = ID_element.get_attribute("src")
                    print([ID,ID_title,ID_main_pic])
                    result.append([ID,ID_title,ID_main_pic])
            page_count+=1
            print(f"第{page_count}页抓取完成!")
        if next_page_btn_stau =="disable":
            break # 跳出所有循环
     # 影刀的数据表格处理
     # 对于apI路径:xbot->app->databook 
     # 写入前先清空
    xbot.app.databook.clear()
    # 数组插入数据表格
    xbot.app.databook.set_range(1,1,result)
    # 数据表格导出到对应文件路径
    xbot.app.databook.export_data("GAP全店商品明细.xlsx")

单个宝贝详细信息

  • 点击跳转,句柄切换
  • 输入表单提交
  • 网页元素处理
  • xpath多种定位方法
    在这里插入图片描述
# 输入表单提交
    # 避免重复开网页以及网页跳转,测试时直接激活当前网页即可
    webBrowser = xbot.web.get_active(mode="chrome")

    # 第一次做这个案例时用的python 当时taobao还可以搜ID
    # 现在搜不了,这里还是提一下输入表单提交吧,就用第一个的关键词欧阳娜娜同款搜吧
    # 其实和其他处理一样,python会复杂一些,影刀里面就简单很多
    # 定位到要输入框
    input_element = webBrowser.find_by_xpath('//*[@id="mq"]')
    # 输入内容
    input_element.input("欧阳娜娜同款")
    # 提交搜索
    submit_btn = webBrowser.find_by_xpath('//*[@id="J_CurrShopBtn"]')
    submit_btn.click()

 # 避免重复开网页以及网页跳转,测试时直接激活当前网页即可
    # webBrowser = xbot.web.get_active(mode="chrome")
    # main_title = webBrowser.get_title()
    # # # 用第一个商品测试
    # ID_element = webBrowser.find_by_xpath('//dl[@data-id="734979928111"]')
    # ID_element.click()
    # 这里跳转后Python需要获取句柄进行切换
    # 影刀可以直接用get_active进行切换,或者get_title也行,因为不知道每一页商品的title,所以用get_active最好
    # 其实这个title就是商品的title
    # 但是要切换回来应该用get_title,因为你的主网页的title是固定的
    webBrowser= xbot.web.get_active(mode="chrome")
    # print(webBrowser.get_url())# 验证下是否切进来
    
    # 获取商品标题
    TITLE = webBrowser.find_by_xpath('//h1[contains(@class,mainTitle)]').get_text()
    active_price = webBrowser.find_all_by_xpath('//span[contains(@class,"Price--priceText")]')[0].get_text()
    discounts = webBrowser.find_by_xpath('//span[text()="优惠:"]/../span[contains(@class,"caption")]').get_attribute("title")
    active = webBrowser.find_by_xpath('//span[text()="活动:"]/../span[contains(@class,"caption")]').get_attribute("title")
    item_infos = webBrowser.find_by_xpath('//span[text()="宝贝参数:"]/..').get_text()
    print(TITLE,active_price,discounts,active,item_infos)
    # 关闭当前页
    # webBrowser.close()
    # 切回搜索页
    # webBrowser = xbot.web.get(main_title,mode="chrome")
    pass

相关链接

【1】.影刀自动化采集底层逻辑
【2】.一个例子带你入门影刀编码版(一)
【3】.一个例子带你入门影刀编码版(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 进制压缩编码是一种将数据编码进制形式的方法,以减小数据的大小。 举个例子: 假设我们有一个字符串 "ABABAB",如果我们按照 ASCII 编码,每个字符将占用 7 位进制位。但是,在这个字符串中,"A" 和 "B" 重复出现了多次,我们可以使用进制压缩编码来减小存储空间。 例如,我们可以使用一个字典,其中 "A" 对应为 0,"B" 对应为 1,然后我们可以将字符串 "ABABAB" 编码进制序列 "001101"。这样,我们就可以将存储的数据大小从 42 位进制位减小到 6 位进制位,节约了大量的存储空间。 ### 回答2: 进制压缩编码是一种将数据压缩为较短的进制编码的方法,以减少存储空间和传输成本。 假设有一段原始文本:"AAAAABBBBCCCCDDDDDD"。在进制压缩编码中,我们可以使用一种称为Run-Length Encoding(RLE)的算法来压缩数据。 RLE算法是将连续出现的相同字符进行压缩。对于上述的原始文本,RLE算法会将连续出现的字符以数字和字符的形式表示。例如,原始文本中有5个连续的"A",则可以将其表示为"5A"。 因此,经过RLE算法压缩后的结果为:"5A4B4C6D"。这样,原始文本的长度从16个字符减少为8个字符。可以看出,通过使用进制压缩编码,我们成功地将数据压缩了一半,节省了存储空间。 在解压缩时,我们可以通过读取压缩后的编码,将数字与字符展开为原始的文本。根据上述的例子,通过解压缩将"5A4B4C6D"还原为"AAAAABBBBCCCCDDDDDD"。 进制压缩编码在计算机科学和信息技术领域广泛应用,例如在文件压缩、图像压缩和网络传输中都有着重要的作用。它可以大幅度减少存储需求和网络传输时间,提高数据处理和传输的效率。 ### 回答3: 进制压缩编码是一种将数据转换为进制形式以减少其存储空间或传输所需的方法。下面是一个例子来说明这个过程:假设我们有一个包含每个英文字母的消息,我们可以用ASCII码表示。 例如,我们有一个消息:“Hello World”。根据ASCII表,每个字符可以用一个8位进制数字来表示。因此,“H”可以用01001000来表示,“e”用01100101来表示,“l”用01101100来表示,“o”用01101111表示,“W”用01010111来表示,依次类推。 在原始ASCII编码中,该消息占用11个字符,即88个进制位。然而,我们可以通过进制压缩编码将其进一步减少存储空间。 一种常用的压缩编码方法是霍夫曼编码。在霍夫曼编码中,频率较高的字符使用较短的编码表示,而频率较低的字符使用较长的编码表示。 使用霍夫曼编码,我们可以将每个字符重新映射为一个更短的进制序列。例如,我们可能得到如下的霍夫曼编码映射:H-110,e-10,l-00,o-01,W-111。将此霍夫曼编码应用于我们的消息,我们得到的压缩编码后的结果是110 010 10 011 011 011 111 00 011 01。 通过压缩编码,我们将原始消息压缩成了30个位。这样,我们仅需要存储或传输30位数据,相对于原来的88位,节省了大约66%的空间。 当接收方接收到这个压缩的编码数据时,他们可以使用相同的解码规则将其解压缩回原始消息,“Hello World”。这里只是简单的示例,实际的压缩编码算法复杂得多,但这个例子希望能够说明进制压缩编码的基本原理和过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诡途

你的鼓励是我 创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值