UiBot 使用数据抓取命令抓取不到数据网址该怎么办
多朋友在用UiBot的数据抓取命令抓取网网页的数据时,想获取A标签的href网址,但是网址的选项显示时灰色的,不让选择,就无法获取到网址,该怎么办呢?
下面以某动的商品页面为列,介绍下复杂场景下该如何获取A标签下的href网址。
首先我们打开京东手机页面,每一台手机图片下方都有对应的文字描述,我们使用UiBot“数据抓取”工具即可轻松抓取这些文本,如图:

点击上图中“数据抓取”对话框中的“确定”按钮,UiBot自动生成“数据抓取”命令,点击UiBot的“运行”按钮并输出结果,即可看到被抓取的文本。
但上图中,“链接”选项无法被勾选,UiBot只识别到我们选中的文本,而文本背后的链接没有被检测到,要解决该问题,我们需要了解一下网页的一些基本概念,目前我们所看到网页上的内容都是由元素组成的。例如:某一段文字、链接或者图片都称为元素,而这些元素都是用HTML代码(文本标记语言)来实现的,要看到这些代码很简单,以Chrome浏览器为例,只需要在元素上点击“右键->检查”即可在浏览器中看到相应的代码,如图:

在上图中,我们在一台手机的文字描叙上点击“右键->检查”,即可在右边的源代码窗口中看到该文字对应的HTML源代码,此时大家将鼠标移动到源代码上,网页中对应的元素也会高亮显示出来。
HTML中的大部分元素都是由“<>…</>”符号表示,例如:“<em>我是小米手机</em>”,其中<>内的em是元素的标签,不同的标签代表不同的元素类型,后面的</>符号则代表该元素到此结束,而中间部分则代表元素的具体内容。HTML中由很多类型的元素,这里就不逐一介绍,关于HTML知识,请参见相关教程,
从上图可以看出,文字对应的是一个标签名为“em”的元素,该元素的内容中只有文字,并没有相应的链接,但我们可以从该元素的父元素中找到我们需要的链接,所以只要让UiBot定位到该元素即可抓取到相应的链接。

弄清楚需要定位的元素后,我们回到UiBot中,找到“可视化”视图中的“数据抓取”命令,在该命令的属性区点击“元数据定义”属性的编辑按钮,弹出元数据编辑器,如图:

在元数据编辑器中修改“Columns->0->props->0”的值,将“text”改为“url”,即将抓取属性由文本改为链接,同时将元数据编辑器滚动到底部,可以看到UiBot最终定位到的元素标签为“em”,但需要定位的是它的父元素(a标签),所以直接取消最后一个元素即可。如图:

保存后再次运行流程,即可获取到文本相应的链接。

从上述案例可以看出,由于HTML元素之间可以重叠,无法通过鼠标选中我们需要的元素内容,这时就需要分析元素的结构,再到UiBot中修改元素的特征,最终才能精准的抓取到需要的内容。
另外在数据抓取时我们还要注意动态加载的网页,其数据的加载跟滚动条位置有关,例如上面提到的京东手机页面,当我们打开页面时可以看到一些手机展示在页面上,我们将浏览器滚动条继续往下拉,会发现此时页面下方会增加更多的手机,如果想要完整的抓取页面所有手机,则需要先使用UiBot将页面滚动到最底端,然后再进行数据的抓取。
当然,如何判断是页面是否已经滚动到最底端,需要我们根据目标页面的特性来进行判断,例如可以判断某个只会在页面最底端才会被加载的元素是否存在,不同的页面会有不同的判断方法,需要大家在开发时仔细观察。