• jsoup无法爬取动态的ajax界面,百度了许久之后有人说htmlunit等爬虫工具可以支持模拟浏览器行为,百度上查了htmlunit的简单用法,爬取虎牙直播分栏的js链接。模拟点击。获取点击后的下一个页面。
  • 有人说用htmlunit获取不到ajax的页面,答案是错误的,用htmlunit可以获取点击后的页面源码,但是使用很有条件,对于输出。他只能打印一个js行为,也就是如果你界面上有多喝动态生成的页面按钮比如2.3.4**下一个。你要做的只能选择一个。如果想选择遍历所有,看来还是要选择下一页,然后将下一页再从新执行同样的操作(我没有这样试过不知道行不行,我用的是另外方法)。想想就很烦,并且htmlunit加载js很慢,如果爬取效率特别低。但是代码以及测试简单给大家:
  • 有个重要点就是一定要有thread.sleep();可能js执行慢需要反应吧,没有这句话会经常抓不到。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;public class HTMLunit {public static void main(String[] args) throws IOException, InterruptedException{final WebClient webClient = new WebClient(BrowserVersion.CHROME);webClient.getOptions().setTimeout(2000);//webClient.getOptions().getTimeout();webClient.getOptions().setJavaScriptEnabled(true);webClient.getOptions().setThrowExceptionOnScriptError(false);    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);webClient.getOptions().setActiveXNative(false); webClient.getOptions().setCssEnabled(false);
// webClient.waitForBackgroundJavaScript(600*1000); webClient.setAjaxController(new NicelyResynchronizingAjaxController()); HtmlPage page=webClient.getPage("https://www.huya.com/g/wzry");   Listanchors=page.getAnchors();//System.out.println(anchors);Listjsanchors=new ArrayList();for(HtmlAnchor anchor:anchors){ String href=anchor.getAttribute("href");/** 抓取js的链接*/if(href.startsWith("javascript:")){                      {jsanchors.add(anchor);}}else if("#".equals(href)){if(anchor.hasAttribute("onclick")){jsanchors.add(anchor);}}}HtmlAnchor t1=jsanchors.get(0);HtmlPage newpage=t1.click();Thread.sleep(1000);System.out.println(newpage.asText());
//  for(HtmlAnchor anchor:jsanchors)
//  {
//       /*
//       * 这段话会失败,因为htmlunit只能执行一次 会输出相同页
//       */
//      Thread.sleep(600);
//      HtmlPage newpage=anchor.click();
//      Thread.sleep(600);
//      System.out.print(newpage.asText());
//
//  }       }
}

输出:

大乔
孙膑
可筛选热门英雄啦!
美女 质量局
来一波5排好撒 Song 1623
绝迹国一Pro程,单排上王者~ 寒夜 1533
单排只用小乔-契约之战-狂铁 东辰-子轩 1527
我真的不da野,是野怪先动的手 LYG丶七鱼 1517
国服刘备,一天一个王者 袖天-狠人 1499
小贱;赔钱虎野区霸主 钻上星耀上王者 东辰-小贱 1497
新秀happy:中午跟佳哥,天才哥打五排 happy 1494

  • 虽然这种方式不太好,但是也能将就抓取小数据。也算是成功模拟了吧。
  • 对于这种低效率,出错大的抓取方式抓取大规模数据肯定是不行的。那么下篇就讲解如何抓取json文件(后台传来的数据源文件)。
    如果对后端、爬虫等感性趣欢迎关注我的个人公众号交流:bigsai

爬取虎牙之二:试用htmlunit模拟js爬取ajax页面相关推荐

  1. HttpClient模拟登录、HtmlUnit模拟登录,jsoup爬取登录后的内容(不带验证码)

    一.HttpClient模拟登录是通过post或get请求,登录后抓取的是静态页面,动态页面使用HtmlUnit public static void main(String[] args) thro ...

  2. 爬取虎牙直播图片的代码分析

    爬取虎牙直播图片的分析 文章目录 爬取虎牙直播图片的分析 一.直接放源码 二.代码分析 总结 一.直接放源码 import requests from lxml import etree url='h ...

  3. java爬取button_学习使用Java的webmagic框架爬取网页内容

    (一)使用前的配置: 2,(1)添加依赖: us.codecraft webmagic-core 0.7.3 us.codecraft webmagic-extension 0.7.3 us.code ...

  4. node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地

    node.js抓取网络图片保存到本地,node.js抓取防盗链网络图片保存到本地 使用模块request.fs,request模块在npm里平均月下载量超过3000W次,那是相当的牛逼. node版本 ...

  5. 自从学会:用Python爬取虎牙颜值区美女主播照片后,身体一天不如一天

    本次干货内容给大家呈现的利用爬虫获取海量美女图片.不知道大家有没有上过斗鱼直播.虎牙直播,直播室里面美女姐姐可是比比皆是. 有很多美女姐姐的图片做桌面,即使加班也是高兴的! 好啦!先唠叨一下爬虫的步骤 ...

  6. 原生爬虫爬取虎牙绝地求生直播热度排行榜

    原生爬虫爬取虎牙绝地求生直播热度排行榜 首先需要相应的知识储备: (1)import 导入方法 (2)面向对象思想 (3)for循环运用 (4)正则表达式 (5)lambda方法的应用 本次原生爬虫爬 ...

  7. 爬取虎牙之三:通过json数据获取所有直播情况

    动态ajax页面为什么会再同一个页面有多个分页,就是因为当你点击其他页的时候服务器返回一串json串,js执行json参数达到改变页面效果.下面说说如何抓取json串. 1:爬取信息要对源页有所了解, ...

  8. 第26讲:模拟登录爬取实战案例

    在上一课时我们了解了网站登录验证和模拟登录的基本原理.网站登录验证主要有两种实现,一种是基于 Session + Cookies 的登录验证,另一种是基于 JWT 的登录验证,那么本课时我们就通过两个 ...

  9. 2021春项目需求记录 python实现模拟登录+爬取NASA Modis 上的产品数据

    python实现模拟登录+爬取Nasa Modis 上的产品数据 概述 需求分析 基本思路 代码 概述 3月的中旬时候参与了学校的一个大创项目,作为本科生,本人只是摸鱼打杂,负责了其中的一个功能模块: ...

最新文章

  1. nova-scheduler详解 openstack-ice版
  2. SQL 解决in的参数烦恼(经典,简洁,高效)
  3. 中国火锅对话农民丰收节交易会·万祥军:谋定餐调产业链
  4. 双向队列(STL做法)
  5. 软件定义汽车带来的困境---如何破局?
  6. java replace第二个_java - 错误的第二个参数类型:从片段内调用.replace() - 堆栈内存溢出...
  7. Dockerfile创建pytorch1.1.0+cuda10.0+cudnn7.5踩过的坑
  8. 2017.10.3 国庆清北 D3T2 公交车
  9. pads中如何设置等长_如何在Windows 10中设置和使用Hyper-V进行OS虚拟化
  10. Freemarker 最简单的例子程序
  11. javaweb中真分页案例
  12. iOS 蓝牙开发 swift (一)
  13. 红帽linux中文系统下载iso,红帽子9.0版下载-redhat linux 9.0 iso下载 简体中文正式版-IT猫扑网...
  14. 墙裂推荐9个在线图片压缩网站
  15. 会议安排问题(贪心算法)
  16. pig的基本语法以及高级语法
  17. 计算机桌面工作提醒,电脑桌面怎么增加文字提醒?
  18. 慕课网风袖小程序 一一第一阶段
  19. 申论指导议论文八大高分标准
  20. 基于matlab tcr fc 无功补偿,基于MATLAB的静止无功补偿器的仿真研究

热门文章

  1. 密码流 PassWord.java
  2. BUUCTF crackMe
  3. 攻防世界Reverse第七题simple-unpack
  4. 47. 全排列 II(回溯算法)
  5. android指纹fingerprint学习总结
  6. 2021-07-15
  7. 软件构造的视图与质量指标
  8. 在Ubuntu系统中安装Docker
  9. 析构设置为虚函数的原因
  10. MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)