HtmlUnit--java网络爬虫

HtmlUnit

// 创建一个浏览器,构造方法可以传入浏览器版本,这里我传入谷歌浏览器。
// 还可以选择火狐和IE浏览器等 BrowserVersion.XXX 常量
WebClient webClient = new WebClient(BrowserVersion.CHROME);

// 为了加快页面访问速度,禁用脚本和样式(这种极速版页面,不需要js参与)
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);

// 添加cookie
CookieManager cookieManager = new CookieManager();
cookieManager.addCookie(new Cookie("tieba.baidu.com", "BDUSS", "这里填你复制好的BDUSS=等号后面那串,一直到分号之前。"));
webClient.setCookieManager(cookieManager);

// 打开一个网页 (也就是 java吧手机版首页)
// 返回的 HtmlPage 对象,类似于 javascript中的 document对象。
HtmlPage page = webClient.getPage("http://tieba.baidu.com/mo/m?kw=java");

// 获取当前页的所有帖子元素。返回 DOM节点列表
// querySelectorAll 的参数是 CSS选择器。这个学过网页的应该都懂。
DomNodeList iList = page.querySelectorAll(".i");
// 遍历所有帖子
for(DomNode i: iList) {
// TODO 
}


for(DomNode i: iList) {
// 选择 p 元素
DomNode p = i.querySelector("p");
// asText() 返回 元素文本, contains是 String的方法,查找 "回0 " 字符串
if(p.asText().contains("回0 ")) { 
// 这里就是找到了 回帖为0的帖子
// 我们用 父元素 div.i 来继续获取 子元素 a 标签。
HtmlAnchor a = (HtmlAnchor)i.querySelector("a");
// 获取 a 标签的属性 href ,就是帖子详情的地址啦!!
String href = a.getAttribute("href");
HtmlPage tPage = webClient.getPage("http://tieba.baidu.com" + href);

// 打开以后可以获取到 回帖的文本框。input[name=co]
HtmlInput co = (HtmlInput)tPage.querySelector("input[name=co]");


// 这里就是重头戏了,设置回帖的内容,
// 你可以事先准备一个回帖内容的数组,随机回复一个优美的句子。
// 这里我就回复一个 “专业二楼 ” 加上 当前时间
co.setValueAttribute("专业二楼" + new Date().toString());


// 选择回帖按钮
HtmlInput sub1 = (HtmlInput)tPage.querySelector("input[name=sub1]");
// 点击回帖按钮
sub1.click();
}
}


//将some_div_id改为特定ID。需根据page代码而定,如百度可以将id设为wrapper

          final HtmlDivision div =page.getHtmlElementById("some_div_id");


//将anchor_name改为指定的name,也许因页面代码而定,如百度可以将其设为tj_settingicon

          final HtmlAnchor anchor =page.getAnchorByName("anchor_name");


  //获取所有div的列表

          final List divs =page.getByXPath("//div");

 //获取有name属性为John的div

          final HtmlDivision div = (HtmlDivision)page.getByXPath("//div[@name='John']").get(0);


 //指定myform为特定name,如百度首页可为f

          final HtmlForm form =page1.getFormByName("myform");

              //指定submitbutton为指定Id,如百度首页可为su

          final HtmlSubmitInput button =form.getInputById("submitbutton");

              //获取修改域,如百度可将userid改为wd

          final HtmlTextInput textField =form.getInputByName("userid");

          // 修改域的值

          textField.setValueAttribute("root");

          // 通过点击按钮提交表单并获取返回页面

          final HtmlPage page2 = button.click();






你可能感兴趣的:(工具)