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

2023-12-13 15:12
文章标签 入门 编码 例子 影刀

本文主要是介绍一个例子带你入门影刀编码版(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章结构

  • 摘要
  • 代码整合思路
  • 代码整合设计

摘要

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

接前文
《影刀自动化采集底层逻辑》
《一个例子带你入门影刀编码版(一)》
《一个例子带你入门影刀编码版(二)》

代码整合思路

前面从需求拆分到模块,把每个模块都实现了,下面把每个模块组合起来封装成可执行程序,前面为了帮大家把基本功能都过一遍,有一些冗余,封装时候会考虑去掉

精简后代码结构规划:

  • 主流程调用
    • 分两个,抓全店在售ID
    • 按ID去转宝贝详情信息

设计思路和原理

  • 从业务场景出发,这可以是两个独立需求,一是我想要知道在售商品有哪些,一个是我想知道某些宝贝的具体信息,比如Top款、指定类目等
  • 从开发角度出发,每个宝贝详情页都是一个独立页面,且有固定规律,我直接用URL跳转可以减少大量窗口切换工作,一方面可以一定程度上避免反爬,另一方面可以增强代码健壮性

代码整合设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# modul1.py
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import randomdef login_info():"""登录验证@ return: webBrowser 网页对象"""webBrowser = xbot.web.create("www.taobao.com",mode="chrome")user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a',timeout=3)if not  len(user_name_elements):xbot.app.dialog.show_message_box("提示","请先登录您的个人淘宝账号")user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a')user_name = user_name_elements[0].get_text()return webBrowserdef get_all_IDs():webBrowser = login_info()page_count = 0while 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("到底了,点击下一页翻页")# breaknext_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+=1print(f"第{page_count}页抓取完成!")if next_page_btn_stau =="disable":break # 跳出所有循环xbot.app.databook.clear()xbot.app.databook.set_range(1,1,result)xbot.app.databook.export_data("GAP全店商品明细.xlsx")def main(args):pass
# module2.py
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from .module1 import *def get_one_id_info(webBrowser):# 获取商品标题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()return TITLE,active_price,discounts,active,item_infosdef get_all_ids_info(data_path,explort_dir):IDs = pd.read_excel(data_path)["商品ID"].values()webBrowser = login_info()result = []count = 0for ID in IDs:url = f"https://detail.tmall.com/item.htm?id={ID}"webBrowser.navigate(url)try:TITLE,active_price,discounts,active,item_infos= get_one_id_info(webBrowser)result.append([ID,"执行成功",TITLE,active_price,discounts,active,item_infos])except:result.append([ID,"执行失败"])count+=1if count >=3:breakdf_result = pd.DataFrame(result,columns={"商品ID","执行状态","商品名称","活动价","优惠","活动","商品详细信息"})df_result.to_excel(os.path.join(explort_dir,"商品信息.xlsx"),index=False)
def main(args):pass

这篇关于一个例子带你入门影刀编码版(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488923

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚