网络爬虫个人笔记
1.所需要的jar包
htmluinit.jar (可理解为无页面的浏览器,可以模拟浏览器各种操作,可执行js ,处理ajax请求后页面等)
jsoup.jar(处理静态页面,转换为dom文档,进行操作)
2.使用实例
2.1htmlunit
WebClientwebClient= newWebClient(BrowserVersion.CHROME);//创建浏览器
webClient.getOptions().setJavaScriptEnabled(false);//禁用js
webClient.getOptions().setCssEnabled(false);//禁用css
//添加cookie
CookieManagercookieManager= newCookieManager();
cookieManager.addCookie(new Cookie("tieba.baidu.com", "BDUSS", "具体值"));
webClient.setCookieManager(cookieManager);
// 获取当前页的所有帖子元素。返回 DOM节点列表
HtmlPagepage= webClient.getPage("http://tieba.baidu.com/mo/m?kw=java");
DomNodeList<DomNode>iList = page.querySelectorAll(".i");//参数为各种选择器,同JQ
// 选择 p 元素
DomNodep =iList[0].querySelector("p");//单个节点
p.asText()//返回元素文本 <a>文本</a> 返回 文本
p.asXml()//返回元素xml文件 <a>文本</a> 返回 <a>文本</a>
//获取a元素连接
HtmlAnchora = (HtmlAnchor) i.querySelector("a");
Stringhref = a.getAttribute("href");
//获取按钮,模拟点击
HtmlInputsub1 = (HtmlInput) tPage.querySelector("input[name=sub1]");
sub1.click();
处理ajax返回延迟问题
HtmlPage page2 = btn.click();
for (inti = 0; i < 20; i++) {
String text= page2.querySelector("#textarea1").asText();
if (!text.trim().isEmpty()){
System.out.println(page2.asXml());
break;
}
synchronized (page2) {
page.wait(500);
}
}
2.2jsoup
Jsoup.parse解析HTML字符串,如Jsoup.parse("<html><head><title>Firstparse</title></head>")
Jsoup.connect解析url网站地址,如Jsoup.connect(http://www.baidu.com).get()
//本地文件读取方式
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
//网络网页读取方式
Document doc = Jsoup.connect("http://www.oschina.net/")
.data("query", "Java") // 请求参数
.userAgent("I ’ mjsoup") // 设置 User-Agent
.cookie("auth", "token") // 设置 cookie
.timeout(3000) // 设置连接超时时间
.post(); // 使用 POST 方法访问 URL
Document doc = Jsoup.connect("http://www.baidu.com").timeout(10000).get();
Elementslinks = doc.getElementsByTag("a");
for (Element link : links) {
StringlinkHref = link.attr("href");
StringlinkText = link.text();
System.out.println("linkHref: "+linkHref);
System.out.println("linkText: "+linkText);
}
2.3htmlunit与jsoup结合方式
DomNode p = i.querySelector("h4a");
String xml =i.asXml();
Document dom= Jsoup.parse(xml, "UTF-8");
Elements elements=dom.select("img");
String img_url=elements.get(0).attr("data-original");
2.4 Frame页面问题处理
HtmlPage framePage(HtmlPage)p.getFrameByName("FrameName").getEnclosedPage();
个人爬虫项目练习(不涉及多线程):http://download.csdn.net/detail/ab2361936/9767254