文章结构
- 摘要
- 需求分析
- 伪代码编写
- 代码实现
- 完整代码
- 相关链接
摘要
将通过一个电商业务场景下的真实需求,带领大家零基础入门影刀编码版,本系列将会分三步讲解,从接到需求到最后完成发版,整个过程中我们需要做些什么?带你们走一个完整开发流程。
需求分析
需求说明:需要获取指定商家的所有在售商品的详细信息,并解析详情页信息。
需求拆解:
如下图所示,
伪代码编写
如上图,需要登录才会显示商品
结合上文影刀自动化采集底层逻辑
的采集基础流程,先和浏览器建立交互,登录淘宝,逐个采集每个商品信息
伪代码如下
打开网页
登录淘宝
抓取总页数
for 循环 页数:
抓取每一页信息
{
# 抓取每一页信息需要实现
抓取标题、到手价、优惠活动信息,宝贝参数等
}
代码实现
先使用影刀实现浏览器的交互,打开网页,登录淘宝
# 第一步 影刀中与浏览器建立联系的三种方法,具体参数定义可以参考函数解释,重点参数mode:选择浏览器,默认影刀浏览器
# 三种不同用法的区别
# 主要功能一致:通过与指定浏览器建立链接返回窗口句柄给影刀,赋值webBrowser,后面所有基于网页的操作都要通过这个网页对象webBrowser
# 不同的是
# create:创建,需要给出url,通过在浏览器中新打开一个窗口指向url地址
# get:通过窗口标题获取符合标题的窗口,不会执行打开跳转,需要提前手动打开
# get_active:获取当前激活的窗口句柄,即你切换进影刀之前的鼠标所在窗口
webBrowser = xbot.web.create("www.taobao.com",mode="chrome")
# webBrowser = xbot.web.get("淘宝",mode="chrome")
# webBrowser = xbot.web.get_active(mode="chrome")
# 看个人习惯,以及应用场景,常用create,这里我们选择create
webBrowser = xbot.web.create("www.taobao.com",mode="chrome")
# webBrowser = xbot.web.get("淘宝",mode="chrome")
# webBrowser = xbot.web.get_active(mode="chrome")
# 与网页建立交互的方式如下图,都在xbot -> web ->WebElement下,具体方法可以查看说明
# 我个人比较常用的就是find_by_xpath (找一个元素) --》对应的find_all_by_xpath(找符合条件的所有元素)
# 这里说明一下:影刀与Python的区别,selenium支持找一个(默认第一个)影刀不支持,会报错,如果用find_by_xpath,必须保证限定条件下只能找到一个
# 这里用find_all_by_xpath 主要是分析网页发现,登录前和登录后这个element是存在与不存在的关系
# 所以通过能不能找到来判断你是否登录了
user_name_elements = webBrowser.find_all_by_xpath('//div[@class="site-nav-user"]/a',timeout=3)
if not len(user_name_elements):
# 通过提示框阻断程序继续执行,手动登录后再继续,关于提示框会有很多类型,参考官方APi
# API路径在 xbot ->app ->dialog
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()
# print(user_name)
return True
完整代码
# 今天的讲解就先到这里了,第一部分登录模块已经实现了
# 后面继续每个模块的实现
def login_info():
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 True
相关链接
【1】.影刀自动化采集底层逻辑
【2】.一个例子带你入门影刀编码版(二)
【3】.一个例子带你入门影刀编码版(三)