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;

Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1的更多相关文章

  1. java之网络爬虫介绍

    文章大纲 一.网络爬虫基本介绍二.java常见爬虫框架介绍三.WebCollector实战四.项目源码下载五.参考文章   一.网络爬虫基本介绍 1. 什么是网络爬虫   网络爬虫(又被称为网页蜘蛛, ...

  2. 使用Java实现网络爬虫

    网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 另外一些不常使用的名字还有蚂蚁.自动索引.模 ...

  3. 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)

    原文地址http://blog.csdn.net/qy20115549/article/details/52203722 本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平 ...

  4. Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说

    注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...

  5. Java版网络爬虫基础(转)

    网络爬虫不仅仅可以爬取网站的网页,图片,甚至可以实现抢票功能,网上抢购,机票查询等.这几天看了点基础,记录下来. 网页的关系可以看做是一张很大的图,图的遍历可以分为深度优先和广度优先.网络爬虫采取的广 ...

  6. Java版网络爬虫基础

    网络爬虫不仅仅可以爬取网站的网页,图片,甚至可以实现抢票功能,网上抢购,机票查询等.这几天看了点基础,记录下来. 网页的关系可以看做是一张很大的图,图的遍历可以分为深度优先和广度优先.网络爬虫采取的广 ...

  7. 用Java实现网络爬虫

    myCrawler.java package WebCrawler; import java.io.File; import java.util.ArrayList; import java.util ...

  8. java实现网络爬虫

    import java.io.IOException;   import java.util.HashSet;   import java.util.Set;   import java.util.r ...

  9. JAVA平台上的网络爬虫脚本语言 CrawlScript

    JAVA平台上的网络爬虫脚本语言 CrawlScript 网络爬虫即自动获取网页信息的一种程序,有很多JAVA.C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一 个 ...

随机推荐

  1. js中hover事件时候的BUG以及解决方法

    hover事件是我们在开发前段时候遇到的稀松平常的问题,但是有没有发现会出现有一个BUg,比如,你移动到一个元素上,让它执行一个方法,然后你快速的移入移出的时候,他会进行亮瞎你眼睛的频闪效果,而且跟得 ...

  2. Core Location和MapKit的一些简单使用

      Core Location 1. 基本对象是CLLocation,有属性coordinate, altitude, horizontal/vertical Accuracy, timestamp, ...

  3. c++11——tuple元组

    tuple是一个固定大小的不同类型值的集合,是泛化的 std::pair.可以当做一通用的结构体使用,不需要创建结构体而又获取结构体的特征,在某些情况下可以取代结构体,使程序简洁.直观. 创建tupl ...

  4. 【Laravel】Mac下玩转Laravel

    1 apache 首先Mac系统是自带了Apache,只需要执行 sudo apachectl start 就可以打开Apache服务,然后访问 http://localhost 就可以访问到,it' ...

  5. (分解质因数模板)求 1~r 内与 n 互素的元素个数

    void Solve(LL n){ ///分解质因数保存结果于p p.clear(); ; i*i<=n; i++) ){ p.push_back(i); ) n/=i; } ) p.push_ ...

  6. console输出图案

    探索天猫控制台下的图案是怎么制作的 通过它的源码找到以下代码(还原解压代码) 自己也照葫画瓢搞了个以前公司的logo

  7. 下载组件Jspsmartupload中文乱码解决办法

    先用jdgui反编译jar包,得到源码,然后将源码拷贝到myeclipse中,注意路径是按照源码的路径 打开默认会有错误提示,稍微改改就解决了 1,打开“  SmartUpload.java  ”,查 ...

  8. log4j配置输出到多个日志文件(转)

    參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ...

  9. SVN创建主干,分支、合并分支

    1.创建主干(trunk) 本文承接上文部分内容:http://www.cnblogs.com/dadonggg/p/8383696.html:部分不明,可以访问这篇文章. 当我们创建完代码仓库后,创 ...

  10. 遍历DataSet

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...