我们在购物网站浏览商品时,通常可以有多种组合的购买,对同一个商品选择颜色、尺码等等,会得到不同的价格。那么,如果把人的点击行为变成机器自动点击,要如何实现呢?
通过连续动作能够模拟人在浏览网页时的操作,从而逐个点击进行数据抓取。现在不少动态网页需要交互操作,才能浏览到最终数据,而连续动作的目的就是模拟人在浏览网页时的操作,从而得到最终显示出来的数据。
要模拟人的操作,我们首先要清楚是经过哪些交互操作才能显示出最终数据。例如浏览京东上小米Max的商品页面,我们是依次选择颜色、版本、购买方式1、购买方式2后,才能看到最终价格的,所以,按这个操作的话,要设置4步动作,这里的动作类型都是点击,明确了这些以后,下面教大家用MS谋数台的连续动作来做规则,实现自动点击。
根据上面的描述,有以下两种采集方案,下面我们采用方案1来实现自动点击和采集。
样本网址:https://item.jd.com/2897526.html
注意:如果动作执行前后的网页结构没有变化,可以用一个规则来完成;网页结构前后变化的话,必须用两个或以上的规则来完成;另外涉及翻页的话,也要拆成两个或以上的规则。关于连续动作要做多少个规则请查阅文章《规划采集流程》。
一、建立第一级主题抓取目标信息
建立第一级主题的规则,把想要的信息映射到整理箱中,建议做完内容映射后,也做上定位标志映射,可以提高定位准确性和规则适应性。
注意:设置了连续动作的规则可以不建整理箱,例如方案2的第一级主题可以不建整理箱,但是用整理箱抓一点数据(选择网页上一定会显示出来的信息),是为了给爬虫判断是否执行采集,否则可能漏采网页。
如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地
二、设置连续动作
点击新建按钮建立一个新动作,每个动作的设置方法都是一样,基本操作如下:
2.1 输入目标主题名
连续动作指向的是同一个目标主题。如果有多个动作,并且要指向不同的主题,请拆成多个规则分别设置连续动作。
2.2 选择动作类型
本案例是点击动作,不同动作的适用范围是不同的,请根据实际的操作情况来选择动作类型。
2.3 把定位到动作对象的xpath填入到定位表达式中
- 请明确动作对象的操作范围和数量,操作范围是指鼠标点选的有效范围,数量是指网页上可以施加该步骤动作的对象数量。
- 编写xpath定位到该步骤动作对象的节点,这里的节点要覆盖动作对象的全部有效操作范围。
- 校验xpath是否能准确定位到动作对象的操作范围和数量。把xpath填入到xpath搜索框中,再点击搜索按钮,可以统计网页节点的数量以及逐个查看。
- 这里的xpath支持相对路径和绝对路径,但是不要定位到最底层的节点,例如text()、属性节点等,否则就不是全部的操作范围。
2.4 输入动作名称
告诉自己这一步动作是用来干嘛的,方便以后修改。
2.5 高级设置
最初可以不设置,后面调试连续动作时会用到,可以扩大动作的适用范围。如需把动作对象的信息也抓下来,就在高级设置的内容表达式中用xpath定位到动作对象的信息来实现,请根据需要再来设置。
注意:动作类型是否选对以及xpath是否定位准确,决定了连续动作能否执行成功。Xpath是标准的用于定位html节点的语言,请自行掌握xpath后再来使用连续动作的功能。
按照人的操作步骤,还要选择版本、购买方式1、购买方式2,所以,我们还要继续新建3个动作,重复以上步骤。
三、调试规则
完成以上步骤后,点击保存规则,再点击爬数据按钮进行试抓。发现采集时报错:无法定位到节点***,观察浏览器窗口,看到执行完第一步点击时,其他信息都没加载上来,等到信息都加载上来,又发现点击了购买方式2后,就无法回退到执行4步点击的页面,这就导致连续动作无法连贯执行。
针对上面的情况,我们的解决方法是删掉第4步动作。因为无论是否点击购买方式2,都不影响商品价格。所以,可以删掉没必要且造成干扰的动作步骤。
修改后再次试抓,把提取到的xml转为excel后,看到价格和累计评价的数据抓漏或抓错了。这是因为网页太大,加载比较慢,点击后的数据要等待一定时间才能加载完成。
为了抓全数据,需要延长等待时间,给每个动作单独设置延时,点击动作步骤->高级设置->额外延时,输入正整数,单位是秒。输入的时间请根据实际调试。
另外,如果不是置顶窗口,采集时会循环点击。这是因为京东网页上有反爬措施,必须为当前窗口的操作才会生效。所以,要在高级设置上勾上窗口可见,采集时窗口会置顶。请根据实际情况进行设置。
四、如何把抓到的信息与动作步骤一一对应?
如果希望把抓到的信息与动作步骤一一对应起来,这样就得把动作对象的信息也提取下来,有以下两种方法:
4.1 在连续动作的高级设置的内容表达式中用xpath定位到动作对象的信息节点。
在定位表达式已经定位到动作对象的整个操作范围,也包括其本身的信息,所以,内容表达式只需从定位到的动作对象为起点,继续定位到其信息就行。采集时就会把该步动作的信息记录在actionvalue中,与之对应的是actionno,记录的是该步动作执行的次数。
4.2 在整理箱中抓取动作对象的信息,这里同样要用xpath来定位。
动作对象被执行时,其dom结构是有变化的,找到网页变化的结构特征,用xpath准确定位到节点,通过校验后,就可以设置自定义xpath。
以上就是利用连续动作,模拟人工操作的全部过程,虽然过程比较繁琐,但是只要细心+耐心,最终都能攻克你想要爬取的网页。
网友评论