htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
优采云 发布时间: 2021-09-15 03:18htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
1.HtmlUnit 是一个用java编写的无界面浏览器,建模html文档,通过API调用页面,填写表单,点击链接等,像普通浏览器一样操作。通常用于测试和从网页中获取信息。而且HtmlUnit兼有HttpClient和souce的功能,但是速度比较慢,但是如果取消它解析css和js的功能,速度会提高,默认开启。
2.这里我选择HtmlUnit爬取数据主要是为了获取他的js和css。
3.主要代码如下
package com.los;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.los.util.DownlandPic;
import java.io.IOException;
import java.util.regex.Pattern;
public class HtmlUnitTest {
public static void main(String[] args) throws IOException {
DownlandPic dd = new DownlandPic();
WebClient webClient = new WebClient();//实例化web客户端
//http://www.bdqn.cn/ https://www.baidu.com/?tn=78000241_22_hao_pg
String url = "http://www.bdqn.cn/";
HtmlPage page = webClient.getPage(url);
webClient.waitForBackgroundJavaScript(10000); //等侍js脚本执行完成
System.out.println(page.asXml());
DomNodeList img = page.getElementsByTagName("script");
for (int i=0;i 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();
fileOutputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int getCharacterPosition3(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 2){
break;
}
}
return slashMatcher.start();
}
public static int getCharacterPosition4(String string){
//这里是获取"\""符号的位置
Matcher slashMatcher = Pattern.compile("\"").matcher(string);
int mIdx = 0;
while(slashMatcher.find()) {
mIdx++;
//当"/"符号第三次出现的位置
if(mIdx == 3){
break;
}
}
return slashMatcher.start();
}
public static void main(String[] args) {
String content = "<img class=\"lazy\" data-original=\"/img/newImg/news_img2.jpg\" src=\"/img/newImg/news2.jpg\" style=\"display: block;\"/>";
System.out.println(getCharacterPosition3(content));
System.out.println(getCharacterPosition4(content));
String substring = content.substring(getCharacterPosition3(content), getCharacterPosition4(content));
System.out.println(substring);
}
}
3.因为这里网页中的图片地址是相对路径,下载的时候在页面上找到了绝对路径,拼接在下载地址中。下载的路径必须与抓取后存储在本地页面的图片标签中的地址相对应,否则找不到。
3.匹配"时,之所以写2和3是根据这里爬取的数据。
4.与其他爬取网页的方式相比,这可能更简单,但很容易体现效果。如果有错误,请给我们您的建议。至于页面,则不会显示,涉及隐私。
5.学习HtmlUnit请参考:地址