本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種腳本生成方法與裝置。
背景技術(shù):
在現(xiàn)有技術(shù)中,由于網(wǎng)絡(luò)爬蟲可以抓取網(wǎng)頁中的文本內(nèi)容,目前被廣泛的應(yīng)用于搜索、數(shù)據(jù)挖掘等領(lǐng)域中。網(wǎng)絡(luò)爬蟲可以抓取網(wǎng)頁中的全部內(nèi)容,也可以抓取網(wǎng)頁中的部分內(nèi)容。
目前,若要利用網(wǎng)絡(luò)爬蟲去抓取目標網(wǎng)頁中的目標內(nèi)容,工作人員需先編寫抓取目標內(nèi)容的腳本,網(wǎng)絡(luò)爬蟲才能夠根據(jù)該腳本,抓取到目標內(nèi)容。
例如,若現(xiàn)在想要利用網(wǎng)絡(luò)爬蟲抓取如圖1中所示的網(wǎng)頁中的商品的價格信息,即“價錢:$149.99”。那么,工作人員便要通過瀏覽器訪問相應(yīng)的網(wǎng)頁,然后在該網(wǎng)頁對應(yīng)的網(wǎng)頁代碼中查找“價錢:$149.99”對應(yīng)的網(wǎng)頁代碼,即“價錢:$149.99”對應(yīng)的最小的文檔對象模型(Document Object Model,dom)樹。
其中,“價錢:$149.99”對應(yīng)的最小的dom樹如下所示:
<div id="kfs_family_16"class="kfs-inner-container kfs-selected"style="width:20%;left:40%;background-image:url(https://images-na.ssl-images-amazon.com/ima ges/G/01/kindle/stripe/kfs-selector-2._CB386844303_.gif);"onClick="javascript:(function(){})()">
<a class="kfs-current kfs-link">
<imgclass="kfs-img"style="margin-top:9px;"src="https://images-na.ssl-images-amazon.com/images/G/01/kindle/dp/2015/848470/famnav/fs-m._CB292709393_.p ng"/>
<br/>
Fire HD 8
<br/>
<span class="kfs-price">
$149.99
</span>
<br/>
</a>
<divid="kfs_popover_content_16"=class="kfs-popover-container"style="displ ay:none;">Incredibly thin and light,designed for entertainment</div>
在查找到“價錢:$149.99”對應(yīng)的最小的dom樹后,獲取“價錢:$149.99”對應(yīng)的超文本標記語言(HyperText Markup Language,HTML)屬性值信息,比如id="kfs_family_16"、class="kfs-price"等。工作人員根據(jù)該些屬性值信息,編寫出包含該些HTML屬性值信息的抓取腳本。將編寫好的腳本以及該商品對應(yīng)的網(wǎng)頁代碼一并送入解析引擎中,以使得解析引擎可以根據(jù)抓取腳本中的id以及class,查找到“價錢:$149.99”對應(yīng)的最小的dom樹,并在該最小的dom樹中提取出“價錢:$149.99”這一價格信息。
雖然通過上述方法,網(wǎng)絡(luò)爬蟲能夠抓取網(wǎng)頁中的內(nèi)容,但是需要人工編寫抓取腳本,效率較低。
技術(shù)實現(xiàn)要素:
本申請實施例提供一種腳本生成方法與裝置,用于解決現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,人工編寫抓取腳本效率較低的問題。
本申請實施例采用下述技術(shù)方案:
一種腳本生成方法,包括:
確定用戶在顯示的網(wǎng)頁中選定的網(wǎng)頁內(nèi)容;
根據(jù)確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼;
根據(jù)所述網(wǎng)頁代碼,生成抓取腳本。
一種腳本生成裝置,包括:
內(nèi)容確定模塊,確定用戶在顯示的網(wǎng)頁中選定的網(wǎng)頁內(nèi)容;
代碼確定模塊,根據(jù)確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼;
腳本生成模塊,根據(jù)所述網(wǎng)頁代碼,生成抓取腳本。
本申請實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:
與現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,需人工編寫抓取腳本相比,采用本申請實施例提供的腳本生成方法,通過確定用戶在網(wǎng)頁中選定的網(wǎng)頁內(nèi)容,確定出該網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼,并根據(jù)該網(wǎng)頁代碼生成抓取腳本,從而解決了現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,人工編寫抓取腳本效率較低的問題。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為現(xiàn)有技術(shù)中的目標網(wǎng)頁中的內(nèi)容;
圖2a為本申請實施例提供的一種腳本生成方法的具體流程圖;
圖2b為本申請實施例提供的確定HTML屬性值的頁面;
圖2c為本申請實施例提供的詢問用戶抓取哪一種網(wǎng)頁內(nèi)容的頁面;
圖2d為本申請實施例提供的用戶框選網(wǎng)頁內(nèi)容后顯示出的頁面;
圖2e為本申請實施例提供的用戶兩次框選網(wǎng)頁內(nèi)容后顯示出的頁面;
圖3為本申請實施例提供的一種腳本生成裝置的具體結(jié)構(gòu)示意圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細說明本申請實施例提供的技術(shù)方案。
為了解決了現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,人工編寫抓取腳本效率較低的問題,本申請實施例提供一種腳本生成方法。
該方法的執(zhí)行主體,可以但不限于為手機、平板電腦或個人電腦(Personal Computer,PC)等用戶終端,或者該些用戶終端上運行的應(yīng)用(Application,APP),或者,還可以是服務(wù)器等設(shè)備。
為便于描述,下文以該方法的執(zhí)行主體為PC為例,對該方法的實施方式進行介紹??梢岳斫?,該方法的執(zhí)行主體為PC只是一種示例性的說明,并不應(yīng)理解為對該方法的限定。
該方法的具體流程示意圖如圖2a所示,包括下述步驟:
步驟11,顯示網(wǎng)頁。
在本申請實施例中,當(dāng)用戶想要利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁中的網(wǎng)頁內(nèi)容時,可以通過PC中安裝的瀏覽器或者其他具有瀏覽器功能的應(yīng)用訪問該網(wǎng)址,以使得該PC可以顯示出該網(wǎng)頁,便于后續(xù)操作。后續(xù)以瀏覽器為例進行說明。
具體的,用戶可以在瀏覽器中的網(wǎng)址輸入框中輸入網(wǎng)址,并訪問該網(wǎng)址,該PC便顯示出該網(wǎng)址對應(yīng)的網(wǎng)頁。
步驟12,確定用戶在顯示的網(wǎng)頁中選定的網(wǎng)頁內(nèi)容。
在PC顯示出網(wǎng)頁后,用戶可以根據(jù)實際需求,在該網(wǎng)頁中選定想要抓取的網(wǎng)頁內(nèi)容,以使得瀏覽器可以確定用戶在網(wǎng)頁中選定的網(wǎng)頁內(nèi)容,進而進行后續(xù)操作,最終生成抓取腳本。
用戶之所以可以在網(wǎng)頁中選定網(wǎng)頁內(nèi)容,是因為網(wǎng)頁的網(wǎng)頁代碼中存在第一腳本。該第一腳本用于提供在網(wǎng)頁中選定網(wǎng)頁內(nèi)容的功能。第一腳本包括層疊樣式表(Cascading Style Sheets,CSS)腳本。一般情況下,第一腳本位于網(wǎng)頁的網(wǎng)頁代碼中的頂部或底部。這是因為若將第一腳本嵌入到網(wǎng)頁的網(wǎng)頁代碼的中間位置,在瀏覽器執(zhí)行后續(xù)操作時,有可能會誤將該第一腳本作為網(wǎng)頁的網(wǎng)頁代碼的一部分,進而影響最終抓取腳本的生成。因此,一般將第一腳本嵌入在網(wǎng)頁代碼的頂部或底部。
在實際應(yīng)用中,網(wǎng)頁的網(wǎng)頁代碼中存在第一腳本,有可能是因為用戶在通過瀏覽器訪問網(wǎng)址后,服務(wù)器返回的網(wǎng)頁的網(wǎng)頁代碼中已經(jīng)存在第一腳本了,也有可能是因為在確定用戶在所述網(wǎng)頁中選定的網(wǎng)頁內(nèi)容之前,瀏覽器將預(yù)設(shè)的第一腳本嵌入到了服務(wù)器返回的網(wǎng)頁代碼中。
若在通過瀏覽器訪問網(wǎng)址后,服務(wù)器返回的網(wǎng)頁的網(wǎng)頁代碼中已經(jīng)存在第一腳本了,這有可能是服務(wù)器在接收到瀏覽器發(fā)送的獲取網(wǎng)頁的網(wǎng)頁代碼請求后,便將預(yù)設(shè)的第一腳本嵌入了網(wǎng)頁的網(wǎng)頁代碼中,然后再將該網(wǎng)頁代碼發(fā)送給瀏覽器;也有可能是瀏覽器的開發(fā)人員事先與網(wǎng)頁的開發(fā)人員協(xié)商好,網(wǎng)頁的開發(fā)人員在編寫該網(wǎng)頁的網(wǎng)頁代碼時,便將第一腳本嵌入了該網(wǎng)頁代碼中。于是,服務(wù)器返回的網(wǎng)頁代碼中存在第一腳本。其中,第一腳本并不會影響瀏覽器對網(wǎng)頁的渲染。
步驟13,根據(jù)確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼。
在執(zhí)行完畢步驟12后,瀏覽器可以根據(jù)通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼。
這是因為在瀏覽器根據(jù)通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼之前,瀏覽器便將預(yù)設(shè)的第二腳本嵌入到了網(wǎng)頁的網(wǎng)頁代碼中,以使得該瀏覽器可以根據(jù)目標內(nèi)容,通過第二腳本,確定目標內(nèi)容對應(yīng)的網(wǎng)頁代碼。其中,第二腳本包括Javascript(JS)腳本。
或者,用戶在瀏覽器中訪問網(wǎng)頁對應(yīng)的網(wǎng)址后,服務(wù)器返回的網(wǎng)頁代碼中便存在第二腳本。這樣,瀏覽器便可以根據(jù)網(wǎng)頁內(nèi)容,通過第二腳本,確定該網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼。其中,服務(wù)器返回的網(wǎng)頁代碼中存在第二腳本的原因可能是服務(wù)器在接收到瀏覽器發(fā)送的獲取網(wǎng)頁的網(wǎng)頁代碼請求后,便將預(yù)設(shè)的第二腳本嵌入了網(wǎng)頁的網(wǎng)頁代碼中,然后再將該網(wǎng)頁代碼發(fā)送給瀏覽器;也有可能是瀏覽器的開發(fā)人員事先與網(wǎng)頁的開發(fā)人員協(xié)商好,網(wǎng)頁的開發(fā)人員在編寫該網(wǎng)頁的網(wǎng)頁代碼時,便將第二腳本嵌入了該網(wǎng)頁代碼中。于是,服務(wù)器返回的網(wǎng)頁代碼中存在第二腳本。其中,第二腳本并不會影響瀏覽器對網(wǎng)頁的渲染。
那么,瀏覽器根據(jù)通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容,通過第二腳本,確定該網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼的具體實施方式可以如下所述:
瀏覽器根據(jù)通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容,通過第二腳本,在網(wǎng)頁的網(wǎng)頁代碼中,確定出該網(wǎng)頁內(nèi)容對應(yīng)的最小dom樹,然后在該最小的dom樹中,確定出該網(wǎng)頁內(nèi)容對應(yīng)的HTML屬性值。
由于瀏覽器在根據(jù)網(wǎng)頁代碼渲染網(wǎng)頁時,可以建立網(wǎng)頁內(nèi)容與網(wǎng)頁代碼的映射關(guān)系,或者建立網(wǎng)頁中的網(wǎng)頁內(nèi)容所在的坐標點與網(wǎng)頁代碼之間的映射關(guān)系。因此,瀏覽器可以根據(jù)上述映射關(guān)系,根據(jù)通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容,確定出該網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼,即該網(wǎng)頁內(nèi)容對應(yīng)的最小dom樹。若通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容對應(yīng)著一個最小的dom樹,那在該最小的dom樹中,確定出通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容對應(yīng)的HTML屬性值。其中,HTML屬性值可以為class,也可以為id和class。具體的,在瀏覽器確定HTML屬性值之前,瀏覽器可以在該瀏覽器所在PC的屏幕中顯示出一個詢問頁面,用以詢問用戶確定最小的dom樹中的id和class,還是確定最小的dom樹中的class。例如,如圖2b所示的頁面,該頁面中包括確定id和class的控件,以及確定class的控件。若用戶點擊確定id和class的控件,則瀏覽器確定id和class,若用戶點擊確定class的控件,則瀏覽器確定class。
若通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容對應(yīng)著至少兩個最小的dom樹,那在該些最小的dom樹中,分別確定出通過執(zhí)行步驟12確定的網(wǎng)頁內(nèi)容對應(yīng)的HTML屬性值。在確定HTML屬性值之前,瀏覽器可以在該瀏覽器所在的PC的屏幕中顯示出如圖2b所示的詢問頁面,用以詢問用戶確定每一個最小的dom樹中的id和class,還是確定每一個最小的dom樹中的class。用戶便可根據(jù)實際需要,確定點擊哪一個控件,從而使得瀏覽器根據(jù)用戶的選擇,確定相應(yīng)的HTML屬性值。
在確定出上述HTML屬性值之后,便可執(zhí)行步驟14,最終生成抓取腳本。
步驟14,根據(jù)所述網(wǎng)頁代碼,生成抓取腳本。
在執(zhí)行完畢步驟13后,瀏覽器便可將確定出的想要抓取的網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼中的HTML屬性值添加到預(yù)設(shè)的腳本生成模板中,生成抓取腳本。其中,該抓取腳本用于抓取與HTML屬性值相匹配的網(wǎng)頁內(nèi)容。
其中,若瀏覽器確定出的HTML屬性值為id和class,那么瀏覽器便可以分別將確定出的每一個dom中的id和class以{id=XXX,class=XXX}這種組合形式添加到預(yù)設(shè)的腳本生成模板中,生成抓取腳本。若瀏覽器確定出的HTML屬性值為class,那么瀏覽器便可以分別將確定出的每一個dom中的class以{class=XXX}這種組合形式添加到預(yù)設(shè)的腳本生成模板中,生成抓取腳本。
其中,瀏覽器在生成抓取腳本后,可以將該抓取腳本保存在本地。另外,瀏覽器還可以將與通過執(zhí)行步驟12確定出的網(wǎng)頁內(nèi)容對應(yīng)的最小的dom樹以及全部網(wǎng)頁代碼保存在本地,以使得瀏覽器可以在后續(xù)操作中可以運用上述抓取腳本、最小的dom樹以及網(wǎng)頁代碼,抓取網(wǎng)頁內(nèi)容。
在生成抓取腳本后,瀏覽器可以在該瀏覽器所在的PC中彈出一個頁面,用以告知用戶抓取腳本已經(jīng)生成,并詢問用戶是否抓取網(wǎng)頁內(nèi)容。
例如,該頁面可以如圖2c所示。該頁面中包括第一抓取控件和第二抓取控件。若用戶點擊第一抓取控件,瀏覽器便將抓取腳本以及通過執(zhí)行步驟12確定出的網(wǎng)頁內(nèi)容對應(yīng)的最小的dom樹,發(fā)送給解析引擎。若抓取腳本中包含id和class,解析引擎根據(jù)id找到該id所在的最小的dom樹,再根據(jù)與該id存在于同一個組合中的class,提取出最小的dom樹中的用戶想要抓取的網(wǎng)頁內(nèi)容。例如,若確定出的用戶想要抓取如圖1所示的網(wǎng)頁中的“價錢:$149.99對應(yīng)的最小的dom樹為:
<div id="kfs_family_16"class="kfs-inner-container kfs-selected"style="width:20%;left:40%;background-image:url(https://images-na.ssl-images-amazon.com/ima ges/G/01/kindle/stripe/kfs-selector-2._CB386844303_.gif);"
onClick="javascript:(function(){})()">
<a class="kfs-current kfs-link">
<imgclass="kfs-img"style="margin-top:9px;"src="https://images-na.ssl-images-amazon.com/images/G/01/kindle/dp/2015/848470/famnav/fs-m._CB292709393_.p ng"/>
<br/>
Fire HD 8
<br/>
<span class="kfs-price">
$149.99
</span>
<br/>
</a>
<divid="kfs_popover_content_16"=class="kfs-popover-container"style="displ ay:none;">Incredibly thin and light,designed for entertainment</div>
抓取“價錢:$149.99”的抓取腳本中包含id="kfs_family_16",以及“價錢:$149.99”對應(yīng)的class="kfs-price"。
那么,用戶點擊第一抓取控件,瀏覽器便可將上述最小的dom樹以及抓取腳本一并發(fā)送給解析引擎,解析引擎便可根據(jù)id="kfs_family_16"找到該id所在的最小的dom樹,再根據(jù)class="kfs-price"從該dom樹中提取出“價錢:$149.99”這一價格信息。
若抓取腳本中不包含id,只包含class,瀏覽器根據(jù)class便可提取出發(fā)送到解析引擎中的所有的最小的dom樹中的與class相匹配的網(wǎng)頁內(nèi)容。
當(dāng)用戶點擊第二抓取控件后,瀏覽器便將抓取腳本與網(wǎng)頁的網(wǎng)頁代碼發(fā)送給解析引擎。若抓取腳本中包含id和class,解析引擎根據(jù)id找到該id所在的最小的dom樹,再根據(jù)與該id存在于同一個組合中的class,提取出最小的dom樹中的用戶想要抓取的網(wǎng)頁內(nèi)容。
若抓取腳本中不包含id,只包含class,瀏覽器根據(jù)class便可提取出網(wǎng)頁的網(wǎng)頁代碼中的與class相匹配的網(wǎng)頁內(nèi)容。
需要說明的是,本申請實施例所提供方法的各步驟的執(zhí)行主體可以相同,也可以不同。例如,在瀏覽器執(zhí)行完畢步驟13后,瀏覽器可以將確定出的網(wǎng)頁代碼以及HTML屬性值發(fā)送給服務(wù)器,以使得服務(wù)器根據(jù)所述網(wǎng)頁代碼,生成抓取腳本。另外,上述只是以PC中安裝的瀏覽器為例的一種示例性說明,本申請實施例的執(zhí)行主體除了可以是PC中安裝的瀏覽器之外,也可以是PC中安裝的其他具有瀏覽器功能的應(yīng)用,還可以是移動終端中的具有瀏覽器功能的APP,本申請對此不進行任何限定。
在本申請實施例中,瀏覽器在執(zhí)行步驟12時,具體的,在一種實施方式中,用戶一旦開始在網(wǎng)頁中進行框選,瀏覽器便可以開始確認用戶框選的網(wǎng)頁內(nèi)容?;蛘撸谟脩艨蜻x結(jié)束后,被框選的目標內(nèi)容被矩形方框框住,且該網(wǎng)頁中會顯示出繼續(xù)框選、提交和取消的控件。其中,被矩形方框框住的目標內(nèi)容,可以以高亮的顯示方式顯示,也可以以該網(wǎng)頁被顯示出來時該目標內(nèi)容的最初顯示方式顯示,這可以根據(jù)用戶需求進行設(shè)置,本申請實施例對此不進行任何限定。例如,如圖2d所示,圖2d中顯示的頁面便為用戶框選想要抓取的某一購物網(wǎng)站中的某一商品的價格信息后所顯示出的頁面。該頁面中的價格信息被一個矩形方框框住,且在價格信息的右側(cè)分別顯示出繼續(xù)框選、提交和取消的控件。其中,被框住的價格信息并未高亮顯示,而是以最初顯示狀態(tài)顯示。
在網(wǎng)頁中出現(xiàn)繼續(xù)框選、提交和取消的控件后,若用戶想要繼續(xù)框選其他的內(nèi)容,便可點擊繼續(xù)框選控件,繼續(xù)框選其他內(nèi)容。若用戶不再想框選其他內(nèi)容,便可點擊提交控件,瀏覽器便將用戶框選的網(wǎng)頁內(nèi)容確定為目標內(nèi)容。若用戶想取消之前框選的內(nèi)容,框選其他的內(nèi)容,那么點擊取消控件,便可重新框選。
另外,本申請實施例提供的腳本生成方法中,用戶在網(wǎng)頁中選擇想要抓取的網(wǎng)頁內(nèi)容時,可以先進行一次粗略選擇,瀏覽器可以根據(jù)用戶第一次選擇的網(wǎng)頁內(nèi)容確定出該網(wǎng)頁內(nèi)容對應(yīng)的最小的dom。然后,用戶再在第一次選擇的網(wǎng)頁內(nèi)容的基礎(chǔ)上進行第二次選擇,瀏覽器便可以在確定出的最小的dom中確定出第二次選擇的網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼中的HTML屬性值。比如,如圖2e所示,若用戶想要抓取網(wǎng)頁中的“¥175”的價格信息,在第一次選定時,用戶可以粗略的將包含“¥175”這一價格信息的網(wǎng)頁內(nèi)容一并進行選擇,瀏覽器便可根據(jù)該第一次選擇的內(nèi)容,確定出該些網(wǎng)頁內(nèi)容對應(yīng)的最小的dom樹。在用戶在第二次選擇時,可以只選擇“¥175”,那么瀏覽器便可以在該最小的dom樹確定出“¥175”對應(yīng)的HTML屬性值。圖2e中有兩個矩形方框,其中,較大的矩形方框中的所有內(nèi)容為用戶第一次選擇的內(nèi)容,較小的矩形方框中的網(wǎng)頁內(nèi)容為用戶第二次選擇的內(nèi)容。
在本申請實施例中,還可通過一種腳本生成裝置,來實現(xiàn)本申請實施例中提供的腳本生成方法。
如圖3所示,為本申請實施例提供的一種腳本生成裝置的結(jié)構(gòu)示意圖,主要包括下述裝置:
內(nèi)容確定模塊31,確定用戶在顯示的網(wǎng)頁中選定的網(wǎng)頁內(nèi)容。
代碼確定模塊32,根據(jù)確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼。
腳本生成模塊33,根據(jù)所述網(wǎng)頁代碼,生成抓取腳本。
在一種實施方式中,所述裝置還包括:
第一嵌入模塊,在內(nèi)容確定模塊31確定用戶在顯示的網(wǎng)頁中選定的網(wǎng)頁內(nèi)容之前,將預(yù)設(shè)的第一腳本嵌入到所述網(wǎng)頁的網(wǎng)頁代碼中。其中,所述第一腳本用于提供在所述網(wǎng)頁中選定網(wǎng)頁內(nèi)容的功能,所述第一腳本包括層疊樣式表CSS腳本。
在一種實施方式中,所述裝置還包括:
第二嵌入模塊,在代碼確定模塊32根據(jù)確定的網(wǎng)頁內(nèi)容,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼之前,將預(yù)設(shè)的第二腳本嵌入到所述網(wǎng)頁的網(wǎng)頁代碼中,所述第二腳本包括JS腳本。
則代碼確定模塊32,根據(jù)確定的網(wǎng)頁內(nèi)容,通過所述第二腳本,確定所述網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼。
在一種實施方式中,代碼確定模塊32,在所述網(wǎng)頁的網(wǎng)頁代碼中,確定所述網(wǎng)頁內(nèi)容對應(yīng)的最小的文檔對象模型dom樹;
在所述最小的dom樹中,確定所述網(wǎng)頁內(nèi)容對應(yīng)的超文本標記語言HTML屬性值。
在一種實施方式中,腳本生成模塊33,將確定出的所述HTML屬性值添加到預(yù)設(shè)的腳本生成模板中,生成抓取腳本,所述抓取腳本用于抓取與所述HTML屬性值相匹配的網(wǎng)頁內(nèi)容。
在一種實施方式中,所述裝置還包括:
內(nèi)容解析模塊,將所述抓取腳本以及網(wǎng)頁代碼發(fā)送給解析引擎,通過解析引擎,抓取相應(yīng)的網(wǎng)頁內(nèi)容。
與現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,需人工編寫抓取腳本相比,采用本申請實施例提供的腳本生成方法,通過確定用戶在網(wǎng)頁中選定的網(wǎng)頁內(nèi)容,確定出該網(wǎng)頁內(nèi)容對應(yīng)的網(wǎng)頁代碼,并根據(jù)該網(wǎng)頁代碼生成抓取腳本,從而解決了現(xiàn)有技術(shù)中利用網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁內(nèi)容時,人工編寫抓取腳本效率較低的問題。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。