Ⅰ 求!为什么我用htmlUnit抓取淘宝购买记录时,得到的html和在页面上直接右键查看到的html不同
因为抓取的可能是动态生成的网页 而右键的是一些静态的网页
Ⅱ 为什么我引用htmlunit的代码包,就会报错
package htmlunit; import java.io.IOException;import java.net.MalformedURLException; import org.htmlparser.visitors.HtmlPage; import com.gargoylesoftware.htmlunit.;import com.gargoylesoftware.htmlunit.WebClient; public class WebClientTest { public static void main(String args[]){ final WebClient webClient = new WebClient(); HtmlPage page; try { page = webClient.getPage fo"); System.out.println(page.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } webClient.closeAllWindows(); }}
Ⅲ htmlunit jar包怎么用
将lib目录下的所有.jar文件复制到任意目录(如:c:\htmlunit\lib\)然后右击我的电脑->属性->高级->环境变量->系统变量 中,对CLASSPATH进行编辑,如果没有就新建一个(如果运行java或编译时有错误,就在)务必将所有.jar文件的详细地址添加到CLASSPATH中,而不是用“c:\htmlunit\lib\”来代替,如.;c:\htmlunit\lib\1.jar;c:\htmlunit\lib\2.jar; 才是正确的写法务必每一个都写清楚,需要注意最前面有个点".",最后面有个";"
Ⅳ 开源爬虫框架各有什么优缺点
首先爬虫框架有三种
分布式爬虫:Nutch
JAVA单机爬虫:Crawler4j,WebMagic,WebCollector
非JAVA单机爬虫:scrapy
第一类:分布式爬虫
优点:
海量URL管理
网速快
缺点:
Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。
用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非。
Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫。
Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。
Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text)
用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
第二类:JAVA单机爬虫
优点:
支持多线程。
支持代理。
能过滤重复URL的。
负责遍历网站和下载页面。爬js生成的信息和网页信息抽取模块有关,往往需要通过模拟浏览器(htmlunit,selenium)来完成。
缺点:
设计模式对软件开发没有指导性作用。用设计模式来设计爬虫,只会使得爬虫的设计更加臃肿。
第三类:非JAVA单机爬虫
优点:
先说python爬虫,python可以用30行代码,完成JAVA
50行代码干的任务。python写代码的确快,但是在调试代码的阶段,python代码的调试往往会耗费远远多于编码阶段省下的时间。
使用python开发,要保证程序的正确性和稳定性,就需要写更多的测试模块。当然如果爬取规模不大、爬取业务不复杂,使用scrapy这种爬虫也是蛮不错的,可以轻松完成爬取任务。
缺点:
bug较多,不稳定。
Ⅳ HtmlUnit 怎样模拟window.open出来的page
您好,我来为您解答:类里面的代码:…HtmlForm htmlForm1 = (HtmlForm) page.getForms().get(2);page = (HtmlPage) htmlForm1.getInputByName("new").click();…但是这个page还是原来的page,我想获得弹出来的page,HtmlUnit的文档中说的是加个WebWindowListener。希望我的回答对你有帮助。
Ⅵ htmlunit 从哪个版本 开始 java8
Java核心技术第8版 此书较新根据卓越网的信息对比Java2核心技术卷Ⅰ:基础知识(第7版)(英文版) 霍斯特曼,,,美%康奈尔,,,美 人民邮电出版社JAVA核心技术卷1:基础知识(原书第8版)(Sun公司核心技术丛书) 作者:(美国 )(Horstmann Gay S.)昊斯特曼 (美国)Gary Cornell 机械工业出版社实际上是同一本书,两个翻译版本而已,显然原书第8版较新
Ⅶ 如何用htmlunit向服务器javascrtipt提交数据和得到运行结果
看了下你的网站,你的目的应该是测试按下搜索按钮之后显示的结果网页里面的内容是否符合预想吧,其实htmlunit本身相当于模拟了一个浏览器,所以你不需要分别执行那几个javascript,只要用htmlunit的webclient用你的地址装入网页(这时候他会自动装入需要的javascript并执行),然后用你会得到一个htmlpage对象,从里面找到需要填值的input对象,设置参数,然后找到搜索按钮,模拟点击即可,然后webclient会像真正的浏览器一样做submit,并更新他内部的网页数据,之后你只要在更新过的htmlpage对象中寻找预想结果应该生成的网页对象并判断其值是否正确即可。我没有用过python版的htmlunit,我用的是java版,但用法应该类似,你也可以参考下面的这个网页,当然他只做到了submit,之后的对结果的判断做法是类似的,也可以用你上面写的通过xpath到结果网页里面寻找的方法。http://blog.csdn.net/xuweilinjijis/article/details/8984290
Ⅷ htmlunit如何不通过id和name获取button,并提交表单。跪求高手您是如何解决的
登录按钮:
<input name="" type="image" src="../images/button_login.gif" class="input_img">
实现方法:
我用的class,当然也可以换成type或src,属性都可以作为判断条件
HtmlImageInput btnSubmit=null;
DomNodeList<DomElement> domElements=htmlpage.getElementsByTagName("input");
for(DomElement temp:domElements){
if(temp.getAttribute("class").equals("input_img")){
btnSubmit= (HtmlImageInput) temp;
}
}
Ⅸ 用htmlunit怎么去获取一个有JS加载的网页信息
有两种方式供选择我推荐第一种,一:去阅读相关的网页里的js和网页请求之后的header,通过hander知道这个获取这个信息的接口。通过httpclient来获知你想要的信息。二:通过htmlunit框架提供的方法:JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;jsExecutor.executeScript("LoginSubmit();", "");这里的LoginSubmit就是页面里的js方法名称(页面里要有这个js方法,当然你也可以自己写一些js)。然后通过dom操作来获取你想要的信息。
Ⅹ 滚动条 htmlunit 怎么处理
HtmlUnit 是一个模拟浏览器的行为的开源工具,可以打开网页,填写表单等。