htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
优采云 发布时间: 2022-01-10 20:07htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)
1.HtmlUnit 是一个用java 编写的无界面浏览器,它可以模拟html 文档、通过API 调用页面、填写表单、点击链接等等。像普通浏览器一样运行。通常用于测试和从网页中抓取信息。而HtmlUnit有HttpClient和soup的功能,但是速度比较慢,但是如果取消它解析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请参考:地址