java 爬虫js渲染_java_爬虫_获取经过js渲染后的网页源码
md
弄了一天了……(这个月不会在摸爬虫了,浪费生命)
进入正题:
起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom
但是在浏览器检查元素的时候又是有的,这就让我很难过了
百度了一大天,发现是因为普通方法获取的只是服务器端本地的静态资源,也就是第一手资源
而浏览器检查元素的资源是经过js渲染后的代码
所以就要想办法去获得渲染后的代码
在看了若干个帖子之后……外加上一个httpclient课程和另一个htmlunit课程……
终于,在看完一个帖子后,知道了怎么获取渲染后网页的代码
首先,httpclient是普通httlurlConnection的升级版,可以模拟浏览器以防止被服务器封杀
但是抓取的源代码是静态的一手源代码,没有经过js渲染后的内容
所以就需要htmlunit工具,来让页面经过渲染,然后获取源代码
htmlunit的主要功能就是模拟人工操作页面内的元素,由于没有gui,所以要比普通操作要快,但是实际操作后发现还是需要肉眼可见的时间
具体两个工具的jar包在哪儿下载不在这赘述,相信看到这篇文章的人都应该知道在那里获取资源
下面直接贴上源码,具体语句含义在注释中有
源代码如下:
importjava.io.IOException;importjava.net.MalformedURLException;importcom.gargoylesoftware.htmlunit.BrowserVersion;importcom.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;importcom.gargoylesoftware.htmlunit.WebClient;importcom.gargoylesoftware.htmlunit.html.HtmlPage;public classHtmlUnit {public static voidmain(String[] args) {
WebClient webClient= newWebClient(BrowserVersion.FIREFOX_52);//模拟火狐浏览器try{//HtmlPage page = webClient.getPage("http://www.baidu.com");//webClient.getOptions().setCssEnabled(false);//webClient.getOptions().setJavaScriptEnabled(false);
webClient.setJavaScriptTimeout(5000);
webClient.getOptions().setUseInsecureSSL(true);//接受任何主机连接 无论是否有有效证书
webClient.getOptions().setJavaScriptEnabled(true);//设置支持javascript脚本
webClient.getOptions().setCssEnabled(false);//禁用css支持//webClient.getOptions().set
webClient.getOptions().setThrowExceptionOnScriptError(false);//js运行错误时不抛出异常
webClient.getOptions().setTimeout(100000);//设置连接超时时间
webClient.getOptions().setDoNotTrackEnabled(false);//HtmlPage page = webClient.getPage("http://blog.csdn.net/su20145104009?viewmode=contents");
HtmlPage page = webClient.getPage("http://www.enmeiyiyuan.com/look-5bf3f60b83145.html");//String res=page.asText();
Thread.sleep(3000);
System.out.println(page.asXml());
}catch(FailingHttpStatusCodeException e) {//TODO 自动生成的 catch 块
e.printStackTrace();
}catch(MalformedURLException e) {//TODO 自动生成的 catch 块
e.printStackTrace();
}catch(IOException e) {//TODO 自动生成的 catch 块
e.printStackTrace();
}catch(InterruptedException e) {//TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
webClient.close();
}
}
}
那些注释掉的是之前尝试的……
然后一定要注意加上线程等待时间,不然获取的大概率还是第一手代码,因为js渲染需要时间,这里是等待了三秒,然后成功获取经过处理的源码
希望对大家有所帮助
以上
java 爬虫js渲染_java_爬虫_获取经过js渲染后的网页源码相关推荐
- htmlunit抓取js执行后的网页源码
上次我不是写了一个自动抓取博客访问量吗 (点击打开链接) 可是昨天晚上我又运行的时候,发现不能用了.. 运行了几次 发现使用URLConnection 得到的网页源码和浏览器直接查看的不同. URLC ...
- C# -爬虫之WebBrowser跨域跨iframe获取网页源码
前言:这里关键写用WebBrowser跨域跨iframe获取网页源码的部分,本意是要爬取全职高手的有声小说,这类网站特殊,网页上广告大堆,爬起来真麻烦,比如我爬取的网站的mp3源文件下载还需要秘钥的, ...
- java http 源码_httpclient下载网页源码---java基础爬虫
有关httpclient: HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送Http请求变得容易,而且也方便开发人员测试接口(基于Http协 ...
- python 爬虫源代码-Python爬虫学习之获取指定网页源码
本文实例为大家分享了Python获取指定网页源码的具体代码,供大家参考,具体内容如下 1.任务简介 前段时间一直在学习Python基础知识,故未更新博客,近段时间学习了一些关于爬虫的知识,我会分为多篇 ...
- Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频、图片、获取网页源码等)整理
Python 爬虫 之 爬虫的一些基本知识和基本操作(爬取视频.图片.获取网页源码等)整理 目录
- eclipse if代码折叠_仅需一页Java代码就能实现网页源码爬取
作者|小鱼儿. yanxiao|CSDN Java代码基于Eclipse简单实现网页源码爬取 今天给大家分享我的最新java学习进程--java网页源码爬虫,废话不多说盘代码. 仅需一页代码: pac ...
- Python爬虫鲁迅先生《经典语录》保存到Excel表格(附源码)
Python爬虫鲁迅先生<经典语录>保存到Excel表格(附源码) 前言 今天用Python 爬取鲁迅先生<经典语录>,直接开整~ 代码运行效果展示 开发工具 Python版本 ...
- python爬网页源码_python爬虫爬取网页的内容和网页源码不同?
可以看到这里id为k_total的元素值不同,爬出来是1,网页源码是55. 附还未完成的代码:import requests from bs4 import BeautifulSoup import ...
- [爬虫][python][入门][网页源码][百度图片][豆瓣TOP250]
Robots协议 查看爬取规则 遵守相关法律法规 Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol) ...
最新文章
- 2022-2028年中国香薰行业市场研究及前瞻分析报告
- VirtualProtect VirtualLock VirtualUnlock
- asp获取屏幕分辨率
- Kubernetes v1.6开始支持RBAC
- Effective C++ 条款11:在operator=中处理自我赋值
- java collection api_Java Stream和Collection比较:何时以及如何从Java API返回?
- 程序员的春天来了,赏花去!说走就走
- face-recognition库(人脸识别库)安装,使用
- oracle杀死进程时权限不足_如何解决Oracle数据库在迁移过程中的权限不足问题
- WEB前后端交互原型通用元件库、常用组件、信息输出、信息输入、信息反馈、综合系列、页面交互、首页、分类页、内容详情、用户中心、注册登录、找回密码、元件库、web元件库、rplib、axure
- PHP基础语法的学习
- 詹姆斯高斯林_詹姆斯·高斯林接下来要做什么?
- dell 重装linux系统_预装Linux(Ubuntu)的DELL笔记本重装Windows
- 知识问答之信息检索-1
- Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了! | 博文精选...
- slack 开源系统_Slack团队聊天的5种开源替代品
- Android经典蓝牙相关知识
- 织梦(dede)更改默认管理员名称admin技巧
- 银河麒麟踩坑笔记——tty、单用户模式
- python文件处理相关