概述
一、HtmlUnit是什么?
1、htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。
2、采用的是Rhinojs引擎。模拟js运行
3、常规意义上,该项目可以用来进行页面的测试工作,实现网页自动化测试,(包括JS)
4、但是一般来说,在小型爬虫项目中,这种框架十分常用,可以有效的分析出 dom的标签,并且有效的运行页面上的js以便得到一些需要执行JS才能得到的值。
二、应用:获取百度API返回的详情url,从详情url抓取图片url
maven依赖:
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit-core-js</artifactId>
<version>2.23</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.23</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
服务端代码:
/**
* 从百度POI详情页获取图片url
* @param poiUid
* @return
*/
public static List<String> grabImgUrl(String poiUid) {
if (StringUtils.isBlank(poiUid)) {
return null;
}
final String IMG_LIST_URL = "http://map.baidu.com/detail?qt=caterphoto&type=list&ugc_ver=1&uid=";
String detailUrl = IMG_LIST_URL + poiUid;
log.info("grabImgUrl. detailUrl=" + detailUrl);
final String DIV_ID = "photoContainer";
final String TAG_IMG = "img";
final String IMG_SRC = "src";
try (final WebClient webClient = new WebClient()) {
final HtmlPage page = webClient.getPage(detailUrl);
if (page != null && page.isHtmlPage()) {
Thread.sleep(40000); // 等待页面加载完成。
final HtmlDivision div = page.getHtmlElementById(DIV_ID);
DomNodeList<HtmlElement> eleList = div.getElementsByTagName(TAG_IMG);
List<String> imgUrlList = new ArrayList<String>();
for (HtmlElement hele : eleList) {
String imgUrl = hele.getAttribute(IMG_SRC);
if (StringUtils.isNotBlank(imgUrl)) {
log.info("imgUrl=" + imgUrl);
imgUrlList.add(imgUrl);
}
}
return imgUrlList;
}
} catch (Exception e) {
log.error("grabImgUrl error.", e);
}
return null;
}
页面展示:
<c:forEach items="${imgs}" var="im">
<div class="upload-block upload-block-avatar upload-block-reset">
<img src="${im.picUrl }" class="pic">
<div class="mask">
<a href="javascript:void(0);" onclick="setMainImg(this);" class="set-cover">设为封面</a>
<a href="javascript:void(0);" onclick="removeImg(this);" class="close">×</a>
</div>
<c:if test="${im.isCurr eq '1'}">
<i class="icon-cover"></i>
</c:if>
</div>
</c:forEach>
最后
以上就是标致钻石为你收集整理的利用HtmlUnit抓取百度api商家图片的全部内容,希望文章能够帮你解决利用HtmlUnit抓取百度api商家图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复