一、网页数据大概分为三类:
1.静态网页
所有内容都写在Html标签中,可以从网页源代码中直接查找到数据。
2.动态网页
数据是通过JavaScript动态加载显示到<body>中,直接查找源代码不能找到数据。
3.登陆网页
3.1 无验证码登陆
需要通过登陆后才可以查看获取网页数据。(包括静态、动态)
3.2 有验证码登陆(暂时还未研究)
验证码目前形势也较多:
传统验证图片输入
拖动验证
点击图中某些字
短信验证
计算图片算术结果
....
二、爬虫获取数据步骤:
1. 通过http协议,获取(下载)网页(起始页)
2. 解析网页:
2.1 解析网页链接,加入爬队列(去重处理,标记已爬取链接)
2.2 取得需要的数据
3. 保存数据
三、爬取技术选取:HtmlUnit+Jsoup
采用htmlunit获取网页,并解析执行js,渲染页面
采用jsoup解析网页,获取数据和链接
Htmlunit常用参数设置:
参数设置如下:
// 1创建WebClient
WebClient webClient=new WebClient(BrowserVersion.CHROME);
// 2 启动JS
webClient.getOptions().setJavaScriptEnabled(true);
// 3 禁用Css,可避免自动二次請求CSS进行渲染
webClient.getOptions().setCssEnabled(false);
// 4 启动客戶端重定向
webClient.getOptions().setRedirectEnabled(true);
// 5 js运行错誤時,是否拋出异常
webClient.getOptions().setThrowExceptionOnScriptError(false);
// 6 设置超时
webClient.getOptions().setTimeout(50000);
//获取网页
HtmlPage htmlPage = webClient.getPage(url);
// 等待JS驱动dom完成获得还原后的网页
webClient.waitForBackgroundJavaScript(10000);
// 网页內容
/* System.out.println(htmlPage.asXml()); */
Document doc=Jsoup.parse(htmlPage.asXml());
//使用jsoup解析页面
.....
//关闭windows,释放资源
webClient.closeAllWindows();
更多参考:http://htmlunit.sourceforge.net/gettingStarted.html
http://htmlunit.sourceforge.net/apidocs/
http://www.cnblogs.com/luotinghao/p/3800054.html
http://blog.csdn.net/ldw220817/article/details/8790119
四、Jsoup常用函数
Document doc=Jsoup.parse(String html);//将html源码文本,解析并生成DOM树
doc.select(String cssQuery);
doc.getElementById();
更多参考:http://www.cnblogs.com/xiaoMzjm/p/3899366.html
http://tool.oschina.net/apidocs/apidoc?api=jsoup-1.6.3
https://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/
五、总结
1.js的执行还未研究透彻
2.验证码还未开始研究
3.准备研究webkit
4.终极目标:封装自己的爬虫