操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
优采云 发布时间: 2022-09-23 19:12操作方法:java爬虫工具htmlunit爬取静动态示例(附带亲测可用所有jar包)
本文提供的所有jar包均非maven导入。您需要自己了解如何导入 pom。
抓取静态页面
爬取静态页面的基础包:htmlunit基础jar包
有些人可能还需要这两个包:
jetty-websocket.jar
jsoup.jar
以上所有jar包都导入后,来hello word。
public static void main(String[] args) throws IOException {
// 实例化Web客户端
WebClient webClient = new WebClient();
// 爬取https网站需要设置为true
webClient.getOptions().setUseInsecureSSL(true);
// 解析获取页面
HtmlPage page = webClient.getPage("https://www.baidu.com");
// 获取Html
System.out.println("网页html:" + page.asXml());
System.out.println("====================");
// 获取文本
System.out.println("网页文本:" + page.asText());
}
到目前为止,以上功能可以抓取静态页面。绝对没问题。
抓取动态页面
爬取动态页面基础包:htmlunit爬取动态页面jar包
爬取动态界面示例演示
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import java.util.logging.Level;
public class GetSongDemo {
@Test
public void show() throws Exception {
readHtml("https://y.qq.com/n/yqq/song/000VWfXv0lIJyw.html");
}
public static void readHtml(String url) throws Exception {
// 不显示异常日志
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.NoOpLog");
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit")
.setLevel(Level.OFF);
java.util.logging.Logger.getLogger("org.apache.commons.httpclient")
.setLevel(Level.OFF);
WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED);
<p>
wc.setJavaScriptTimeout(10000);
//接受任何主机连接 无论是否有有效证书
wc.getOptions().setUseInsecureSSL(true);
//设置支持javascript脚本
wc.getOptions().setJavaScriptEnabled(true);
//js运行错误时不抛出异常
wc.getOptions().setThrowExceptionOnScriptError(false);
//设置连接超时时间
wc.getOptions().setTimeout(100000);
wc.getOptions().setDoNotTrackEnabled(false);
//当HTTP的状态非200时是否抛出异常
wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc.getOptions().setActiveXNative(false);
//是否启用CSS
wc.getOptions().setCssEnabled(false);
//很重要,设置支持AJAX
wc.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage page = wc.getPage(url);
Thread.sleep(10000);
System.out.println(page.asXml());
System.out.println(page.asText());
}
}</p>
技巧:如何爬取动态网页的数据?Python实战案例(python爬虫动态数据获取)
如何从动态网页抓取数据? Python实战案例(python爬虫动态数据获取)
前言
一、什么是动态网页
所谓动态网页是指相对于静态网页的一种网页编程技术。对于静态网页,随着html代码的生成,页面的内容和显示效果基本不会改变——除非你修改了页面代码。动态网页并非如此。虽然页面代码没有改变,但是显示的内容会随着时间、环境或数据库操作的结果而改变。 ——来源百度百科
动态网页具有工作量减少、内容更新快、可完成功能多等特点。
二、什么是 AJAX
随着人们对动态网页加载速度的要求越来越高,AJAX 技术应运而生,并成为许多网站的首选。 AJAX 是一种用于创建快速和动态网页的技术,它通过在后台与服务器交换少量数据来实现网页的异步更新。这意味着无需重新加载整个网页即可更新网页的某些部分。
三、如何爬取AJAX动态加载网页
1.解析接口
只要有数据发送,就一定有请求发送到服务器。我们只需要找出它悄悄加载的页面的真实请求。特点:爬取速度快,爬取数据干净,部分网站解析困难。
2.硒
什么是硒?它最初是一个自动化测试工具,但已经被广泛的用户爬取。是一个可以用代码操作浏览器的工具,比如控制浏览器的下滑,模拟鼠标点击等。特点:代码比较简单,爬取速度慢,ip容易被封.
项目实践
一、分析界面
既然如此,我们来启动爬虫的正确姿势,先用解析接口的方法来写爬虫。