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;

猜你喜欢

转载自www.cnblogs.com/lizm166/p/9376369.html