目的
如果我想知道張藝謀是誰?我會(huì)去百度百科或維基百科搜索一下,那么百度百科或維基百科會(huì)返回張藝謀網(wǎng)頁結(jié)果。如果批量的去操作這種,手動(dòng)去搜索是很浪時(shí)間和人力的。于是,我就寫了一個(gè)SearchWord程序。

在百科上搜索張藝謀
介紹程序原理
其實(shí)我們?nèi)ピ跒g覽器里搜索一個(gè)詞條,然后點(diǎn)擊一下“進(jìn)入詞條”,網(wǎng)頁會(huì)返回一個(gè)頁面,用百度百科舉例如下:

搜索張藝謀結(jié)果頁面
那么我們用程序來做這樣一件事情,也是同樣的道理。具體步驟如下:
- 模擬一個(gè)虛擬瀏覽器(等同于我們電腦里安裝的瀏覽器)
- type 一個(gè)詞條(等同于我們在搜索框里輸入一個(gè)“張藝謀”)
- 觸發(fā)click事件(等同于我們在瀏覽器上點(diǎn)擊“進(jìn)入詞條”)
- 保存下返回的page頁面(等同于我們看到張藝謀這個(gè)頁面)
核心代碼
模擬生成瀏覽器
準(zhǔn)備htmlunit工具,模擬生成webclient,生成瀏覽器代碼如下:
public static WebClient ConstructWebClient()
{
//set the Brower’s version
WebClient webClient = new WebClient(BrowserVersion.getDefault());
// set Brower support javascript和 css
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
// set Brower link time limit
webClient.getOptions().setTimeout(120000);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setAppletEnabled(false);
return webClient;
}
type and click
/**
* Search the word on WIKI
*/
HtmlForm form = page.getForms().get(0);
HtmlTextInput htmlTextInput = form.getInputByName("search");
htmlTextInput.setValueAttribute(word);
HtmlSubmitInput go = form.getInputByName("go");
resultPage = go.dblClick();
/**
* Enter the word on search
*/
HtmlForm form = page.getForms().get(0);
HtmlTextInput htmlTextInput = form.getInputByName("word");
htmlTextInput.setValueAttribute(word);
HtmlButton button = (HtmlButton) page.getElementById("search");
resultPage = button.click();
結(jié)束語
其實(shí)實(shí)現(xiàn)一個(gè)簡單功能是很容易的,但是要結(jié)構(gòu)化解析返回結(jié)果頁面還是一件很費(fèi)神的事情。