htmlunit抓取动态网页(就是怎么用htmlunit爬虫工具来爬取京东页面下该类目下)

优采云 发布时间: 2022-01-24 18:07

  htmlunit抓取动态网页(就是怎么用htmlunit爬虫工具来爬取京东页面下该类目下)

  由于是第一次使用爬虫爬取网页内容,对于一些特殊情况我不是很擅长处理。在这里,我将与您分享我遇到的一些情况。

  public static String getPage(String s_url, String charset) {

if (s_url == null) {

return null;

}

try {

URL url = new URL(s_url);

BufferedReader bReader = new BufferedReader(new InputStreamReader(url.openStream(), charset));

String s;

StringBuffer sBuffer = new StringBuffer();

while ((s=bReader.readLine())!=null) {

sBuffer = sBuffer.append(s);

}

url = null;

return sBuffer.toString();

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

  上面的代码应该是最简单的获取网页源代码的方法了。您可以通过网页的url和编码方式直接获取网页的源代码,从而获得您想要的信息。但事情并不总是像想象的那么简单。目前的情况是这样的。我需要爬取的页面是京东三级分类下的商品信息。这种编码的结果都是乱码。后来在访问地址后面加上了?enc=utf-8,得到的页面终于没有乱码了,但是京东页面返回的结果却是“No product found”,真是心碎。如果大神知道如何解决这个问题,请告诉我。

  好了,废话就说到这里,下面是如何使用htmlunit爬虫工具爬取京东页面

   System.out.println("开始爬取页面了...");

//创建一个webclient

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);

//htmlunit 对css和javascript的支持不好,所以请关闭之

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setCssEnabled(false);

webClient.getOptions().setTimeout(10000);

try{

//获取页面

HtmlPage page = webClient.getPage("http://list.jd.com/list.html?cat=1620,1621,1627");

List divs = page.getByXPath("//div[@id='plist']");

HtmlDivision div = (HtmlDivision)divs.get(0);

HtmlUnorderedList ul = (HtmlUnorderedList)div.getFirstChild();

List lis = ul.getHtmlElementsByTagName("li");

for(int i = 0; i < lis.size(); i ++){

HtmlListItem li = lis.get(i);

String index = li.getAttribute("index");

if(index == null || "".equals(index))

continue;

//打印出页面中的商品所对应的skuid

System.out.println("第" + li.getAttribute("index") + "个商品的skuid=" + li.getAttribute("data-sku"));

}

//获取该类目下的商品总页数

List divs2 = page.getByXPath("//div[@id=&#39;J_bottomPage&#39;]");

HtmlDivision div2 = (HtmlDivision)divs2.get(0);

List b = div2.getHtmlElementsByTagName("b");

for(int i = 0; i < b.size(); i++){

String classname = b.get(i).getAttribute("class");

if(classname != null && !"".equals(classname)){

continue;

}

String pagetotal = b.get(i).getFirstChild().toString();

System.out.println("总页数为" + pagetotal);

}

System.out.println("哈哈");

}catch(Exception e){

e.printStackTrace();

}finally{

//关闭webclient

webClient.closeAllWindows();

}

  如上,可以得到京东页面上该分类下所有产品的skuid和总页数。下一个问题很好解决~

  htmlunit相关jar包下载地址:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线