UiBot 使用數(shù)據(jù)抓取命令抓取不到數(shù)據(jù)網(wǎng)址該怎么辦
多朋友在用UiBot的數(shù)據(jù)抓取命令抓取網(wǎng)網(wǎng)頁(yè)的數(shù)據(jù)時(shí),想獲取A標(biāo)簽的href網(wǎng)址,但是網(wǎng)址的選項(xiàng)顯示時(shí)灰色的,不讓選擇,就無法獲取到網(wǎng)址,該怎么辦呢?
下面以某動(dòng)的商品頁(yè)面為列,介紹下復(fù)雜場(chǎng)景下該如何獲取A標(biāo)簽下的href網(wǎng)址。
首先我們打開京東手機(jī)頁(yè)面,每一臺(tái)手機(jī)圖片下方都有對(duì)應(yīng)的文字描述,我們使用UiBot“數(shù)據(jù)抓取”工具即可輕松抓取這些文本,如圖:

點(diǎn)擊上圖中“數(shù)據(jù)抓取”對(duì)話框中的“確定”按鈕,UiBot自動(dòng)生成“數(shù)據(jù)抓取”命令,點(diǎn)擊UiBot的“運(yùn)行”按鈕并輸出結(jié)果,即可看到被抓取的文本。
但上圖中,“鏈接”選項(xiàng)無法被勾選,UiBot只識(shí)別到我們選中的文本,而文本背后的鏈接沒有被檢測(cè)到,要解決該問題,我們需要了解一下網(wǎng)頁(yè)的一些基本概念,目前我們所看到網(wǎng)頁(yè)上的內(nèi)容都是由元素組成的。例如:某一段文字、鏈接或者圖片都稱為元素,而這些元素都是用HTML代碼(文本標(biāo)記語(yǔ)言)來實(shí)現(xiàn)的,要看到這些代碼很簡(jiǎn)單,以Chrome瀏覽器為例,只需要在元素上點(diǎn)擊“右鍵->檢查”即可在瀏覽器中看到相應(yīng)的代碼,如圖:

在上圖中,我們?cè)谝慌_(tái)手機(jī)的文字描敘上點(diǎn)擊“右鍵->檢查”,即可在右邊的源代碼窗口中看到該文字對(duì)應(yīng)的HTML源代碼,此時(shí)大家將鼠標(biāo)移動(dòng)到源代碼上,網(wǎng)頁(yè)中對(duì)應(yīng)的元素也會(huì)高亮顯示出來。
HTML中的大部分元素都是由“<>…</>”符號(hào)表示,例如:“<em>我是小米手機(jī)</em>”,其中<>內(nèi)的em是元素的標(biāo)簽,不同的標(biāo)簽代表不同的元素類型,后面的</>符號(hào)則代表該元素到此結(jié)束,而中間部分則代表元素的具體內(nèi)容。HTML中由很多類型的元素,這里就不逐一介紹,關(guān)于HTML知識(shí),請(qǐng)參見相關(guān)教程,
從上圖可以看出,文字對(duì)應(yīng)的是一個(gè)標(biāo)簽名為“em”的元素,該元素的內(nèi)容中只有文字,并沒有相應(yīng)的鏈接,但我們可以從該元素的父元素中找到我們需要的鏈接,所以只要讓UiBot定位到該元素即可抓取到相應(yīng)的鏈接。

弄清楚需要定位的元素后,我們回到UiBot中,找到“可視化”視圖中的“數(shù)據(jù)抓取”命令,在該命令的屬性區(qū)點(diǎn)擊“元數(shù)據(jù)定義”屬性的編輯按鈕,彈出元數(shù)據(jù)編輯器,如圖:

在元數(shù)據(jù)編輯器中修改“Columns->0->props->0”的值,將“text”改為“url”,即將抓取屬性由文本改為鏈接,同時(shí)將元數(shù)據(jù)編輯器滾動(dòng)到底部,可以看到UiBot最終定位到的元素標(biāo)簽為“em”,但需要定位的是它的父元素(a標(biāo)簽),所以直接取消最后一個(gè)元素即可。如圖:

保存后再次運(yùn)行流程,即可獲取到文本相應(yīng)的鏈接。

從上述案例可以看出,由于HTML元素之間可以重疊,無法通過鼠標(biāo)選中我們需要的元素內(nèi)容,這時(shí)就需要分析元素的結(jié)構(gòu),再到UiBot中修改元素的特征,最終才能精準(zhǔn)的抓取到需要的內(nèi)容。
另外在數(shù)據(jù)抓取時(shí)我們還要注意動(dòng)態(tài)加載的網(wǎng)頁(yè),其數(shù)據(jù)的加載跟滾動(dòng)條位置有關(guān),例如上面提到的京東手機(jī)頁(yè)面,當(dāng)我們打開頁(yè)面時(shí)可以看到一些手機(jī)展示在頁(yè)面上,我們將瀏覽器滾動(dòng)條繼續(xù)往下拉,會(huì)發(fā)現(xiàn)此時(shí)頁(yè)面下方會(huì)增加更多的手機(jī),如果想要完整的抓取頁(yè)面所有手機(jī),則需要先使用UiBot將頁(yè)面滾動(dòng)到最底端,然后再進(jìn)行數(shù)據(jù)的抓取。
當(dāng)然,如何判斷是頁(yè)面是否已經(jīng)滾動(dòng)到最底端,需要我們根據(jù)目標(biāo)頁(yè)面的特性來進(jìn)行判斷,例如可以判斷某個(gè)只會(huì)在頁(yè)面最底端才會(huì)被加載的元素是否存在,不同的頁(yè)面會(huì)有不同的判斷方法,需要大家在開發(fā)時(shí)仔細(xì)觀察。