AutoIt3採集網頁中JS生成的數據

[size=medium]
在做了一年多的網頁數據採集之後,中途停了幾個月,今天經理交代一個任務,採集http://www.365rili.com/huangliQuery.html 中2011年全年的農曆日期,例如 2011年1月1日 是“農曆11月廿七 庚寅年 戊子月 丙辰日”。開始以爲可以直接使用自編的webpage API來採集,但分析源代碼之後發現,裏面的數據全部是有JS動態生成的,對於目前的網頁解析類庫是很難獲取到該網頁的數據,就算使用htmlutil API,啓動js引擎,模擬鼠標事件,這樣也很難採集到該網頁的數據。

因爲按鍵精靈軟件中有個網頁分析的工具“網頁按鍵精靈”可以分析網頁加載後的源碼,和 Autoit3能夠操作IE瀏覽器,所以也能很好的採集到JS生成的數據。一下是我採集該網頁JS數據的準備和源碼。

準備是:window系統,ie瀏覽器,網頁按鍵精靈,autoit3 有這四個部分就可以通過編寫類vb代碼,在autoit上運行。就能在控制檯打印出採集到的“農曆日期”信息。
源代碼:
[/size]


;採集2011全年的農曆日 如:1月1日 是 農曆11月廿七 庚寅年 戊子月 丙辰日

#include <IE.au3>

;創建一個IE瀏覽器,並且打開指定地址,試着附着在已存在窗口,瀏覽器窗口可見,在返回之前等待網頁加載完畢,使窗口聚焦
$oIE = _IECreate ("http://www.365rili.com/huangliQuery.html",1,1,1,0)

;通過標籤名獲取當前網頁所有INPUT和DIV 的DOC標籤對象
$oButtons = _IETagNameGetCollection ($oIE, "input")
$oInputs = _IETagNameGetCollection ($oIE, "div")

;通過ID獲取網頁DOM對象
$oMonSelect=_IEGetObjById($oIE, "oth_month")
$oDaySelect=_IEGetObjById($oIE, "oth_day")


For $mon=1 to 12
;獲取11年每個月份的天數
if $mon<=7 Then
if mod($mon,2)=1 Then
$day=31
Else
if $mon=2 Then
$day=28
Else
$day=30
EndIf
EndIf
else
if mod($mon,2)=0 Then
$day=31
Else
$day=30
EndIf
EndIf

;通過指定option的文字來設定當前月份
_IEFormElementOptionSelect ($oMonSelect, $mon & "", 1, "byText")

For $today=1 to $day

;打印日期
;ConsoleWrite($mon & "-" & $today & @CRLF)

;通過指定option的文字來設定當前日期
_IEFormElementOptionSelect ($oDaySelect, $today & "", 1, "byText")

;###########################
;獲取網頁中指定序號的input的按鈕
;###########################
;$oButtons = _IETagNameGetCollection ($oIE, "input")
$j=0;
For $oButton In $oButtons
If $j=0 Then
_IEAction ($oButton, "click")
EndIf
$j=$j+1
Next

;###########################
;獲取網頁中指定需要的div標籤內的text
;###########################
;$oInputs = _IETagNameGetCollection ($oIE, "div")
$i=0;
For $oInput In $oInputs
If $i=27 Then
ConsoleWrite($mon & "-" & $today &" "&_IEPropertyGet($oInput, "innertext") & @CR)
EndIf
$i=$i+1
Next

Sleep(500);休息0.5秒
Next

Next

;一下是運行時控制檯打印的部分結果

1-1 農曆11月廿七 庚寅年 戊子月 丙辰日
1-2 農曆11月廿八 庚寅年 戊子月 丁巳日
1-3 農曆11月廿九 庚寅年 戊子月 戊午日
1-4 農曆12月初一 庚寅年 戊子月 己未日
1-5 農曆12月初二 庚寅年 己丑月 庚申日


[size=medium]

注:
(1)源代碼只能在window平臺上運行,並且必須安裝ie瀏覽器。
(2)網頁按鍵精靈是按鍵精靈的一個子軟件,這裏用於分析加載後的網頁,如定位 沒有設定id 和 name 屬性的標籤,只要點擊 網頁按鍵精靈 上的網頁分析和按下F9就可以開始分析網頁,能很好知道每個標籤在該網頁中的序號。
(3)autoit3程序能發不成exe文件,在window平臺運行。
(4)autoit3和按鍵精靈都是一類軟件,只是各有偏重,autoit偏重辦公的自動化,按鍵精靈偏重遊戲方面自動化。
(5)autoit3的功能很強大,我只是專注其數據採集方面的應用。
[/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章