package com.ws.crawler.controller;
import com.ws.crawler.config.CrawlerConfig;
import com.ws.lucene.Indexer;
import com.ws.mybatis.bean.News;
import com.ws.util.ConnectUtil;
import com.ws.util.NewsServer;
import com.ws.util.TimeUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileWriter;
import java.util.*;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class CrawlerController {
private static Logger log= LoggerFactory.getLogger(CrawlerController.class);
private HashMap<String,String> subDomainMap;
private CrawlerConfig config;
//private HashSet<String> processedUrlSet=new HashSet<>();
//private LinkedList<String> processUrlList=new LinkedList<>();
/**
* subDomainMap 中存放了新闻分类的标题以及所对应的URL
* 在每一个类别的URL中获取该类别下可下载的新闻页面
*/
public void process(){
Iterator<Map.Entry<String, String>> iterator = subDomainMap.entrySet().iterator();
Indexer indexer=null;
try{
indexer=new Indexer(config.getIndexDir());
}catch (Exception e){
e.printStackTrace();
}
//类别循环处理
HashSet<String> processedUrlSet=new HashSet<>();
while (iterator.hasNext()) {
try {
LinkedList<String> processUrlList=new LinkedList<>();
Map.Entry<String, String> entry = iterator.next();
String className = entry.getKey();
String preDownloadUrl = entry.getValue();
String storePath = config.getStorePath() + className;
log.debug("正在处理 " + className + " : " + preDownloadUrl);
Document document = Jsoup.connect(preDownloadUrl).timeout(50000).get();
/* String pageSourceCode = ConnectUtil.getPageSourceCode(preDownloadUrl);
Document document = Jsoup.parse(pageSourceCode);*/
Elements elements = document.select("a[href]");
//提取该类别下可下载的页面
for (Element element : elements) {
String url = element.attr("abs:href");
log.debug(url);
if (url.matches(preDownloadUrl + config.getDownloadRegex())) {
//判断该url是否被处理过
if (!processedUrlSet.contains(url)) {
processUrlList.add(url);
processedUrlSet.add(url);
}
}
}
//下载该类别下所有的页面
download(processUrlList, storePath,config,indexer,className);
/* Worker worker=new Worker(processUrlList,storePath,config,className,indexer);
Thread thread=new Thread(worker,className);
thread.start();*/
}catch (Exception e){
e.printStackTrace();
}
}
try {
//Thread.currentThread().join();
indexer.close();
}catch (Exception e){
e.printStackTrace();
}
/* try {
Thread.currentThread().join();
}catch (InterruptedException e){
e.printStackTrace();
}*/
}
private void download(LinkedList<String> processUrlList, String storePath, CrawlerConfig config,Indexer indexer ,String className){
System.out.println("线程:"+Thread.currentThread().getName()+"存储路径:"+storePath+" 文件个数:"+processUrlList.size());
int count=0;
File directory=new File(storePath);
if(!directory.exists()){
directory.mkdir();
}
//统计该目录下已有的文件数
if(directory.list()==null){
count=0;
}else{
count=directory.list().length;
}
ArrayList<String> divIdList=config.getDivIdList();
while(!processUrlList.isEmpty()){
try {
String url = processUrlList.pop();
Document document = Jsoup.connect(url).timeout(50000).get();
/* String pageSourceCode=ConnectUtil.getPageSourceCode(url);
Document document=Jsoup.parse(pageSourceCode);*/
String title=document.title();
File file = new File(storePath + "\\" + count++ + ".txt");
file.createNewFile();
log.info("创建"+file.getName()+"文件");
for(int i=0;i<divIdList.size();++i){
Elements elements=document.select("div[id="+divIdList.get(i)+"]");
if(elements!=null) {
for (Element element : elements) {
String text = element.text();
News news=new News(title,url,text, TimeUtil.getToday(),className);
log.info("正在将网页内容写入数据库...");
NewsServer.insert(news);
log.info("网页内容写入数据库完成");
log.info("正在将网页内容写入文件"+file.getName()+"...");
char[] textArray=text.toCharArray();
FileWriter writer = new FileWriter(file);
writer.write("title:"+title + "\r\n");
writer.write("url:"+url + "\r\n");
int index=0;
for(int j=0;j<(textArray.length/100);j++){
writer.write(textArray,index,100);
writer.write("\r\n");
index+=100;
}
writer.write(textArray,index,textArray.length-index);
writer.close();
log.info("网页内容写入文件"+file.getName()+"完成");
//这里的时候文件已经写入完成,可以顺便创建索引
log.info("开始为文件"+file.getName()+"创建索引...");
indexer.indexFile(file,news);
log.info("文件"+file.getName()+"创建索引完成");
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
/* private void download(LinkedList<String> processUrlList,String storePath){
System.out.println("存储路径:"+storePath+" 文件个数:"+processUrlList.size());
int count=0;
File directory=new File(storePath);
if(!directory.exists()){
directory.mkdir();
}
//统计该目录下已有的文件数
if(directory.list()==null){
count=0;
}else{
count=directory.list().length;
}
ArrayList<String> divIdList=config.getDivIdList();
while(!processUrlList.isEmpty()){
try {
String url = processUrlList.pop();
//Document document = Jsoup.connect(url).timeout(50000).get();
String pageSourceCode=ConnectUtil.getPageSourceCode(url);
Document document=Jsoup.parse(pageSourceCode);
String title=document.title();
File file = new File(storePath + "\\" + count++ + ".txt");
file.createNewFile();
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于lucene全文检索引擎实现的短文本匹配系统 ajax什么时候执行success,什么时候执行error 简单的说Ajax请求通过XMLHttpRequest对象发送请求,该对象有四个状态(readyState): 0-未初始化、1-正在初始化、2-发送数据、3-正在发送数据、4-完成。 当XMLHttpRequest.readyState为4时,表示ajax请求已经完成可以得到响应结果。 ajax的success和error方法根据响应状态码来触发。当XMLHttpRequest.status为200的时候,表示响应成功,此时触发success().其他状态码则触发error()。 除了根据响应状态码外,ajax还会在下列情况下走error方法: 返回数据类型不是JSON 网络中断 后台响应中断 使用ajax提交表单数据时,一定要把button写在form外面. jquery获取input type=raido的值 $('input:radio[name="radioname"]:checked').val(); springmvc中返回json数据时,如果json中有中
资源推荐
资源详情
资源评论
收起资源包目录
人工智能-项目实践-检索系统-基于lucene全文检索引擎实现的短文本匹配系统 (156个子文件)
styles.css 2KB
showinf.css 2KB
index.css 2KB
shownotfound.css 1KB
shownewsdetail.css 316B
shouuser.css 217B
regist.css 217B
baidu_logo.gif 705B
shorttextmatching.iml 8KB
shorttextcrawler.iml 8KB
GraduationProject.iml 7KB
CrawlerController.java 14KB
Indexer.java 6KB
LuceneDemo.java 5KB
MyQuery.java 5KB
CrawlerStart.java 4KB
Indexer.java 4KB
UserController.java 3KB
ReaderByIndexer.java 3KB
Lucene.java 3KB
SearchController.java 2KB
ConnectUtil.java 2KB
CrawlerMain.java 2KB
News.java 2KB
GeneralTest.java 2KB
WordCloundDemo.java 2KB
News.java 2KB
SpringMybatis.java 1KB
CrawlerConfig.java 1KB
User.java 1KB
TimeUtil.java 1KB
NewsServer.java 910B
UserMapperTest.java 678B
TimeUtil.java 619B
StaticTest.java 475B
WordCount.java 190B
UserMapper.java 189B
NewsMapper.java 162B
RegexMatch.java 131B
NewsMapper.java 123B
wrapper.jpg 149KB
bg.jpg 7KB
jquery-1.11.2.min.js 94KB
modernizr-2.6.2.min.js 15KB
starbg.js 5KB
jquery.cookie.js 3KB
index.jsp 7KB
ShowInf.jsp 7KB
ShowUser.jsp 4KB
regist.jsp 3KB
ShowNotFound.jsp 1KB
showNewsDetail.jsp 754B
taglib.jsp 446B
footer.jsp 245B
.name 17B
1.png 1.46MB
4.png 200KB
rabit.png 131KB
5.png 90KB
3.png 63KB
2.png 56KB
text.png 14KB
7.png 9KB
baidulogo.png 7KB
6.png 6KB
log4j.properties 1KB
log4j.properties 1KB
jdbc.properties 185B
jdbc.properties 185B
uiDesigner.xml 9KB
pom.xml 8KB
shorttextmatching_war_exploded.xml 7KB
junitgenerator-prj-settings.xml 6KB
applicationContext.xml 3KB
spring-mybatis.xml 2KB
web.xml 2KB
UserMapper.xml 2KB
spring-servlet.xml 1KB
pom.xml 1KB
NewsMapper.xml 1KB
NewsMapper.xml 1KB
compiler.xml 798B
pom.xml 692B
Maven__org_springframework_spring_context_support_4_3_2_RELEASE.xml 681B
Maven__edu_washington_cs_knowitall_opennlp_tokenize_models_1_5.xml 650B
mybatis-config.xml 647B
Maven__org_springframework_spring_expression_4_3_2_RELEASE.xml 646B
Maven__edu_washington_cs_knowitall_opennlp_postag_models_1_5.xml 636B
Maven__org_apache_lucene_lucene_analyzers_smartcn_5_3_1.xml 631B
Maven__edu_washington_cs_knowitall_opennlp_chunk_models_1_5.xml 629B
Maven__org_springframework_spring_aspects_4_3_2_RELEASE.xml 625B
Maven__org_springframework_spring_context_4_3_2_RELEASE.xml 625B
Maven__org_apache_lucene_lucene_analyzers_common_5_3_1.xml 624B
Maven__org_springframework_spring_webmvc_4_3_2_RELEASE.xml 618B
Maven__org_springframework_spring_beans_4_3_2_RELEASE.xml 611B
Maven__org_springframework_spring_core_4_3_2_RELEASE.xml 604B
Maven__org_springframework_spring_jdbc_4_3_2_RELEASE.xml 604B
Maven__org_springframework_spring_test_4_3_2_RELEASE.xml 604B
Maven__org_springframework_spring_orm_4_3_2_RELEASE.xml 597B
Maven__org_springframework_spring_web_4_3_2_RELEASE.xml 597B
共 156 条
- 1
- 2
资源评论
博士僧小星
- 粉丝: 2381
- 资源: 5995
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功