Phantomjs爬取带有js加载完后才能获得的页面html内容

本文介绍如何利用PhantomJS解决异步加载网页的爬取问题,并结合jsoup进行页面内容提取。通过一个具体示例展示了如何在GitHub上的开源项目easy-commons中使用PhantomjsUtils获取完整的HTML内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常的开发过程中,需要爬取一些网站的页面内容,但是一些网是使用异步加载的内容。

异步加载的信息不好分析与提取,只有从页面的html中提取最直观、最方便,比如一项业务,要爬取淘宝商品的排行版:http://top.taobao.com/index.php?spm=a1z5i.1.2.2.3C7KSE&topId=TR_FS&leafId=50010850;

通过普通 的jsoup是很难分析提取页面中的目标内容的;

但是如果有一个工具,可以获取最后页面展示的html内容,那么再通过传统的jsoup,便可以很容易地提取页面内容;

Phantomjs可以胜任这个业务需求的实现。

针对这个需求编写了一个工具类,工具类已封装在本人托管在 开源中国Git下的的开源项目:easy-commons

项目下载地址:

https://git.oschina.net/nibilly/easy-commons.git

项目是使用maven管理的,下载完后,可以运行bin目录下的install.bat打包到本地的maven仓库,然后在自己的项目里添加依赖:

<dependency>

    <artifactId>easy-commons</artifactId>

<groupId>cn.com.easy</groupId>

<version>0.1.0</version>

</dependency>

以下是使用示例代码(结合jsoup处理返回内容):

/**
 * 根据url获取document
 * 
 * @param url
 * @return
 * @throws Exception
 */
private Document getDocment(String url) throws Exception {
try {
String htmlStr = PhantomjsUtils.getJsHtmlCotnent(url);
return Jsoup.parse(htmlStr);
} catch (Exception ex) {
log.error("爬取异常,用HttpProxy重新爬取一次:" + url, ex);
return this.getDocumentByHttpProxy(url);
}
}
//this.RE_CATCH_FROM_URL_TIMES 是重复爬取次数,在实际的使用过程中,会出现,取回的内容为空的现象,多次判断重复爬取,可以解决问题,我这里设置的是重复爬取5次
for (int k = 0; k < this.RE_CATCH_FROM_URL_TIMES; k++) {
doc = this.getDocment(parentUrl);
topWordsLink = doc.select("#bang-bswitch .switch-row .switch-item a");// 搜索上升完整排行链接
if (topWordsLink.size() != 0) {
break;
}
// 如果没爬到,重复
}


转载于:https://my.oschina.net/u/1045177/blog/469734

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值