`
suiyuan0808
  • 浏览: 155211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用HtmlUnit和httpClient抓施华洛世奇网站图片和动画<二>

    博客分类:
  • Java
阅读更多

try
    {
     mainPage = webClient.getPage(url);
    } catch (Exception e)
    {
     log.error(e.getMessage(), e);
    }
    if (mainPage != null)
    {
     HtmlElement paginationContainer = mainPage
       .getElementById("paginationContainer");
     if (paginationContainer != null)
     {
      url = url + "/all-1";
      try
      {
       mainPage = webClient.getPage(url);
      } catch (Exception e)
      {
       log.error(e.getMessage(), e);
      }
     }
HtmlElement categories = mainPage.getElementById("categories");
     if (categories == null)
     {
      HtmlElement products = mainPage.getElementById("products");
      if(products!=null)
      {
       List<HtmlElement> productDivList = products.getElementsByTagName("div");
       if(productDivList!=null&&productDivList.size()>0)
       {
        for(HtmlElement proDiv:productDivList)
        {
         List<HtmlElement> subList = proDiv.getElementsByTagName("div");
         if(subList!=null)
         {
          for(HtmlElement dt:subList)
          {
           String classt = dt.getAttribute("class");
           if (classt != null && classt.equals("productImg"))
           {
            List<HtmlElement> subAList = proDiv.getElementsByTagName("a");
            if(subAList!=null&&subAList.size()>0)
            {
             HtmlElement ae=subAList.get(0);
             String href = ae.getAttribute("href");
             thirdPageUrls.add(href);
            }
            break;
           }
          }
         }
        }
       }
      }
     }
     else
     {
      List<HtmlElement> divList = categories.getElementsByTagName("div");
         if (divList != null && divList.size() > 0)
         {
       for (HtmlElement div : divList)
       {
        List<HtmlElement> tempDivs = div
          .getElementsByTagName("div");
        if (tempDivs != null && tempDivs.size() > 0)
        {
         for (HtmlElement div1 : tempDivs)
         {
          List<HtmlElement> aList = div1
            .getElementsByTagName("a");
          HtmlAnchor a = (HtmlAnchor) aList
            .get(0);
          String link = a.getHrefAttribute();
          secondPageUrls.add(link);

         }

        }
       }
      }
     }
    

    }
   }
  }
  log.error("第二层抓取结束..........");
  log.error("目前抓取到的第二层URL个数为:"+secondPageUrls.size());

 

int count=0;
  
  for (String url : secondPageUrls)
  {
   count++;
   log.error("正在抓取第二层的第"+count+"个URL:"+url);
   HtmlPage mainPage = null;
   try
   {
    mainPage = webClient.getPage(url);
   } catch (Exception e)
   {
    log.error(e.getMessage(), e);
   }
   log.error("抓取URL完成:"+url+",正在分析URL"+url+"+结果的URL");
   if (mainPage != null)
   {
    HtmlElement paginationContainer = mainPage
      .getElementById("paginationContainer");
    if (paginationContainer != null)
    {
     url = url + "/all-1";
    }
    HtmlElement products = mainPage.getElementById("products");
    if (products != null)
    {
     List<HtmlElement> list = products
       .getElementsByTagName("div");
     ;
     if (list == null || list.size() == 0)
     {
      continue;
     }
     for (HtmlElement h : list)
     {
      String cls = h.getAttribute("class");
      if (cls == null || !cls.equals("productName"))
      {
       continue;
      }
      List<HtmlElement> links = h.getElementsByTagName("a");
      if (links != null && links.size() > 0)
      {
       HtmlAnchor htmlAnchor = (HtmlAnchor) links.get(0);
       String linkStr = htmlAnchor.getHrefAttribute();
       thirdPageUrls.add(linkStr);
       log.error(linkStr);
      }

     }
    }

   }
  }
  log.error("第二层抓取结束..........");
  secondPageUrls.clear();
  secondPageUrls = null;
  
   count=0;
  log.error("目前抓取到的第三层URL个数为:"+thirdPageUrls.size());
  String urlPrix="
http://www.swarovski-crystallized.com/jewelry/us/";
 for (String url : thirdPageUrls)
  {
   count++;
   log.error("正在抓取第三层的第"+count+"个URL:"+url);
   HtmlPage mainPage = null;
   try
   {
    mainPage = webClient.getPage(url);
   } catch (Exception e)
   {
    log.error(e.getMessage(), e);
   }
   if (mainPage != null)
   {
    log.error("抓取URL完成:"+url+",正在分析URL"+url+"+结果");
    int indexC=url.indexOf(urlPrix);
    int indexD=url.indexOf("?");
    String dirStr=url.substring(indexC+urlPrix.length(), indexD);
    String regEx = "/";
//    Pattern p = Pattern.compile(regEx);
//    Matcher m = p.matcher(dirStr);
    

//哦哦哦,建立文件夹准备把抓到数据放在里面
    dirStr=replece( regEx,"\\\\",dirStr);
    dirStr = "D:\\swaroski\\"+dirStr;
    File   file   =   new   File(dirStr);  
    if(file.isDirectory())
    {
     dirStr=dirStr+"\\"+count;
     file   =   new   File(dirStr); 
    }

 file.mkdirs();

Product product=new Product();
    product.setLocalDir(dirStr);
    
    product.setPageUrl(url);
    HtmlElement rightCol = mainPage.getElementById("rightCol");
    String title = null;
    String description = null;
    String packingUnit = null;
    if (rightCol != null)
    {
     HtmlElement headlineDiv = rightCol
       .getElementById("headline");
     if (headlineDiv != null)

。。。。。。。。。。。。。。。。。。。。。。。。

log.error("完成:"+url+",分析结果");
     try
     {
      swaroSkiDAO.addProduct(product);
     } catch (Exception e)
     {
      log.error(e.getMessage(), e);
     }
     log.error("完成保存结果");
     
     for(String downloadUrl:resourceUrlList)
     {
      int index6=downloadUrl.lastIndexOf("/");
      String fileName=downloadUrl.substring(index6+1);
      String dirStr2=dirStr+"\\"+fileName;
         File storeFile = new File(fileName);
         if(storeFile.exists())
         {
          continue;
         }
      SaveFileThread runable=new SaveFileThread(dirStr2,downloadUrl,sem);
      pools.submit(runable);
      log.error("开始提交下载文件:"+downloadUrl);
      try
      {
       Thread.sleep(2500);
      } catch (InterruptedException e)
      {
      }

}

 

 

//啊哈哈,这个就是去拿下图片和动画的线程,结束

class SaveFileThread implements Runnable
 {
  private String fileName;
  private String downloadUrl;
  private Semaphore sem;
          public SaveFileThread(String fileName,String downloadUrl,Semaphore sem)
          {
           this.fileName=fileName;
           this.downloadUrl=downloadUrl;
           this.sem=sem;
          }
  public void run()
  {
            HttpClient client = new HttpClient(); 
           GetMethod get = new GetMethod(downloadUrl); 
           FileOutputStream output=null;
           try
     {
        client.executeMethod(get);
         File storeFile = new File(fileName); 
             output = new FileOutputStream(storeFile); 
             output.write(get.getResponseBody());
             output.flush();
     } catch (Exception e)
     {
      log.error(e.getMessage(), e);
     }

1
1
分享到:
评论

相关推荐

    HttpClient4.1.2 & HtmlUnit2.9 处理文件下载

    在实际使用HttpClient和HtmlUnit结合处理文件下载时,开发者通常会先用HttpClient建立与服务器的连接,然后通过HttpClient发送请求到文件的URL。HtmlUnit则可以在JavaScript执行的环境中触发文件下载,或者模拟用户...

    java httpclient 模拟登录

    &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.13&lt;/version&gt; &lt;/dependency&gt; ``` 接下来,我们创建一个HttpClient实例,并设置必要的参数。这可能包括连接超时、读取超时等。例如: ```java import org....

    通过htmlunit获取执行js代码后的html文档

    &lt;artifactId&gt;htmlunit&lt;/artifactId&gt; &lt;version&gt;2.38.0&lt;/version&gt; &lt;/dependency&gt; ``` 2. **创建WebClient**:使用`WebClient`类初始化一个新的客户端实例。你可以设置各种选项,如JavaScript支持、cookies管理等...

    htmlunit-toutiao.zip

    - HTMLUnit是一个开源项目,基于Jakarta HttpClient和 Rhino JavaScript引擎,能够模拟浏览器进行网页加载和交互。 - 它支持HTTP协议,能够处理cookies,重定向,并支持基本和digest身份验证。 - HTMLUnit提供了...

    htmlunit-driver:适用于HtmlUnit无头浏览器的WebDriver兼容驱动程序

    HtmlUnitDriver ... &lt; artifactId&gt;htmlunit-driver&lt;/ artifactId&gt; &lt; version&gt;2.49.1&lt;/ version&gt; &lt;/ dependency&gt; 用法 简单的 您可以简单地使用HtmlUnit驱动程序类中的构造函数之一 // simple case - no j

    htmlunit 及其 依赖包

    HTMLUnit使用HttpClient来处理网络通信,包括GET和POST请求,设置请求头,处理重定向等。版本4.5.2提供了一套完整的HTTP协议实现,支持HTTPS和各种HTTP特性。 4. **xml-apis-1.4.01.jar**:这是一个XML API的集合,...

    htmlunit-2.36和htmlunit-2.50,包括关联文件

    总的来说,HTMLUnit是一个强大的工具,可以帮助开发者构建高效的Java爬虫,同时提供了对JavaScript支持,使得爬取和交互复杂的动态网站成为可能。结合httpmime库,它可以处理各种HTTP通信需求,为网络爬虫提供全面的...

    htmlunit:HtmlUnit是“用于Java程序的GUI更少的浏览器”

    &lt;artifactId&gt;htmlunit&lt;/artifactId&gt; &lt;version&gt;2.48.0&lt;/version&gt; &lt;/dependency&gt; 概述 HtmlUnit是“用于Java程序的GUI更少的浏览器”。 它为HTML文档建模,并提供一个API,使您可以调用页面,填写表单,单击链接等,...

    htmlunit依赖jar包

    5. **CSS解析**: 对于CSS的支持,HTMLUnit使用了Cascading Style Sheets (CSS) Object Model (CSOM)来解析和应用CSS规则。 6. **异常处理和模拟**: HTMLUnit还包含了各种模拟浏览器行为的组件,如模拟点击、填写...

    针对 httpclient4.* 绕验证码获取公司信息 包括 jsoup网页信息的爬虫及htmlUnit对动态网站信息的抓取

    本主题主要关注如何使用`httpclient4.*`库来绕过验证码获取公司信息,以及结合`jsoup`解析静态网页信息和`htmlUnit`处理动态网站的抓取。以下是对这些知识点的详细说明: 1. **httpclient4.***: Apache HttpClient...

    htmlunit基本jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和交互。这个"htmlunit基本jar包"包含了运行HTMLUnit所需的所有核心组件,无需通过Maven来管理和依赖。这意味着用户可以直接在项目中...

    htmlunit依赖的所有jar

    HTMLUnit是一个Java库,模拟一个无头Web浏览器,主要用于自动化测试和网页抓取。它能够解析HTML、执行JavaScript,并返回用户可以操作的DOM元素。在Java应用中使用HTMLUnit,通常需要依赖一系列的JAR(Java Archive...

    java爬虫案例

    在这个"javahtmlunit爬虫案例入门"中,我们将深入探讨如何使用Java和HtmlUnit库来实现一个简单的电商网站爬虫,同时下载对应的图片。 首先,HtmlUnit是一个无头浏览器模拟器,它允许程序员在Java环境中执行...

    htmlUnit所需jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的导航和交互。这个库在测试、数据抓取以及不需图形用户界面的场景中非常有用。"htmlUnit所需jar包"的标题表明这是一个包含HTMLUnit运行所需...

    Htmlunit2.23-bin.zip

    总之,HTMLUnit 2.23提供了一个强大且高效的工具,适用于自动化测试和网页抓取,特别是对于那些依赖JavaScript的动态网站。通过理解和熟练使用这个库,开发者可以构建出精确、灵活的网页数据提取系统。

    htmlunit所需要jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化网页测试和网页抓取。...它对于进行功能测试、性能测试或者需要...在使用HTMLUnit时,确保这些依赖项完整并正确配置,可以避免许多运行时错误和功能缺失。

    htmlunit-2.3..zip

    这个“htmlunit-2.3.zip”压缩包包含了运行和使用HTMLUnit所需的所有核心组件。 在深入探讨HTMLUnit之前,我们首先了解一下单元测试的概念。单元测试是软件开发过程中的一个重要环节,它允许开发者针对程序中的最小...

    htmlunit用到的jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和交互。这个库的主要优点是它可以解析HTML、执行JavaScript,并且能够处理CSS,而无需实际显示任何图形界面。在Java项目中,HTMLUnit...

    htmlunit-2.14

    2. **JavaScript支持**:HTMLUnit能够理解和执行JavaScript代码,这对于测试动态生成的内容或者依赖JavaScript的网站至关重要。它内置了 Rhino 和 Netty JavaScript 引擎,支持ECMAScript 5.1。 3. **DOM操作**:...

Global site tag (gtag.js) - Google Analytics