zoukankan      html  css  js  c++  java
  • Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1

    Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1

    一、简介

    版本匹配: WebCollector2.12 + selenium2.44.0 + phantomjs 2.1.1 

    动态网页爬取: WebCollector + selenium + phantomjs

    说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作;2)网页通过JS / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>。

    这里用了WebCollector 2进行爬虫,这东东也方便,不过要支持动态关键还是要靠另外一个API -- selenium 2(集成htmlunit 和 phantomjs).

    二、示例

    /** 
     * Project Name:padwebcollector 
     * File Name:DiscussService.java 
     * Package Name:com.pad.service 
     * Date:2018年7月25日下午4:59:44 
     * Copyright (c) 2018 All Rights Reserved. 
     * 
    */  
      
    package com.pad.service;  
    
    import java.util.ArrayList;
    import java.util.List;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.phantomjs.PhantomJSDriver;
    import cn.edu.hfut.dmic.webcollector.crawler.DeepCrawler;
    import cn.edu.hfut.dmic.webcollector.model.Links;
    import cn.edu.hfut.dmic.webcollector.model.Page;
    import com.pad.entity.DiscussInfo;
    import com.pad.impl.DiscussInfoImpl;
    
    public class DiscussService extends DeepCrawler {
        
        public DiscussService(String crawlPath) {
            super(crawlPath);
            // TODO Auto-generated constructor stub
        }
        
        @Override
        public Links visitAndGetNextLinks(Page page) {
            // TODO Auto-generated method stub
            WebDriver driver = getWebDriver(page);
            Analysis analysis = new Analysis();
            List<DiscussInfo> discusslist = new ArrayList();
            List<WebElement> list = driver.findElements(By.className("content"));
            int i = 1;
            String r_msg = "观望";
            for(WebElement el : list) {
                if(!"".equals(el.getText().trim())){
                    r_msg = analysis.analysis(el.getText());
                }
                
                DiscussInfo info = new DiscussInfo();
                info.setLine_no(String.valueOf(i));
                info.setResult_msg(r_msg);
                info.setContent_msg(el.getText());
                discusslist.add(info);
                System.out.println(i+" "+el.getText());
                i++;
            }
            driver.close();
            driver.quit();
            
            DiscussInfoImpl impl = new DiscussInfoImpl();
            impl.saveData(discusslist);
            return null;
        }
        
        public static WebDriver getWebDriver(Page page) {
            System.setProperty("phantomjs.binary.path", "D:\******\phantomjs.exe");
            WebDriver driver = new PhantomJSDriver();
            driver.get(page.getUrl());
            return driver;
        }
    
        public static void main(String[] args) {
            DiscussService dis=new DiscussService("discuss");   
         dis.addSeed("https://*******/index/0000012"); try { dis.start(1); } catch (Exception e) { e.printStackTrace(); } } }

    注意:WebCollector2.12 和WebCollector2.7区别类 extends 继承分别为 DeepCrawler 和 BreadthCrawler;

  • 相关阅读:
    Windows下安装并设置Redis
    OpenGL纹理上下颠倒翻转的三种解决办法
    如何计算android设备的屏幕物理尺寸
    VS2010中使用QtOpenGL出现 unresolved external symbol __imp__glClear@4 referenced in function之类的错误
    VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
    7月份文章回顾
    NSIS脚本根据操作系统版本动态决定默认安装目录
    WinDriver的一些
    〔池化纲领〕也及链表
    多道程序设计〕协程构造
  • 原文地址:https://www.cnblogs.com/lizm166/p/9376369.html
Copyright © 2011-2022 走看看