htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。
相关文件下载地址:
http://sourceforge.net/projects/htmlunit/files/
http://jaist.dl.sourceforge.net/project/htmlunit/htmlunit/2.15/htmlunit-2.15-bin.zip
我的需求是使用百度的高级新闻搜索,抓取指定站点新闻
手动搜索的设置如图所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package com.html580;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.List;
import com.gargoylesoftware.htmlunit.ElementNotFoundException;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput;
import com.gargoylesoftware.htmlunit.html.HtmlSelect;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
/** * @description 抓取百度搜索结果
* @author html580
* @site http://www.html580.com
* @version 2014-7-23
*/
public class BaiduSpider {
public static void main(String[] args) {
try {
final WebClient webclient = new WebClient();
//搜索按钮
final HtmlForm form = htmlpage.getFormByName( "f1" );
final HtmlSubmitInput button = form.getInputByValue( "百度一下" );
//搜索结果-关键词
final HtmlTextInput textField = form.getInputByName( "q1" );
textField.setValueAttribute( "HTML我帮您" );
//分页条数
final HtmlSelect htmlSelet=form.getSelectByName( "rn" );
htmlSelet.setDefaultValue( "10" );
//网页的时间
final HtmlSelect htmlSeletlm=form.getSelectByName( "rn" );
htmlSeletlm.setDefaultValue( "0" );
//语言
final List<HtmlRadioButtonInput> radioButtonCts = form.getRadioButtonsByName( "ct" );
radioButtonCts.get( 0 ).setChecked( true );
radioButtonCts.get( 1 ).setChecked( false );
radioButtonCts.get( 2 ).setChecked( false );
//文档格式
final HtmlSelect htmlSeletft=form.getSelectByName( "ft" );
htmlSeletft.setDefaultValue( "" );
//关键词位置
final List<HtmlRadioButtonInput> radioButtonq5s = form.getRadioButtonsByName( "q5" );
radioButtonq5s.get( 0 ).setChecked( true );
radioButtonq5s.get( 1 ).setChecked( false );
radioButtonq5s.get( 2 ).setChecked( false );
//站内搜索 限定要搜索指定的网站
final HtmlTextInput htmlTextInputq6 = form.getInputByName( "q6" );
htmlTextInputq6.setDefaultValue( "html580.com" );
//隐藏值
final HtmlHiddenInput hiddenInputtn = form.getInputByName( "tn" );
hiddenInputtn.setDefaultValue( "baiduadv" );
final HtmlPage page2 = button.click();
String result = page2.asXml();
System.out.println(result);
webclient.closeAllWindows();
} catch (FailingHttpStatusCodeException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ElementNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} |
转自:http://www.html580.com/11591/baiduspider
相关推荐
- 初始化HTMLUnit实例。 - 访问目标URL,获取`HtmlPage`。 - 使用DOM操作和选择器提取所需数据。 - 创建`Workbook`和`Sheet`。 - 将数据转换为适合Excel的格式,并写入到`Sheet`。 - 保存`Workbook`到Excel...
HTMLUnit的一个显著优点是它的速度,因为不需要启动真正的浏览器实例,所以执行速度比使用Selenium等其他工具要快得多。然而,由于它是一种无头浏览器模拟,对于某些复杂的页面交互或特定的JavaScript库支持可能会...
1. **配置和初始化HTMLUnit**:在代码中,你需要首先配置HTMLUnit实例,设置浏览器的一些属性,如用户代理、JavaScript支持等。然后,创建一个新的WebClient对象,这是与服务器通信的主要接口。 2. **打开网页**:...
1. 创建`HtmlUnitWebClient`实例。 2. 使用`WebClient`打开指定URL的网页。 3. 通过DOM操作(如`getByXPath`, `getElementById`, `getElementsByClassName`等)查找页面元素。 4. 对元素进行操作,如输入文本、点击...
在使用HTMLUnit时,开发者通常会创建一个`WebClient`实例,设置必要的配置,然后使用它来打开URL获取`HtmlPage`对象。`HtmlPage`提供了访问网页元素的方法,如链接、表单、脚本等。如果网页上有JavaScript,HTMLUnit...
在实际使用HTMLUnit时,你可以创建一个`WebClient`实例,设置浏览器特性,然后访问URL来加载网页。HTMLUnit提供了一系列API,如`HtmlPage`,可以用来解析和操作网页元素,执行JavaScript,以及模拟用户行为,如点击...
- **WebClient**:这是HTMLUnit的主要入口点,用于初始化和配置浏览器实例,创建HTTP请求,并处理响应。 - **HtmlPage**:表示一个HTML页面,包含了对DOM的操作方法,如getElementById、getElementsByTag等。 - **...
2. 创建HtmlUnitDriver实例: ```java HtmlUnitDriver driver = new HtmlUnitDriver(); ``` 3. 使用driver访问网页: ```java driver.get("http://www.example.com"); ``` 4. 操作网页元素: ```java ...
以下是一个简单的示例,展示了如何创建WebClient实例并加载HtmlUnit官方网站的首页: ```java @Test public void homePage() throws Exception { final WebClient webClient = new WebClient(); final ...
通过HTMLUnit,开发者可以编写程序来模拟用户在浏览器上的操作,如点击链接、填写表单、执行JavaScript等,而无需真正打开一个浏览器实例。 使用HTMLUnit获取执行JavaScript后的HTML文档,首先需要理解HTMLUnit的...
2. **初始化WebClient**:创建`WebClient`实例,并根据需求设置各种配置,如浏览器版本、JavaScript支持、代理设置等。 3. **导航和交互**:使用`WebClient`的`go()`方法导航到URL,然后使用`getPage()`或其他方法...
然后,你可以创建`WebClient`实例,设置所需的浏览器特性,如JavaScript支持,接着使用`WebClient`的`go`或`getPage`方法加载URL。一旦页面加载完成,你可以通过`HtmlPage`对象访问网页元素,并调用各种方法来模拟...
开发人员可以将这个JAR添加到项目的类路径中,以便在代码中调用HtmlUnit的功能,例如创建WebClient实例,访问网页,填表单,点击按钮,以及执行其他与浏览器交互的操作。 API文档,通常以DOC格式提供,是开发者理解...
这对于自动化测试和大数据抓取场景非常有用,因为它可以快速地、非可视性地处理大量网页,而无需打开多个浏览器实例。 在源码中,你可以看到HTMLUnit是如何模拟浏览器的各个组件,如HTML解析器、CSS解析器、...
开发者可以通过创建`WebClient`实例,设置各种配置(如连接超时、代理设置等),然后使用它来访问和操作网页。 6. **网页对象模型**:HTMLUnit将网页元素封装为Java对象,如`HtmlPage`代表整个HTML页面,`...
在使用HTMLUnit时,开发者通常会创建一个测试类,实例化一个`HtmlPage`对象,然后通过这个对象与网页进行交互。例如,可以使用`clickLink()`方法来模拟点击链接,`getElementById()`或`getElementsByClassName()`来...
在实际项目中,开发者需要将这些文件引入到项目路径中,然后通过Java代码创建`HtmlUnitDriver`实例,设置网页编码,加载URL,执行网页操作,获取页面内容,最后进行断言或数据提取等操作。通过这种方式,HTMLUnit能...
2. **创建WebClient**:使用`new WebClient()`初始化一个Web客户端实例,可以设置浏览器配置,如是否启用JavaScript。 3. **导航到URL**:通过`webClient.getPage(url)`方法访问网页。 4. **处理页面内容**:可以...
在上述代码中,`WebClient`实例化了一个模拟浏览器,`getPage()`方法加载了指定URL的网页,`asText()`则用于获取页面的纯文本内容。 总的来说,HtmlUnit 2.30为开发者提供了一种高效、灵活的工具,用以处理Web测试...