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

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

    博客分类:
  • Java
阅读更多

让我们先看看施华洛世奇网站界面http://www.swarovski-crystallized.com/吧,这个页面离我们需要抓去页面有4层菜单,也就是需要点击四次才到达我们的目标页面。这个页面有5个菜单,每个菜单需要深入4层菜单。我们简称为CatchMenu1;经测试,4个线程同时抓去需要5个多小时分析



 第二层菜单界面,注意这个页面下面还有分页一页一页的,我们简称为CatchMenu2

 第三层菜单界面,我们简称为CatchMenu3,注意这个页面下面还有分页哦:



 终于到达我们的目标页面了:



 

 

好了,需求就是这么简单,开工吧。

1.建立一个菜单模型类:

public class CatchMenuDO implements Serializable
{
 private Long id;
 private Long parentId;//该菜单的父菜单ID
 private String name; //该菜单名称
 private String name_url; //菜单对应的页面
    private Integer level; //第几层菜单,1表示第一层,2表示第二层,依次类推
    private Date gmCreate;
    private Date gmModify;
    private Boolean fetched=false; //是否已经抓去分析了
    private Boolean isLastChild=false; //是否是最小叶菜单,即最后一层的菜单
    private String parentName;//父菜单名称

...................................................................................////////////省略

.....................................................................................

}

 2.建立连接数据库获取保存菜单以及产品信息DAO类:

public class SwaroSkiDAOImpl extends SqlMapClientDaoSupport implements SwaroSkiDAO
{
 public int addProduct(Product product)
 {
  getSqlMapClientTemplate().insert("SwaroSkiDAO.addProduct", product);
     return 1;
 }
 public Long addProductColor(ProductColor color)
 {
  Long result= (Long) getSqlMapClientTemplate().insert("SwaroSkiDAO.addProductColor", color);
     return result;
 }
 public Long addProductImageSwf(ProductImageSwf imageswf)
 {
  Long result= (Long) getSqlMapClientTemplate().insert("SwaroSkiDAO.addProductImageSwf", imageswf);
return result;
 }


 public Long addProductSize(ProductSize size)
 {
  Long result= (Long) getSqlMapClientTemplate().insert("SwaroSkiDAO.addProductSize", size);
     return result;
 }
 public List<CatchMenuDO> getCatchMenuList(CatchMenuQueryModel menuModel)
 {
  List<CatchMenuDO> list= (List<CatchMenuDO>)getSqlMapClientTemplate().queryForList("SwaroSkiDAO.getCatchMenu", menuModel);  
  return list;
 }

}

3.数据库SQL:

 <select id="SwaroSkiDAO.getCatchMenu"  resultMap="CatchMenuDO" parameterClass="xxxx.xxxx.xxxx.CatchMenuQueryModel">

//这个sql的意思就是获取指定层,指定父类菜单下面所有子菜单
    SELECT  ID, parent_ID, name, name_url,
    menu_level, gm_create,gm_modify,fetched,
    is_last_child,parent_name
    FROM  page_catch_menu
    where 1=1
             <isNotNull property="level" prepend="  and  ">
                             menu_level =#level#
             </isNotNull>
             <isNotNull property="parentIdList" prepend="  and  ">  
                parent_ID IN   
                <iterate property="parentIdList" open="(" close=")" conjunction=",">  
                     #parentIdList[]#  
                </iterate>  
</isNotNull>
 </select>

 

5.终于开始正式开工了:

public class CatchManagerImpl implements ICatchManager

{

 private SwaroSkiDAO swaroSkiDAO;//访问数据库的
 private static final transient Log log = LogFactory .getLog(CatchManagerImpl.class);
 private static ExecutorService pools = Executors.newFixedThreadPool(5);//线程池
 private Semaphore sem=new Semaphore(5);//同步信号,多线程开工

public void catchPages()
 {

//这个sql的意思就是获取指定层,指定父类菜单下面所有子菜单
  CatchMenuQueryModel menu = new CatchMenuQueryModel();
  menu.setFetched(false);
  List<Long> parentIdList=new ArrayList<Long>();
  parentIdList.add(1L);
  parentIdList.add(2L);
  menu.setLevel(2);
  List<CatchMenuDO> menus = swaroSkiDAO.getCatchMenuList(menu);

 

//使用htmlunit去抓去,模拟火狐浏览器并禁止js,activex组建运行,强啊,htmlunit还可以运行js和activex组建.不愧号称java 语言的浏览器啊
  WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
  webClient.setJavaScriptEnabled(false);
  webClient.setActiveXNative(false);
List<String> secondPageUrls = new ArrayList<String>();
  List<String> thirdPageUrls = new ArrayList<String>();
  log.error("第一层抓取开始..........");

if (menus != null && menus.size() > 0)
  {
   for (CatchMenuDO mn : menus)
   {
    String url = "http://www.swarovski-crystallized.com/jewelry/us/";
    url = url + mn.getParentName() + mn.getName_url();
    HtmlPage mainPage = null;
    log.error("开始抓取第一层页面:"+url);
    try
    {
     mainPage = webClient.getPage(url);
    } catch (Exception e)
    {

  • 大小: 267.7 KB
  • 大小: 586.1 KB
  • 大小: 29.5 KB
  • 大小: 409.7 KB
  • 大小: 343.4 KB
1
0
分享到:
评论

相关推荐

    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文档

    HTMLUnit内建了一个基于WebClient的组件,它能够加载网页、执行JavaScript和处理DOM(文档对象模型)。以下是使用HTMLUnit进行此类操作的基本步骤: 1. **导入库**:在Java项目中,你需要添加HTMLUnit的依赖。如果...

    htmlunit-toutiao.zip

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

    htmlunit 及其 依赖包

    HTMLUnit是一个功能强大的Java库,它模拟了一个无头Web浏览器,允许开发者进行自动化网页测试和网络爬虫工作。这个库的核心在于它能够解析HTML、执行JavaScript,并与网页上的元素进行交互,而无需真实地打开一个...

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

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

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

    HtmlUnitDriver HtmlUnitDriver是适用于无头浏览器的WebDriver兼容驱动程序。 消息 下载及安装 Maven / Gradle / ... ...您可以简单地使用HtmlUnit驱动程序类中的构造函数之一 // simple case - no j

    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包

    HTMLUnit是一款功能强大的Java库,它模拟了一个无头Web浏览器,允许开发者在没有真实浏览器环境的情况下执行JavaScript,处理Ajax请求,以及与网页进行交互。这个库对于自动化测试、数据抓取和网页爬虫项目非常有用...

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

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

    htmlunit依赖的所有jar

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

    htmlunit基本jar包

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

    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库,它提供了一个无头浏览器模拟器,用于自动化网页测试和网页抓取。这个库允许开发者在没有实际浏览器的情况下与HTML页面进行交互,执行JavaScript,并获取页面加载后的结果。它对于进行功能测试...

    htmlunit-2.3..zip

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

    htmlunit用到的jar包

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和抓取。这个库允许开发者在不依赖于实际图形用户界面(GUI)的情况下与HTML页面进行交互,例如点击链接、填写表单和执行JavaScript。...

    htmlunit-2.14

    HTMLUnit是一个Java库,它提供了一个无头浏览器模拟器,用于自动化Web页面的测试和抓取。这个库的核心功能是能够解析、渲染和执行JavaScript,从而使得开发者可以在没有实际浏览器环境的情况下,对网页进行功能测试...

Global site tag (gtag.js) - Google Analytics