htmlunit抓取动态网页(1.HtmlUnit的学习方法是什么?怎么样?HtmlUnit)

优采云 发布时间: 2022-01-10 20:07

  htmlunit抓取动态网页(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请参考:地址

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线