提交 9f957d5a 作者: liuweigang

采集代码更新2

上级 8f456e71
This source diff could not be displayed because it is too large. You can view the blob instead.
KW-20220809-0002
KW-20220602-0003
KW-20220826-0001
KW-20220108-0004
KW-20220602-0002
KW-20220809-0003
KW-20220113-0007
KW-20220602-0006
KW-20220809-0005
KW-20220824-0001
KW-20220809-0004
KW-20220524-0004
KW-20220506-0001
\ No newline at end of file
package com.zzsn; package com.zzsn;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.zzsn.cache.JedisUtil;
import com.zzsn.job.KafkaConsumerJob; import com.zzsn.job.KafkaConsumerJob;
import com.zzsn.search.FileUtil;
import com.zzsn.search.MetaBaiduSearchThread; import com.zzsn.search.MetaBaiduSearchThread;
import com.zzsn.search.entity.KeywordMsg; import com.zzsn.search.entity.KeywordMsg;
import com.zzsn.search.util.SpringContextUtil; import com.zzsn.search.util.SpringContextUtil;
...@@ -24,8 +26,10 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer ...@@ -24,8 +26,10 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import javax.servlet.MultipartConfigElement; import javax.servlet.MultipartConfigElement;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Properties; import java.util.Properties;
@Slf4j @Slf4j
...@@ -41,29 +45,14 @@ public class CrawlerMateSearchApplication extends SpringBootServletInitializer i ...@@ -41,29 +45,14 @@ public class CrawlerMateSearchApplication extends SpringBootServletInitializer i
@Override @Override
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
consumerPartition();
// System.out.println("——————++++++++++++——————===");
// String key="{\n" +
// " \"id\": \"1532331241232039937\",\n" +
// " \"wordsCode\": \"KW-20220602-0003\",\n" +
// " \"wordsName\": \"人工智能应用\",\n" +
// " \"keyWord\": \"(人工智能|人工智能应用|应用|人工智能技术|人工智能领域|人工智能系统|人工智能产品|智能汽车|无人驾驶|人脸识别|人像识别|面部识别|机器翻译|自然语言处理|声纹识别|智能客服|智能音箱|语音识别|语音合成|个性化推荐|图像识别|图像搜索|人工智能应用|大数据分析|大数据|人工智能设计|人机交互|人工智能方案|人工智能解决方案|人工智能实验室|人工智能模型|人工智能问题|人工智能流程|人工智能设备|生成式对抗网络|计算智能|感知智能|认知智能|机器学习|增强学习|结构化数据|非结构化数据|传感器|理解能力|归纳能力|推理能力|特征提取|模式分析|预测|智能农业|智能工业|智能工厂|工业机器人|智能手机|无人驾驶汽车|无人机|智能机器人|环境感知|路径规划|行为决策|算法|智能分拣|设备健康管理|表面缺陷检测|智能决策|数字孪生|创成式设计|需求预测|供应链优化|深度学习|Applications of artificial intelligence|artificial intelligence|Applications|AI|Driverless Car|Automatic Speech Recognition|ASR|Natural Language Processing|NLP|Text To Speech|TTS|GAN| generative adversarial network|SLAM|simultaneous localization and mapping|Generative Design|AI Application in E-Commerce|Personalized Shopping|AI-powered Assistants|Fraud Prevention| Applications Of Artificial Intelligence in Education|Administrative Tasks Automated to Aid Educators|Administrative Tasks Automated to Aid Educators|Creating Smart Content|Voice Assistants|Personalized Learning|Applications of Artificial Intelligence in Lifestyle|Autonomous Vehicles|Spam Filters|Facial Recognition|Recommendation System|Applications of Artificial intelligence in Navigation|Applications of Artificial Intelligence in Robotics|Applications of Artificial Intelligence in Human Resource|Applications of Artificial Intelligence in Healthcare|Applications of Artificial Intelligence in Agriculture|Applications of Artificial Intelligence in Gaming|Applications of Artificial Intelligence in Automobiles|Applications of Artificial Intelligence in Social Media|Applications of Artificial Intelligence in Marketing| Applications of Artificial Intelligence in Chatbots|Applications of of Artificial Intelligence in Finance)+(人工智能|artificial intelligence|AI)\\n\",\n" +
// " \"exclusionWord\": null,\n" +
// " \"status\": \"1\",\n" +
// " \"subjectId\": null,\n" +
// " \"subjectIds\": null,\n" +
// " \"startTime\": null,\n" +
// " \"endTime\": null \n" +
// "}";
// try {
// KeywordMsg keywordMsg = new Gson().fromJson(key, KeywordMsg.class);
// MetaBaiduSearchThread metaSearchThread = new MetaBaiduSearchThread();
// metaSearchThread.keywordMsg = keywordMsg;
// metaSearchThread.crawler();
// }catch (Exception e){
// e.printStackTrace();
// }
// System.out.println("——————++++++++++++——————===");
try {
consumerPartition();
} catch (Exception e) {
consumerPartition();
}
// loadSiteMsgLoc();
} }
public void consumerPartition (){ public void consumerPartition (){
log.info("定时获取mq消息"); log.info("定时获取mq消息");
...@@ -96,7 +85,55 @@ public class CrawlerMateSearchApplication extends SpringBootServletInitializer i ...@@ -96,7 +85,55 @@ public class CrawlerMateSearchApplication extends SpringBootServletInitializer i
} }
} }
public void loadSiteMsgLoc() {
String filepath= Constants.META_SEARCH_KEYWORDPATH;
System.out.println(filepath);
// String filepath="E:\\baidu\\gaojibaidu\\baidu1\\data\\project.txt";
try {
File f = new File(filepath);
List<String> allLines = FileUtil.getFileLines(f, "utf-8");
System.out.println(allLines.size());
for (String keysite:allLines) {
try {
String value = JedisUtil.getNoPrefixString("KEY_WORDS_TO_REDIS::"+keysite);
System.out.println("——————++++++++++++——————===");
String subvalue=value.replace(value.substring(value.indexOf("startTime"),value.indexOf("searchEngines")),"");
KeywordMsg keywordMsg = new Gson().fromJson(subvalue, KeywordMsg.class);
log.info("关键词解析keywordMsg正常");
MetaBaiduSearchThread metaSearchThread = new MetaBaiduSearchThread();
metaSearchThread.keywordMsg = keywordMsg;
metaSearchThread.crawler();
}catch (Exception e){
continue;
}
}
}catch (Exception e){
e.getMessage();
}
}
public void loadloc(){
String key="{\n" +
" \"id\": \"2022090522\",\n" +
" \"wordsCode\": \"KW-20220602-0003\",\n" +
" \"wordsName\": \"2022世界机器人大会\",\n" +
" \"keyWord\": \"2022世界机器人大会\",\n" +
" \"exclusionWord\": null,\n" +
" \"status\": \"1\",\n" +
" \"subjectId\": null,\n" +
" \"subjectIds\": null,\n" +
" \"startTime\": null,\n" +
" \"endTime\": null \n" +
"}";
try {
KeywordMsg keywordMsg = new Gson().fromJson(key, KeywordMsg.class);
MetaBaiduSearchThread metaSearchThread = new MetaBaiduSearchThread();
metaSearchThread.keywordMsg = keywordMsg;
metaSearchThread.crawler();
}catch (Exception e){
e.printStackTrace();
}
}
private static KafkaConsumer<String, String> createConsumer() { private static KafkaConsumer<String, String> createConsumer() {
Properties properties = new Properties(); Properties properties = new Properties();
System.out.println(Constants.KAFKA_CONSUMER_SERVERS); System.out.println(Constants.KAFKA_CONSUMER_SERVERS);
......
...@@ -144,7 +144,13 @@ public class JedisUtil { ...@@ -144,7 +144,13 @@ public class JedisUtil {
} }
return getDefaultJedis().get(PREFIX + key); return getDefaultJedis().get(PREFIX + key);
} }
public static String getNoPrefixString(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
logger.error("key is null");
throw new Exception("key is null");
}
return getDefaultJedis().get(key);
}
public static long setnx(String key, String value) throws Exception { public static long setnx(String key, String value) throws Exception {
if (StringUtils.isEmpty(key)) { if (StringUtils.isEmpty(key)) {
......
package com.zzsn.search; package com.zzsn.search;
import cn.hutool.Hutool;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.zzsn.cache.JedisUtil; import com.zzsn.cache.JedisUtil;
import com.zzsn.cache.MemcachedUtils; import com.zzsn.cache.MemcachedUtils;
...@@ -123,32 +125,34 @@ public class BaiduSearchThread implements Runnable { ...@@ -123,32 +125,34 @@ public class BaiduSearchThread implements Runnable {
}catch (Exception e){ }catch (Exception e){
log.info("缓存出问题"); log.info("缓存出问题");
} }
String url1= "https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]"; // String url1= "https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]";
// String url1= "https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&rsv_dl=news_b_pn&pn=[pn]"; String url1= "https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&rsv_dl=news_b_pn&pn=[pn]";
// String url1= "https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1"; // String url1= "https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1";
String url=""; String url="";
List<String> urlList = new ArrayList<String>(); List<String> urlList = new ArrayList<String>();
log.info("url:" + url); log.info("url:" + url);
String charset = "utf-8"; String charset = "utf-8";
// Long orgId = Long.parseLong("2022082801"); // Long orgId = Long.parseLong("2022082801");
Long orgId = Long.parseLong("202208290111"); // Long orgId = Long.parseLong("2022090301"); //企业
Long tid = Long.parseLong("202208290111"); // Long orgId = Long.parseLong("20220903022");//机器
Long orgId = Long.parseLong("20220905022");//智能
Long tid = Long.parseLong("20220905022");
String proxyid=Constants.PROXY; String proxyid=Constants.PROXY;
if(proxyid.equals("1")) { if(proxyid.equals("1")) {
CatchWebNews(RecorderUtil.CatchWebOfBaiduByProxy(urlList, charset, orgId, tid),kWord); CatchWebNews(RecorderUtil.CatchWebOfBaiduByProxy(urlList, charset, orgId, tid),kWord);
}else { }else {
// for (int i = 0; i < 2; i++) { for (int i = 0; i <30; i++) {
// String urla = url1.replace("[keyword]",kWord); String urla = url1.replace("[keyword]",kWord);
//// urla = urla.replace("[startTime]",startTime); // urla = urla.replace("[startTime]",startTime);
//// urla = urla.replace("[endTime]",endTime); // urla = urla.replace("[endTime]",endTime);
// urla=urla.replace("[pn]",i*10+""); urla=urla.replace("[pn]",i*10+"");
// urlList.add(urla); urlList.add(urla);
// } }
// List<CatchWebByMetaSearch> catchWebByMetaSearches = RecorderUtil.catchWebOfBaiduList(urlList, charset, orgId, tid); // List<CatchWebByMetaSearch> catchWebByMetaSearches = RecorderUtil.catchWebOfBaiduList(urlList, charset, orgId, tid);
try { try {
String urla = url1.replace("[keyword]",kWord); // String urla = url1.replace("[keyword]",kWord);
urlList.add(urla); // urlList.add(urla);
RecorderUtil.CatchWebDetailOfBaidu(urlList, charset, orgId, tid, kWord); RecorderUtil.CatchWebDetailOfBaidu(urlList, charset, orgId, tid, kWord);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
...@@ -501,8 +505,10 @@ public static String dateToStamp(String s) { ...@@ -501,8 +505,10 @@ public static String dateToStamp(String s) {
String content=docInfo.getContentNoTag(); String content=docInfo.getContentNoTag();
String words=docInfo.getContentWithTag(); String words=docInfo.getContentWithTag();
String keywords=docInfo.getKeywords(); String keywords=docInfo.getKeywords();
System.out.println("保存关键词keywords:"+keywords);
String sourceaddress=docInfo.getSourceaddress(); String sourceaddress=docInfo.getSourceaddress();
String fromwhere="百度搜索";
String fromwhere="百度搜索"+DateUtil.now();
DBManager dm = new DBManager(); DBManager dm = new DBManager();
String[] coulmn = new String[]{id, sid, title,summary,publish_date,origin,author,content,words,keywords,sourceaddress,fromwhere}; String[] coulmn = new String[]{id, sid, title,summary,publish_date,origin,author,content,words,keywords,sourceaddress,fromwhere};
......
...@@ -81,7 +81,7 @@ public class MetaBaiduSearchThread implements Runnable { ...@@ -81,7 +81,7 @@ public class MetaBaiduSearchThread implements Runnable {
public KafkaTemplate kafkaTemplate= SpringContextUtil.getBean(KafkaTemplate.class); public KafkaTemplate kafkaTemplate= SpringContextUtil.getBean(KafkaTemplate.class);
@Async("asyncexecutorServiceWebBaidu") // @Async("asyncexecutorServiceWebBaidu")
public void crawler(){ public void crawler(){
//对传进来的关键词组进行组合 //对传进来的关键词组进行组合
String keyWord = keywordMsg.getKeyWord(); String keyWord = keywordMsg.getKeyWord();
...@@ -114,27 +114,27 @@ public class MetaBaiduSearchThread implements Runnable { ...@@ -114,27 +114,27 @@ public class MetaBaiduSearchThread implements Runnable {
} }
String keyid=cache_key+"_"+keywordMsg.getId(); String keyid=cache_key+"_"+keywordMsg.getId();
for (String kWord :keyWords) { for (String kWord :keyWords) {
try { // try {
boolean sismember = JedisUtil.sismember(keyid, kWord); // boolean sismember = JedisUtil.sismember(keyid, kWord);
if (sismember) { // if (sismember) {
// continue; // if(StringUtils.isEmpty(keywordMsg.getEndTime().toString())||Long.parseLong(nowTime)*1000>Long.parseLong(endTime)){
if(StringUtils.isEmpty(keywordMsg.getEndTime().toString())||Long.parseLong(nowTime)*1000>Long.parseLong(endTime)){ // startTime=nowTime;
startTime=nowTime; // endTime=nowTime;
endTime=nowTime; // }
} // }
} // }catch (Exception e){
}catch (Exception e){ // log.info("缓存出问题");
log.info("缓存出问题"); // continue;
} // }
// String url1= "https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1"; // String url1= "https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1";
String url1= Constants.META_SEARCH_URL; String url1= Constants.META_SEARCH_URL;
String url=""; String url="";
List<String> urlList = new ArrayList<String>(); List<String> urlList = new ArrayList<String>();
log.info("url:" + url); log.info("url:" + url);
String charset = "utf-8"; String charset = "utf-8";
Long orgId = Long.parseLong(keywordMsg.getId()); Long orgId = Long.parseLong(keywordMsg.getWordsCode());//关键词组编码
Long tid = Long.parseLong(keywordMsg.getId()); Long tid = Long.parseLong(keywordMsg.getId());//关键词组id
for (int i = 0; i < 76; i++) { for (int i = 0; i < 6; i++) {
String urla = url1.replace("[keyword]",kWord); String urla = url1.replace("[keyword]",kWord);
urla = urla.replace("[startTime]",startTime); urla = urla.replace("[startTime]",startTime);
urla = urla.replace("[endTime]",endTime); urla = urla.replace("[endTime]",endTime);
...@@ -147,6 +147,7 @@ public class MetaBaiduSearchThread implements Runnable { ...@@ -147,6 +147,7 @@ public class MetaBaiduSearchThread implements Runnable {
JedisUtil.sadd(keyid, kWord); JedisUtil.sadd(keyid, kWord);
}catch (Exception e){ }catch (Exception e){
log.info("缓存保存数据失败!"); log.info("缓存保存数据失败!");
continue;
} }
} }
} }
...@@ -206,16 +207,27 @@ public class MetaBaiduSearchThread implements Runnable { ...@@ -206,16 +207,27 @@ public class MetaBaiduSearchThread implements Runnable {
// 判断该网址是否存在于缓存池中 // 判断该网址是否存在于缓存池中
String orgId = String.valueOf(cwbm.getOrgId()); String orgId = String.valueOf(cwbm.getOrgId());
try { try {
String urlflag = JedisUtil.getString( Constants.SOURCEADDRESS+"_"+orgId+"_"+cwbm.getSourceaddress()); boolean sismember = JedisUtil.sismember("baidu::"+orgId, cwbm.getSourceaddress());
if (!org.apache.commons.lang3.StringUtils.isEmpty(urlflag)) { if (sismember) {
log.info(cwbm.getSourceaddress()+" 数据重复"); log.info("百度采集信息重复:" + cwbm.getTitle() + " :" + cwbm.getSourceaddress());
repeat++; repeat++;
continue; continue;
} }
}catch (Exception e){ } catch (Exception e) {
log.info("redis获取信息失败"); log.info("redis获取信息失败");
} }
// try {
// String urlflag = JedisUtil.getString( Constants.SOURCEADDRESS+"_"+orgId+"_"+cwbm.getSourceaddress());
// if (!org.apache.commons.lang3.StringUtils.isEmpty(urlflag)) {
// log.info(cwbm.getSourceaddress()+" 数据重复");
// repeat++;
// continue;
// }
// }catch (Exception e){
// log.info("redis获取信息失败");
// }
String infourl = cwbm.getSourceaddress(); String infourl = cwbm.getSourceaddress();
String infodata = ""; String infodata = "";
String charset = ""; String charset = "";
...@@ -354,13 +366,13 @@ public class MetaBaiduSearchThread implements Runnable { ...@@ -354,13 +366,13 @@ public class MetaBaiduSearchThread implements Runnable {
log.info("title:"+docInfo.getTitle()+"|address:"+docInfo.getSourceaddress()+ log.info("title:"+docInfo.getTitle()+"|address:"+docInfo.getSourceaddress()+
"|content:"+(docInfo.getContentNoTag()==null?"":docInfo.getContentNoTag().length()+"")); "|content:"+(docInfo.getContentNoTag()==null?"":docInfo.getContentNoTag().length()+""));
// intsertData(docInfo); intsertData(docInfo);
//信息转换 //信息转换
ClbAnsProcessitem processitem = docInfoTrans2Processitem(docInfo); ClbAnsProcessitem processitem = docInfoTrans2Processitem(docInfo);
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
String docjson = mapper.writeValueAsString(processitem); String docjson = mapper.writeValueAsString(processitem);
System.out.println(docjson); System.out.println(docjson);
kafkaTemplate.send(Constants.KAFKA_PRODUCT_TOPIC, docjson); // kafkaTemplate.send(Constants.KAFKA_PRODUCT_TOPIC, docjson);
log.info("发送成功到kafka"); log.info("发送成功到kafka");
}else { }else {
log.info("资讯发布时间:"+docInfo.getPublishDate()); log.info("资讯发布时间:"+docInfo.getPublishDate());
......
...@@ -28,10 +28,11 @@ public class KeywordMsg { ...@@ -28,10 +28,11 @@ public class KeywordMsg {
private List<String> subjectIds; private List<String> subjectIds;
private Long startTime; private Long startTime;
// private List<String> startTime;
private Long endTime; private Long endTime;
//需要启动的信息采集器 //需要启动的信息采集器
private List<String> searchEngines; // private List<String> searchEngines;
//采集的要求(1:标题 2:正文 3:全文) //采集的要求(1:标题 2:正文 3:全文)
private String crawlerType; private String crawlerType;
......
...@@ -324,14 +324,6 @@ public class RecorderUtil { ...@@ -324,14 +324,6 @@ public class RecorderUtil {
log.info("url处理异常!"); log.info("url处理异常!");
} }
docstr = proxyRequest(uri_code); docstr = proxyRequest(uri_code);
// String proxyIP = getProxyIP();
// log.info("使用的代理IP:"+proxyIP );
// String[] proxys=proxyIP.split("-");
// String proxyHost = proxys[0];
// int proxyPort = Integer.parseInt(proxys[1]);
// String userName = proxys[2];
// String password = proxys[3];
// docstr = HttpClientProxy.build(proxyHost, proxyPort, userName, password).requestUrl(uri_code); // 代理认证
log.info("请求内容:"+docstr); log.info("请求内容:"+docstr);
} catch (Exception e) { } catch (Exception e) {
log.info("使用代理请求异常"); log.info("使用代理请求异常");
...@@ -361,6 +353,7 @@ public class RecorderUtil { ...@@ -361,6 +353,7 @@ public class RecorderUtil {
Thread.sleep(1000); Thread.sleep(1000);
SeleniumTime seleniumTime2=new SeleniumTime(); SeleniumTime seleniumTime2=new SeleniumTime();
docstr=seleniumTime2.getScopehtml(urlList.get(i)); docstr=seleniumTime2.getScopehtml(urlList.get(i));
doc = Jsoup.parse(docstr);
firstElementsLink = doc.select("div[id=\"content_left\"]>div.new-pmd"); firstElementsLink = doc.select("div[id=\"content_left\"]>div.new-pmd");
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
...@@ -406,7 +399,7 @@ public class RecorderUtil { ...@@ -406,7 +399,7 @@ public class RecorderUtil {
//对采集一个列表解析一个列表的详情 //对采集一个列表解析一个列表的详情
MetaBaiduSearchThread baiduSearchThread=new MetaBaiduSearchThread(); MetaBaiduSearchThread baiduSearchThread=new MetaBaiduSearchThread();
int repeat = baiduSearchThread.CatchWebNews(metaSearchList, keywords); int repeat = baiduSearchThread.CatchWebNews(metaSearchList, keywords);
if(repeat/metaSearchList.size()>0.7){ if(repeat/metaSearchList.size()>0.6){
break; break;
} }
catchWebByMetaSearchList.addAll(metaSearchList); catchWebByMetaSearchList.addAll(metaSearchList);
...@@ -487,9 +480,9 @@ public class RecorderUtil { ...@@ -487,9 +480,9 @@ public class RecorderUtil {
} }
BaiduSearchThread baiduSearchThread=new BaiduSearchThread(); BaiduSearchThread baiduSearchThread=new BaiduSearchThread();
int repeat = baiduSearchThread.CatchWebNews(metaSearchList, keyword); int repeat = baiduSearchThread.CatchWebNews(metaSearchList, keyword);
// if(repeat/metaSearchList.size()>0.7){ if(repeat/metaSearchList.size()>0.7){
// break; break;
// } }
catchWebByMetaSearchList.addAll(metaSearchList); catchWebByMetaSearchList.addAll(metaSearchList);
} }
return catchWebByMetaSearchList; return catchWebByMetaSearchList;
......
...@@ -8,8 +8,18 @@ public class KeyTest { ...@@ -8,8 +8,18 @@ public class KeyTest {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(RandomUtil.randomInt(5)); System.out.println(RandomUtil.randomInt(5));
// String value=" {\"crawlerType\":\"3\",\"id\":\"1556845711450906626\",\"keyWord\":\"(双百企业|双百行动)+(中核矿业科技集团有限公司|中核控制系统工程有限公司|中国核工业华兴建设有限公司|中国核工业二三建设有限公司|北京神舟航天软件技术有限公司|上海航天设备制造总厂有限公司|航天时代电子技术股份有限公司|中国四维测绘技术有限公司|湖南航天有限责任公司|航天云网科技发展有限责任公司|航天科工空间工程发展有限公司|海鹰航空通 用装备有限责任公司|航天科工火箭技术有限公司|中航通用飞机有限责任公司|中国航空技术国际控股有限公司|中航机载系统有限公司| 中国船舶(香港)航运租赁有限公司|九江精达检测技术有限公司|重庆前卫科技集团有限公司|中船重工(邯郸)派瑞特种气体有限公司|山西汾西重工有限责任公司|武汉重型机床集团有限公司|内蒙古北方重工业集团有限公司|万友汽车投资有限公司|四川华川工业有限公司|华中药业股份有限公司|中国电子科技网络信息安全有限公司|中电力神有限公司|中电科电子装备集团有限公司|北京首信科技股份有限 公司|中电科机器人有限公司|中国航发商用发动机有限责任公司|中国石油天然气股份有限公司吐哈油田分公司|中国石油集团渤海石油装备制造有限公司|昆仑能源有限公司|中国石油天然气股份有限公司润滑油分公司|中国石化润滑油有限公司|中石化石油机械股份有限公司|中石化易捷销售有限公司|中国石油化工股份有限公司镇海炼化分公司|中海油田服务股份有限公司|中海油安全技术服务有限公司|南瑞 集团有限公司|国网电动汽车服务有限公司|国网江苏综合能源服务有限公司|国网电子商务有限公司(国网雄安金融科技集团)|平高集团有限公司|浙江省送变电工程有限公司|深圳供电局有限公司|南方电网综合能源有限公司|广东电网能源发展有限公司|南方电网大数据服 务有限公司|华能新能源股份有限公司|山东新能泰山发电股份有限公司|华能资本服务有限公司|大唐京津冀能源开发有限公司|大唐环境 产业集团股份有限公司|华电江苏能源有限公司|华电重工股份有限公司|上海电力股份有限公司|国家电投集团内蒙古能源有限公司|中国 电力国际发展有限公司|中国长江电力股份有限公司|三峡资本控股有限责任公司|中国水利电力对外有限公司|国能包神铁路集团有限责任公司|国能龙源环保有限公司|国电联合动力技术有限公司|中国通信服务股份有限公司|天翼电子商务有限公司|联通智网科技有限公司|中国联合网络通信有限公司云南省分公司|咪咕文化科技有限公司|中国移动通信集团终端有限公司|中移在线服务有限公司|中国长城科技集团股份有限公司|华大半导体有限公司|中国电子系统技术有限公司|一汽模具制造有限公司|岚图汽车科技有限公司|东风锻造有限公司|东风鸿泰控股集团有限公司|一重集团大连工程技术有限公司|一重集团大连核电石化有限公司|中工国际工程股份有限公司|中国联合工程有限公司|中国中元国际工程有限公司|哈尔滨汽轮机厂有限责任公司|哈电集团哈尔滨电站阀门有限公司|东方电气集团东方锅炉股份有限公司|东方电气风电有限公司|鞍钢集团矿业有限公司|成都积微物联集团股份有限公司|鞍钢集团工程技术有限公司|宝山钢铁股份有限公司|武钢集团有限公司|宝武特种冶金有限公司|宝钢金属有限公司|上海宝钢包装股份有限公司|太原钢铁(集团)有限公司|西南铝业(集团 )有限责任公司|中铝华中铜业有限公司|中远海运集装箱运输有限公司|宁波中远海运物流有限公司|中国国际货运航空有限公司|东方航 空物流有限公司|中国联合航空有限公司|南方航空物流有限公司|南航通用航空有限公司|中化能源股份有限公司|中化国际(控股)股份 有限公司|南通星辰合成材料有限公司|沈阳化工股份有限公司|江苏淮河化工有限公司|中粮酒业投资有限公司|大悦城控股集团股份有限 公司|中钨高新材料股份有限公司|中冶赛迪集团有限公司|五矿发展股份有限公司|中国有色工程有限公司|中国十七冶集团有限公司|中冶南方工程技术有限公司|中国纺织科学研究院有限公司|沈阳机床(集团)有限责任公司|国中康健集团有限公司|中建生态环境集团有限公司|中建一局集团第二建筑有限公司|中国储备棉管理有限公司|中央储备粮顺义直属库有限公司|中央储备粮榆树直属库有限公司|中国国 投高新产业投资有限公司|国投生物科技投资有限公司|招商局重庆交通科研设计院有限公司|招商证券股份有限公司|招商局海通贸易有限公司|招商局积余产业运营服务股份有限公司|招商局港口集团股份有限公司|华润微电子控股有限公司|华润化学材料科技股份有限公司| 中国旅游旅行服务有限公司|上海航空工业(集团)有限公司|上海翔运国际货运有限公司|中国新时代控股集团有限公司|中国环境保护集团有限公司|中咨工程管理咨询有限公司|中咨海外咨询有限公司|中储发展股份有限公司|岳阳林纸股份有限公司|中特物流有限公司|中国煤矿机械装备有限责任公司|中煤西安设计工程有限责任公司|中煤科工集团西安研究院有限公司|中煤科工集团重庆设计研究院有限公司|中机寰宇认证检验有限公司|北自所(北京)科技发展有限公司|沈阳铸研科技有限公司|中钢国际工程技术股份有限公司|中钢集团马鞍山矿山研究总院股份有限公司|中钢集团邢台机械轧辊有限公司|中钢洛耐科技股份有限公司|北京钢研高纳科技股份有限公司|安泰科技股份有限公司|中国化学工程重型机械化有限公司|中国化学工程第九建设有限公司|化学工业岩土工程有限公司|中盐股份有限公司|中盐内蒙 古化工股份有限公司|北新集团建材股份有限公司|中材高新材料股份有限公司|中国中材国际工程股份有限公司|合肥水泥研究设计院有限公司|赛马物联科技(宁夏)有限公司|大冶有色金属集团控股有限公司|中国有色集团沈阳矿业投资有限公司|中国有色桂林矿产地质研究院有限公司|中国有色集团(广西)平桂飞碟股份有限公司|中国有色金属建设股份有限公司|国合通用测试评价认证股份公司|有研粉末新材料(北京)有限公司|北矿检测技术有限公司|北矿新材科技有限公司|中智上海经济技术合作公司|中智管理咨询有限公司|北京建筑机 械化研究院有限公司|中车株洲电机有限公司|中车齐车集团有限公司|中车长春轨道客车股份有限公司|中车株洲电力机车研究所有限公司|中车株洲电力机车有限公司|中车大连机车车辆有限公司|中车青岛四方机车车辆股份有限公司|北京全路通信信号研究设计院集团有限公司|通号智慧城市研究设计院有限公司|中铁九局集团有限公司|中铁二院工程集团有限责任公司|中铁二十三局集团有限公司|中铁第四勘 察设计院集团有限公司|中铁第五勘察设计院集团有限公司|中交房地产集团有限公司|中交疏浚(集团)股份有限公司|中国交通信息中心有限公司|上海振华重工(集团)股份有限公司|中交水运规划设计院有限公司|中交一公局集团有限公司|电信科学技术第十研究所有限公司|电信科学技术第一研究所有限公司|辰芯科技有限公司|电信科学技术第五研究所有限公司|中牧实业股份有限公司|中国牧工商集团有 限公司|中农发种业集团股份有限公司|绥芬河国林木业城投资有限公司|杭州千岛湖发展集团有限公司|中国医药投资有限公司|中国医药 集团联合工程有限公司|国药控股股份有限公司|保利国际控股有限公司|保利文化集团股份有限公司|中国工艺集团有限公司|中国中丝集 团有限公司|保利发展控股集团股份有限公司|北京国标建筑科技有限责任公司|都市高科(北京)环境科技有限公司|正元地理信息有限责任公司|中煤长江地质集团有限公司|中煤航测遥感集团有限公司|南京际华三五二一环保科技有限公司|新兴铸管股份有限公司|中国航空 结算有限责任公司|中国航油集团石油有限公司|重庆市泽胜船务(集团)有限公司|中国民航技术装备有限责任公司|昆明利顿人通信息服务有限公司|中国水利水电第十四工程局有限公司|中国电建集团中南勘测设计研究院有限公司|中电建建筑集团有限公司|中国电建集团贵州工程有限公司|中国电建集团市政规划设计研究院有限公司|中国能源建设集团湖南省电力设计院有限公司|中国能源建设集团安徽电力 建设第二工程有限公司|中国黄金集团黄金珠宝股份有限公司|西藏华泰龙矿业开发有限公司|中广核核电运营有限公司|中广核研究院有限公司|中广核核技术发展股份有限公司|中国广核能源国际控股有限公司|中国广核新能源控股有限公司|北京易华录信息技术股份有限公司|北方华录文化科技(北京)有限公司|北京华录新媒信息技术有限公司|深圳华侨城文化旅游科技集团有限公司|深圳市易平方网络科技有限公司|南光国际会议展览有限公司|西安西电电力系统有限公司|西安西电开关电气有限公司|中铁物轨道科技服务集团有限公司|武汉中 铁伊通物流有限公司|中国国新基金管理有限公司|国新资本有限公司|中国文化产业发展集团有限公司|铁塔能源有限公司|首钢集团有限 公司|北京能源集团有限责任公司|唐山冀东水泥股份有限公司|北京外企人力资源服务有限公司|北方华创科技集团股份有限公司|天津光 电集团有限公司|天津津融资产管理有限公司|天津海光药业股份有限公司|天津液压机械(集团)有限公司|金开新能源股份有限公司|天 纺标检测认证股份有限公司|滨海投资有限公司|河北省资产管理有限公司|唐山钢铁集团有限责任公司|河北建投国融能源服务有限公司| 河北国控资本管理有限公司|秦皇岛港股份有限公司|财达证券股份有限公司|山西杏花村汾酒集团有限责任公司|山西焦煤集团有限责任公司|华阳新材料科技集团有限公司|格盟国际能源有限公司|晋能清洁能源有限公司|太重集团向明智能装备股份有限公司|内蒙古交通投资 (集团)有限责任公司|内蒙古电力集团综合能源有限责任公司|内蒙古能源发电投资集团有限公司|包头钢铁(集团)有限责任公司|辽宁省交通规划设计院有限责任公司|凌源钢铁集团有限责任公司|中国吉林森林工业集团有限责任公司|吉林省农牧科技有限公司|长春市热力(集团)有限责任公司|吉林化纤集团有限责任公司|长春一汽富维汽车零部件股份有限公司|龙建路桥股份有限公司|黑龙江中盟龙新化工有限公司|上海电气环保集团|上海制皂(集团)有限公司|上汽安吉物流股份有限公司|云赛智联股份有限公司|东方国际创业股份有限公 司|老凤祥股份有限公司|上海医药集团股份有限公司|上海海立(集团)股份有限公司|上海燃气有限公司|江苏省国信集团有限公司|华泰证券股份有限公司|江苏省盐业集团有限责任公司|南京金陵饭店集团有限公司|南京旅游集团有限责任公司|徐工集团工程机械有限公司| 浙江省浙商资产管理有限公司|浙江富春紫光环保股份有限公司|浙江高速信息工程技术有限公司|杭州热联集团股份有限公司|杭州热电集团股份有限公司|安徽铜冠铜箔有限公司|国元农业保险股份有限公司|安徽华塑股份有限公司|安徽皖垦种业股份有限公司|安徽长城军工 股份有限公司|福建省国有资产管理有限公司|厦门新立基股份有限公司|福建龙溪轴承(集团)股份有限公司|福建福日电子股份有限公司|福人木业(福州)有限公司|厦门钨业股份有限公司|厦门国际港务股份有限公司|江西铜业集团有限公司|新余钢铁集团有限公司|江西省绿色产业集团有限公司|江西省天然气(赣投气通)控股有限公司|中鼎国际建设集团有限责任公司|江铃汽车集团公司|江西钨业股份有限公司|山东黄金集团有限公司|鲁信创业投资集团股份有限公司|万华化学集团股份有限公司|兖州煤业股份有限公司|山东国惠投资有限公 司|济南二机床集团有限公司|郑州煤矿机械集团股份有限公司|开封平煤新型炭材料科技有限公司|三门峡戴卡轮毂制造有限公司|河南省 中原石油天然气集团有限公司|安阳钢铁集团有限责任公司|河南投资集团有限公司|中原环保股份有限公司|河南资产管理有限公司|湖北 省铁路建设投资集团有限责任公司|中南建筑设计院股份有限公司|湖北机场集团航空物流有限公司|湖北广盐蓝天盐化有限公司|武汉建工集团股份有限公司|湖南建工集团有限公司|湖南省交通水利建设集团有限公司|湖南湘电动力有限公司|湖南新天地保安服务有限公司|湖 南省建筑设计院有限公司|广东省产权交易集团有限公司|广东粤海控股集团有限公司|广东省环保集团有限公司|广东华隧建设集团股份有限公司|广州无线电集团有限公司|广州汽车集团股份有限公司|广东省机场管理集团翼通商务航空服务有限公司|广州医药集团有限公司| 广州越秀集团股份有限公司|珠海华发集团有限公司|中国航发湖南南方宇航工业有限公司|广东省广新控股集团有限公司|广东省广物控股集团有限公司|广州交易集团有限公司|广东省广晟控股集团有限公司|广西柳工集团有限公司|广西荣桂物流集团有限公司|北部湾港股份 有限公司|广西广投医药健康产业集团有限公司|海南省建设集团有限公司|海南海汽运输集团股份有限公司|海南天然橡胶产业集团股份有限公司|海南海控能源股份有限公司|重庆农村商业银行股份有限公司|重庆渝富控股集团有限公司|重庆商社(集团)有限公司|重庆医药 健康产业有限公司|重庆三峰环境产业集团有限公司|重庆对外经贸(集团)有限公司|重庆交通运输控股(集团)有限公司|重庆国际投资咨询集团有限公司|四川省商业投资集团有限责任公司|四川航空集团有限责任公司|华西牙科有限责任公司|蜀道交通服务集团有限责任公司|成都产业投资集团有限公司|四川九洲卫星导航投资发展有限公司|成都市新筑路桥机械股份有限公司|贵州盘江煤电集团有限责任公司|贵州中建伟业建设(集团)有限责任公司|贵州金州电力有限责任公司|贵州轮胎股份有限公司|云南省贵金属新材料控股集团有限公司| 云南云天化股份有限公司|云南锡业集团(控股)有限责任公司|云南省能源投资集团有限公司|云南省设计院集团|云南天朗节能环保集团有限公司|陕西能源投资股份有限公司|陕西钢铁集团有限公司|陕西北元化工集团股份有限公司|陕西延长中煤榆林能源化工有限公司|陕 西三秦环保科技股份有限公司|陕西建工集团股份有限公司|陕西燃气集团新能源发展有限公司|陕西汽车控股集团有限公司|陕西法士特汽车传动集团有限责任公司|陕西旅游集团有限公司|金川集团股份有限公司|西北永新集团有限公司|甘肃省公路交通建设集团有限公司|兰 州中川国际机场有限公司|甘肃省国有资产投资集团有限公司|甘肃工程咨询集团有限公司|西宁国家低碳产业基金投资管理有限公司|宁夏水务投资集团有限公司|宁夏建设投资集团有限公司|银川通联资本投资运营有限公司|西部黄金股份有限公司|新疆交通建设集团股份有限公司|新疆美克化工股份有限公司|新疆蓝山屯河化工股份有限公司|新疆生产建设兵团石油有限公司|新疆冠农果茸集团股份有限公司|新 疆生产建设兵团建设工程(集团)有限责任公司|大连市建设投资集团有限公司|瓦房店轴承集团有限责任公司|三寰集团有限公司|宁波国际投资咨询有限公司|宁波市交通建设工程试验检测中心有限公司|厦门国贸控股集团有限公司|厦门象屿集团有限公司|厦门厦工机械股份有限公司|厦门建发集团有限公司|双星集团有限责任公司|青岛啤酒集团有限公司|青岛海湾集团有限公司|青岛水务集团环境能源有限公 司|深圳市投资控股有限公司|深圳市粮食集团有限公司|深圳国际控股有限公司|深圳市特发集团有限公司|深圳市资本运营集团有限公司|)\",\"searchEngines\":[\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"12\"],\"startTime\":1577808000000,\"status\":\"1\",\"wordsCode\":\"KW-20220809-0004\",\"wordsName\":\"双百企业\"}"; String value="{\"@class\":\"com.zzsn.clb.common.model.task.dto.titr.KeyWordsDTO\"," +
// KeywordMsg keywordMsg = new Gson().fromJson(value, KeywordMsg.class); "\"id\":\"1532331241232039937\",\"wordsCode\":\"KW-20220602-0003\"," +
"\"wordsName\":\"人工智能应用\"," +
"\"keyWord\":\"(人工智能|人工智能应用|应用|人工智能技术|人工智能领域|人工智能系统|人工智能产品|智能汽车|无人驾驶|人脸识别|人像识别|面部识别|机器翻译|自然语言处理|声纹识别|智能客服|智能音箱|语音识别|语音合成|个性化推荐|图像识别|图像搜索|人工智能应用|大数据分析|大数据|人工智能设计|人机交互|人工智能方案|人工智能解决方案|人工智能实验室|人工智能模型|人工智能问题|人工智能流程|人工智能设备|生成式对抗网络|计算智能|感知智能|认知智能|机器学习|增强学习|结构化数据|非结构化数据|传感器|理解能力|归纳能力|推理能力|特征提取|模式分析|预测|智能农业|智能工业|智能工厂|工业机器人|智能手机|无人驾驶汽车|无人机|智能机器人|环境感知|路径规划|行为决策|算法|智能分拣|设备健康管理|表面缺陷检测|智能决策|数字孪生|创成式设计|需求预测|供应链优化|深度学习|Applications of artificial intelligence|artificial intelligence|Applications|AI|Driverless Car|Automatic Speech Recognition|ASR|Natural Language Processing|NLP|Text To Speech|TTS|GAN| generative adversarial network|SLAM|simultaneous localization and mapping|Generative Design|AI Application in E-Commerce|Personalized Shopping|AI-powered Assistants|Fraud Prevention| Applications Of Artificial Intelligence in Education|Administrative Tasks Automated to Aid Educators|Administrative Tasks Automated to Aid Educators|Creating Smart Content|Voice Assistants|Personalized Learning|Applications of Artificial Intelligence in Lifestyle|Autonomous Vehicles|Spam Filters|Facial Recognition|Recommendation System|Applications of Artificial intelligence in Navigation|Applications of Artificial Intelligence in Robotics|Applications of Artificial Intelligence in Human Resource|Applications of Artificial Intelligence in Healthcare|Applications of Artificial Intelligence in Agriculture|Applications of Artificial Intelligence in Gaming|Applications of Artificial Intelligence in Automobiles|Applications of Artificial Intelligence in Social Media|Applications of Artificial Intelligence in Marketing| Applications of Artificial Intelligence in Chatbots|Applications of of Artificial Intelligence in Finance)+(人工智能|artificial intelligence|AI)\\n\"," +
"\"exclusionWord\":null,\"status\":\"1\",\"subjectId\":null," +
"\"subjectIds\":null,\"startTime\":[\"java.util.Date\",1640966400000],\"endTime\":null," +
"\"searchEngines\":[\"java.util.ArrayList\",[\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"10\"]],\"crawlerType\":\"1\"}";
System.out.println(value.substring(value.indexOf("startTime"),value.indexOf("searchEngines")));
String aa=value.replace(value.substring(value.indexOf("startTime"),value.indexOf("searchEngines")),"");
// System.out.println(aa);
KeywordMsg keywordMsg = new Gson().fromJson(value, KeywordMsg.class);
// System.out.println(keywordMsg); // System.out.println(keywordMsg);
} }
} }
...@@ -72,7 +72,7 @@ public class SeleniumTime { ...@@ -72,7 +72,7 @@ public class SeleniumTime {
chromeOptions.addArguments("headless");//无界面参数 chromeOptions.addArguments("headless");//无界面参数
chromeOptions.addArguments("no-sandbox");//禁用沙盒 就是被这个参数搞了一天 chromeOptions.addArguments("no-sandbox");//禁用沙盒 就是被这个参数搞了一天
} }
chromeOptions.addArguments("headless");//无界面参数 // chromeOptions.addArguments("headless");//无界面参数
driver = new ChromeDriver(chromeOptions);//生成实例 driver = new ChromeDriver(chromeOptions);//生成实例
String html=""; String html="";
try{ try{
......
...@@ -44,13 +44,17 @@ KAFKA_PRODUCT_GOOGLE_URLLIST_TOPIC=google_crawler_urlList ...@@ -44,13 +44,17 @@ KAFKA_PRODUCT_GOOGLE_URLLIST_TOPIC=google_crawler_urlList
#搜索地址 #搜索地址
#META_SEARCH_URL=https://www.google.com.hk/search?q=[keyword]&newwindow=1&tbs=cdr:1,cd_min:[startTime],cd_max:[endTime]&tbm=nws&ei=fYBfYp-CHffo2roPhoOPsA4&start=[pn] #META_SEARCH_URL=https://www.google.com.hk/search?q=[keyword]&newwindow=1&tbs=cdr:1,cd_min:[startTime],cd_max:[endTime]&tbm=nws&ei=fYBfYp-CHffo2roPhoOPsA4&start=[pn]
#META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word= #META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=
#META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&rsv_dl=news_b_pn&pn=[pn] META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]&x_bfe_rqs=03E80&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&rsv_dl=news_b_pn&pn=[pn]
META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword] #META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=[keyword]
#META_SEARCH_URL=https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1 #META_SEARCH_URL=https://www.baidu.com/s?wd=[keyword]&pn=[pn]&oq=[keyword]&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&gpc=stf=[startTime],[endTime]|stftype=2&tfflag=1
META_SEARCH_KEYWORDPATH=E:\\ideaWorkerspace\\meta_crawler\\baidu_search\\data\\project.txt META_SEARCH_KEYWORDPATH=E:\\ideaWorkerspace\\meta_crawler\\baidu_search\\data\\project.txt
#META_SEARCH_KEYWORDPATH=E:\\ideaWorkerspace\\meta_crawler\\baidu_search\\data\\projectkw.txt
# Redis settings # Redis settings
#redis.host=114.115.236.206
#redis.port=6379
#redis.pass=clbzzsn
redis.host=127.0.0.1 redis.host=127.0.0.1
redis.port=6379 redis.port=6379
redis.pass=xxxxxx redis.pass=xxxxxx
......
...@@ -46,12 +46,12 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple ...@@ -46,12 +46,12 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple
@Override @Override
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
// try { try {
// loadSiteMsg(); loadSiteMsg();
// } catch (Exception e) { } catch (Exception e) {
// loadSiteMsg(); loadSiteMsg();
// } }
loadSiteMsgLoc(); // loadSiteMsgLoc();
// loadSiteMsgLoc2(); // loadSiteMsgLoc2();
// loadSiteMsgLoc3(); // loadSiteMsgLoc3();
} }
......
package com.zzsn.test;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 通过域名解析IP
*
* @author java小强
*/
public class TestInetAddress {
public static void main(String args[]) {
TestInetAddress address = new TestInetAddress();
String domain = "www.163.com";
System.out.println("要获取域名的地址为: " + domain);
InetAddress[] array = address.getServerIP(domain);
int count = 0;
for (int i = 0; i < array.length; i++) {
System.out.println("ip:" + i + "--》" + array[i].getHostAddress());
count++;
}
System.out.println("该域名解析到IP: " + count);
}
/**
* 获得某域名的IP地址
*/
public InetAddress[] getServerIP(String domain) {
InetAddress[] myServer = null;
try {
myServer = InetAddress.getAllByName(domain);
} catch (UnknownHostException e) {
e.printStackTrace();
}
return myServer;
}
}
...@@ -63,14 +63,34 @@ public class DriverUtil { ...@@ -63,14 +63,34 @@ public class DriverUtil {
// log.error("未获取到驱动服务地址、sessionId"); // log.error("未获取到驱动服务地址、sessionId");
// return null; // return null;
// } // }
ReuseWebDriver driver=null;
try {
driver = new ReuseWebDriver(serverUrl, sessionId);
System.out.println(driver.connectTestFail());
if (driver.connectTestFail()) {
// 若驱动返回错误码,重新创建驱动服务并缓存
ChromeDriver chromeDriver = DriverUtil.reconnectDriver();
serverUrl = DriverUtil.getServerUrl(chromeDriver);
ReuseWebDriver driver = new ReuseWebDriver(serverUrl, sessionId); if (chromeDriver.getSessionId() != null) {
if (driver.connectTestFail()) { sessionId = chromeDriver.getSessionId().toString();
}
Map<String, String> map = new HashMap<>(2);
map.put("sessionId", sessionId);
map.put("serverUrl", serverUrl);
// 缓存浏览器驱动信息
JedisUtil.setString(Constants.SELENIUM_DRIVER_CACHE, JSON.toJSONString(map), -1);
System.out.println("获取驱动driver失败重新设置:" + Constants.SELENIUM_DRIVER_CACHE + "::" + JSON.toJSONString(map));
driver = new ReuseWebDriver(serverUrl, sessionId);
}
}catch (Exception e){
System.out.println("出现异常");
// 若驱动返回错误码,重新创建驱动服务并缓存 // 若驱动返回错误码,重新创建驱动服务并缓存
ChromeDriver chromeDriver = DriverUtil.reconnectDriver(); ChromeDriver chromeDriver = DriverUtil.reconnectDriver();
serverUrl = DriverUtil.getServerUrl(chromeDriver); serverUrl = DriverUtil.getServerUrl(chromeDriver);
if(chromeDriver.getSessionId() != null) { if (chromeDriver.getSessionId() != null) {
sessionId = chromeDriver.getSessionId().toString(); sessionId = chromeDriver.getSessionId().toString();
} }
...@@ -79,6 +99,7 @@ public class DriverUtil { ...@@ -79,6 +99,7 @@ public class DriverUtil {
map.put("serverUrl", serverUrl); map.put("serverUrl", serverUrl);
// 缓存浏览器驱动信息 // 缓存浏览器驱动信息
JedisUtil.setString(Constants.SELENIUM_DRIVER_CACHE, JSON.toJSONString(map), -1); JedisUtil.setString(Constants.SELENIUM_DRIVER_CACHE, JSON.toJSONString(map), -1);
System.out.println("获取驱动driver失败重新设置:" + Constants.SELENIUM_DRIVER_CACHE + "::" + JSON.toJSONString(map));
driver = new ReuseWebDriver(serverUrl, sessionId); driver = new ReuseWebDriver(serverUrl, sessionId);
} }
return driver; return driver;
...@@ -97,6 +118,7 @@ public class DriverUtil { ...@@ -97,6 +118,7 @@ public class DriverUtil {
} }
public static Map<String, String> getSessionInfo() throws Exception{ public static Map<String, String> getSessionInfo() throws Exception{
String cacheInfo = JedisUtil.getString(Constants.SELENIUM_DRIVER_CACHE); String cacheInfo = JedisUtil.getString(Constants.SELENIUM_DRIVER_CACHE);
System.out.println("获取驱动session:"+Constants.SELENIUM_DRIVER_CACHE+"::"+cacheInfo);
Map<String, String> map = JSON.parseObject(cacheInfo, Map.class); Map<String, String> map = JSON.parseObject(cacheInfo, Map.class);
if(map==null || map.size()<1) { if(map==null || map.size()<1) {
map = new HashMap<>(2); map = new HashMap<>(2);
...@@ -104,6 +126,7 @@ public class DriverUtil { ...@@ -104,6 +126,7 @@ public class DriverUtil {
map.put("serverUrl", "https://www.baidu.com/"); map.put("serverUrl", "https://www.baidu.com/");
// 缓存浏览器驱动信息 // 缓存浏览器驱动信息
JedisUtil.setString(Constants.SELENIUM_DRIVER_CACHE, JSON.toJSONString(map), -1); JedisUtil.setString(Constants.SELENIUM_DRIVER_CACHE, JSON.toJSONString(map), -1);
System.out.println("获取驱动session失败重新设置:"+Constants.SELENIUM_DRIVER_CACHE+"::"+JSON.toJSONString(map));
} }
return map; return map;
} }
......
...@@ -48,6 +48,7 @@ boiler.timeout.readTimeout=6000 ...@@ -48,6 +48,7 @@ boiler.timeout.readTimeout=6000
logging.level.root=info logging.level.root=info
logging.level.org.springframework.web=info logging.level.org.springframework.web=info
logging.level.org.hibernate=info logging.level.org.hibernate=info
logging.level.com.gargoylesoftware=off
logging.config=classpath:logback-spring.xml logging.config=classpath:logback-spring.xml
kafka.consumer.task=0 0/2 * * * ? kafka.consumer.task=0 0/2 * * * ?
......
...@@ -3,6 +3,15 @@ package com.zzsn; ...@@ -3,6 +3,15 @@ package com.zzsn;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.zzsn.search.MetaSoSearchThread; import com.zzsn.search.MetaSoSearchThread;
import com.zzsn.search.entity.KeywordMsg; import com.zzsn.search.entity.KeywordMsg;
import com.zzsn.utility.index.Constants;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.CommonClientConfigs;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
...@@ -10,6 +19,11 @@ import org.springframework.boot.builder.SpringApplicationBuilder; ...@@ -10,6 +19,11 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Properties;
@Slf4j
@SpringBootApplication(scanBasePackages = "com.zzsn") @SpringBootApplication(scanBasePackages = "com.zzsn")
public class CrawlerStaticApplication extends SpringBootServletInitializer implements CommandLineRunner { public class CrawlerStaticApplication extends SpringBootServletInitializer implements CommandLineRunner {
@Override @Override
...@@ -41,6 +55,57 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple ...@@ -41,6 +55,57 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple
// MetaSoSearchThread metaSearchThread=new MetaSoSearchThread(); // MetaSoSearchThread metaSearchThread=new MetaSoSearchThread();
// metaSearchThread.keywordMsg=keywordMsg; // metaSearchThread.keywordMsg=keywordMsg;
// metaSearchThread.crawler(); // metaSearchThread.crawler();
soKeyword ();
}
public void soKeyword (){
log.info("定时获取mq消息");
//1.创建消费者
KafkaConsumer<String, String> consumer = createConsumer();
// consumer.subscribe(Arrays.asList(Constants.KAFKA_CONSUMER_TOPIC));
ArrayList<TopicPartition> topicPartitions = new ArrayList<>();
String kafkaConsumerPartition = Constants.KAFKA_CONSUMER_PARTITION;
String[] partitions = kafkaConsumerPartition.split(",");
for (int i = 0; i < partitions.length; i++) {
topicPartitions.add(new TopicPartition(Constants.KAFKA_CONSUMER_TOPIC, Integer.parseInt(partitions[i])));
}
consumer.assign(topicPartitions);
try{
while(true){
//消费者是一个长期运行的程序,通过持续轮询向Kafka请求数据。在其他线程中调用consumer.wakeup()可以退出循环
//在0ms内等待Kafka的broker返回数据.超时参数指定poll在多久之后可以返回,不管有没有可用的数据都要返回
ConsumerRecords<String, String> records = consumer.poll(0);
consumer.commitSync();
for(ConsumerRecord record : records){
KeywordMsg keywordMsg = new Gson().fromJson(record.value().toString(), KeywordMsg.class);
MetaSoSearchThread metaSearchThread=new MetaSoSearchThread();
metaSearchThread.keywordMsg=keywordMsg;
metaSearchThread.crawler();
}
}
}catch (Exception e){
consumer = createConsumer();
consumer.subscribe(Arrays.asList(Constants.KAFKA_CONSUMER_TOPIC));
}
} }
private static KafkaConsumer<String, String> createConsumer() {
Properties properties = new Properties();
System.out.println(Constants.KAFKA_CONSUMER_SERVERS);
properties.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, Constants.KAFKA_CONSUMER_SERVERS);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.GROUP_ID_CONFIG, Constants.KAFKA_CONSUMER_GROUP_ID);
properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
//kafka数据的读取方式
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,Constants.KAFKA_CONSUMER_AUTO_OFFSET_RESET);
// latest earliest
//时间间隔设置为1h
properties.put("max.poll.interval.ms", 60*60*1000);
properties.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 1);
return new KafkaConsumer<>(properties);
}
} }
\ No newline at end of file
...@@ -48,7 +48,7 @@ public class KafkaConsumerSoTask { ...@@ -48,7 +48,7 @@ public class KafkaConsumerSoTask {
} }
//打包编译时修改定时启动的任务 如果是搜索关键词放开consumerKeyword 如果是内容解析放开consumerDetailUrl 上面的定时任务 //打包编译时修改定时启动的任务 如果是搜索关键词放开consumerKeyword 如果是内容解析放开consumerDetailUrl 上面的定时任务
@Scheduled(cron = "0 0/3 * * * ?") // @Scheduled(cron = "0 0/3 * * * ?")
@Async("webExecutor") @Async("webExecutor")
public void consumerKeyword (){ public void consumerKeyword (){
log.info("定时获取mq消息"); log.info("定时获取mq消息");
......
...@@ -58,9 +58,11 @@ public class MetaSoRecorderUtil { ...@@ -58,9 +58,11 @@ public class MetaSoRecorderUtil {
doc = conn.timeout(10000).get(); doc = conn.timeout(10000).get();
} catch (Exception ex) { } catch (Exception ex) {
// ex.printStackTrace(); // ex.printStackTrace();
System.out.println("360搜索中该关键词搜索没有相关新闻!"); log.info("360搜索关键词异常");
// continue; // continue;
} }
// 测试获取内容通过模拟浏览器获取
String docstr=ChromeUtil.getChromeDoc(urlList.get(i));
if(doc==null){ if(doc==null){
String proxyIP = getProxyIP(); String proxyIP = getProxyIP();
log.info("使用的代理IP:"+proxyIP ); log.info("使用的代理IP:"+proxyIP );
...@@ -69,10 +71,10 @@ public class MetaSoRecorderUtil { ...@@ -69,10 +71,10 @@ public class MetaSoRecorderUtil {
int proxyPort = Integer.parseInt(proxys[1]); int proxyPort = Integer.parseInt(proxys[1]);
String userName = proxys[2]; String userName = proxys[2];
String password = proxys[3]; String password = proxys[3];
String docstr = HttpClientProxy.build(proxyHost, proxyPort, userName, password).requestUrl(uri_code); // 代理认证 docstr = HttpClientProxy.build(proxyHost, proxyPort, userName, password).requestUrl(uri_code); // 代理认证
log.info("请求内容:"+docstr); log.info("请求内容:"+docstr);
doc=Jsoup.parse(docstr);
} }
doc=Jsoup.parse(docstr);
System.out.println("----360搜索----" + uri); System.out.println("----360搜索----" + uri);
Elements firstElementsLink = doc.select("li[data-from=\"news\"]"); Elements firstElementsLink = doc.select("li[data-from=\"news\"]");
List<CatchWebByMetaSearch> metaSearchList = new ArrayList<CatchWebByMetaSearch>(); List<CatchWebByMetaSearch> metaSearchList = new ArrayList<CatchWebByMetaSearch>();
......
...@@ -110,7 +110,7 @@ public class MetaSoSearchThread implements Runnable { ...@@ -110,7 +110,7 @@ public class MetaSoSearchThread implements Runnable {
if(proxyid.equals("1")) { if(proxyid.equals("1")) {
CatchWebNews(SoRecorderUtil.CatchWebOfGoogle1(urlList, charset, orgId, tid),kWord); CatchWebNews(SoRecorderUtil.CatchWebOfGoogle1(urlList, charset, orgId, tid),kWord);
}else { }else {
for (int i = 1; i < 100; i++) { for (int i = 1; i < 50; i++) {
String urla = url1.replace("[keyword]",kWord); String urla = url1.replace("[keyword]",kWord);
urla=urla.replace("[page_num]",i+""); urla=urla.replace("[page_num]",i+"");
urlList.add(urla); urlList.add(urla);
......
英特尔+重大战略 KW-20220809-0002
英特尔+科技资源 KW-20220602-0003
英特尔+科技攻关 KW-20220826-0001
英特尔+科技创新 KW-20220108-0004
英特尔+技术创新 KW-20220602-0002
英特尔+国家战略 KW-20220809-0003
英特尔+创新发展 KW-20220113-0007
英特尔+协同创新 KW-20220113-0004
英特尔+人工智能 KW-20220809-0005
英特尔+自主创新 KW-20220824-0001
英特尔+知识产权 KW-20220809-0004
英特尔+关键核心技术 KW-20220524-0004
英特尔+科技创新能力 KW-20220113-0005
英特尔+竞争力 KW-20220113-0006
英特尔+高新技术 \ No newline at end of file
英特尔+科技成果
英特尔+创新能力
英特尔+产业创新
英特尔+创新驱动
英特尔+核心技术
英特尔+创新引领
英特尔+关键技术
英特尔+制度创新
英特尔+研发投入
英特尔+技术研发
英特尔+人才队伍
英特尔+人才创新
英特尔+科技人才
超微半导体+重大战略
超微半导体+国家战略
超微半导体+科技资源
超微半导体+科技攻关
超微半导体+科技创新
超微半导体+技术创新
超微半导体+创新发展
超微半导体+协同创新
超微半导体+人工智能
超微半导体+自主创新
超微半导体+知识产权
超微半导体+关键核心技术
超微半导体+科技创新能力
超微半导体+竞争力
超微半导体+高新技术
超微半导体+科技成果
超微半导体+创新能力
超微半导体+产业创新
超微半导体+创新驱动
超微半导体+核心技术
超微半导体+创新引领
超微半导体+关键技术
超微半导体+制度创新
超微半导体+研发投入
超微半导体+技术研发
超微半导体+人才队伍
超微半导体+人才创新
超微半导体+科技人才
高通公司+重大战略
高通公司+国家战略
高通公司+科技资源
高通公司+科技攻关
高通公司+科技创新
高通公司+技术创新
高通公司+创新发展
高通公司+协同创新
高通公司+人工智能
高通公司+自主创新
高通公司+知识产权
高通公司+关键核心技术
高通公司+科技创新能力
高通公司+竞争力
高通公司+高新技术
高通公司+科技成果
高通公司+创新能力
高通公司+产业创新
高通公司+创新驱动
高通公司+核心技术
高通公司+创新引领
高通公司+关键技术
高通公司+制度创新
高通公司+研发投入
高通公司+技术研发
高通公司+人才队伍
高通公司+人才创新
高通公司+科技人才
日本电信电话株式会社+重大战略
日本电信电话株式会社+国家战略
日本电信电话株式会社+科技资源
日本电信电话株式会社+科技攻关
日本电信电话株式会社+科技创新
日本电信电话株式会社+技术创新
日本电信电话株式会社+创新发展
日本电信电话株式会社+协同创新
日本电信电话株式会社+人工智能
日本电信电话株式会社+自主创新
日本电信电话株式会社+知识产权
日本电信电话株式会社+关键核心技术
日本电信电话株式会社+科技创新能力
日本电信电话株式会社+竞争力
日本电信电话株式会社+高新技术
日本电信电话株式会社+科技成果
日本电信电话株式会社+创新能力
日本电信电话株式会社+产业创新
日本电信电话株式会社+创新驱动
日本电信电话株式会社+核心技术
日本电信电话株式会社+创新引领
日本电信电话株式会社+关键技术
日本电信电话株式会社+制度创新
日本电信电话株式会社+研发投入
日本电信电话株式会社+技术研发
日本电信电话株式会社+人才队伍
日本电信电话株式会社+人才创新
日本电信电话株式会社+科技人才
爱立信+重大战略
爱立信+国家战略
爱立信+科技资源
爱立信+科技攻关
爱立信+科技创新
爱立信+技术创新
爱立信+创新发展
爱立信+协同创新
爱立信+人工智能
爱立信+自主创新
爱立信+知识产权
爱立信+关键核心技术
爱立信+科技创新能力
爱立信+竞争力
爱立信+高新技术
爱立信+科技成果
爱立信+创新能力
爱立信+产业创新
爱立信+创新驱动
爱立信+核心技术
爱立信+创新引领
爱立信+关键技术
爱立信+制度创新
爱立信+研发投入
爱立信+技术研发
爱立信+人才队伍
爱立信+人才创新
爱立信+科技人才
东芝+重大战略
东芝+国家战略
东芝+科技资源
东芝+科技攻关
东芝+科技创新
东芝+技术创新
东芝+创新发展
东芝+协同创新
东芝+人工智能
东芝+自主创新
东芝+知识产权
东芝+关键核心技术
东芝+科技创新能力
东芝+竞争力
东芝+高新技术
东芝+科技成果
东芝+创新能力
东芝+产业创新
东芝+创新驱动
东芝+核心技术
东芝+创新引领
东芝+关键技术
东芝+制度创新
东芝+研发投入
东芝+技术研发
东芝+人才队伍
东芝+人才创新
东芝+科技人才
LG电子+重大战略
LG电子+国家战略
LG电子+科技资源
LG电子+科技攻关
LG电子+科技创新
LG电子+技术创新
LG电子+创新发展
LG电子+协同创新
LG电子+人工智能
LG电子+自主创新
LG电子+知识产权
LG电子+关键核心技术
LG电子+科技创新能力
LG电子+竞争力
LG电子+高新技术
LG电子+科技成果
LG电子+创新能力
LG电子+产业创新
LG电子+创新驱动
LG电子+核心技术
LG电子+创新引领
LG电子+关键技术
LG电子+制度创新
LG电子+研发投入
LG电子+技术研发
LG电子+人才队伍
LG电子+人才创新
LG电子+科技人才
三星+重大战略
三星+国家战略
三星+科技资源
三星+科技攻关
三星+科技创新
三星+技术创新
三星+创新发展
三星+协同创新
三星+人工智能
三星+自主创新
三星+知识产权
三星+关键核心技术
三星+科技创新能力
三星+竞争力
三星+高新技术
三星+科技成果
三星+创新能力
三星+产业创新
三星+创新驱动
三星+核心技术
三星+创新引领
三星+关键技术
三星+制度创新
三星+研发投入
三星+技术研发
三星+人才队伍
三星+人才创新
三星+科技人才
泰科电子+重大战略
泰科电子+国家战略
泰科电子+科技资源
泰科电子+科技攻关
泰科电子+科技创新
泰科电子+技术创新
泰科电子+创新发展
泰科电子+协同创新
泰科电子+人工智能
泰科电子+自主创新
泰科电子+知识产权
泰科电子+关键核心技术
泰科电子+科技创新能力
泰科电子+竞争力
泰科电子+高新技术
泰科电子+科技成果
泰科电子+创新能力
泰科电子+产业创新
泰科电子+创新驱动
泰科电子+核心技术
泰科电子+创新引领
泰科电子+关键技术
泰科电子+制度创新
泰科电子+研发投入
泰科电子+技术研发
泰科电子+人才队伍
泰科电子+人才创新
泰科电子+科技人才
苹果+重大战略
苹果+国家战略
苹果+科技资源
苹果+科技攻关
苹果+科技创新
苹果+技术创新
苹果+创新发展
苹果+协同创新
苹果+人工智能
苹果+自主创新
苹果+知识产权
苹果+关键核心技术
苹果+科技创新能力
苹果+竞争力
苹果+高新技术
苹果+科技成果
苹果+创新能力
苹果+产业创新
苹果+创新驱动
苹果+核心技术
苹果+创新引领
苹果+关键技术
苹果+制度创新
苹果+研发投入
苹果+技术研发
苹果+人才队伍
苹果+人才创新
苹果+科技人才
富士通+重大战略
富士通+国家战略
富士通+科技资源
富士通+科技攻关
富士通+科技创新
富士通+技术创新
富士通+创新发展
富士通+协同创新
富士通+人工智能
富士通+自主创新
富士通+知识产权
富士通+关键核心技术
富士通+科技创新能力
富士通+竞争力
富士通+高新技术
富士通+科技成果
富士通+创新能力
富士通+产业创新
富士通+创新驱动
富士通+核心技术
富士通+创新引领
富士通+关键技术
富士通+制度创新
富士通+研发投入
富士通+技术研发
富士通+人才队伍
富士通+人才创新
富士通+科技人才
日本电气+重大战略
日本电气+国家战略
日本电气+科技资源
日本电气+科技攻关
日本电气+科技创新
日本电气+技术创新
日本电气+创新发展
日本电气+协同创新
日本电气+人工智能
日本电气+自主创新
日本电气+知识产权
日本电气+关键核心技术
日本电气+科技创新能力
日本电气+竞争力
日本电气+高新技术
日本电气+科技成果
日本电气+创新能力
日本电气+产业创新
日本电气+创新驱动
日本电气+核心技术
日本电气+创新引领
日本电气+关键技术
日本电气+制度创新
日本电气+研发投入
日本电气+技术研发
日本电气+人才队伍
日本电气+人才创新
日本电气+科技人才
奥林巴斯+重大战略
奥林巴斯+国家战略
奥林巴斯+科技资源
奥林巴斯+科技攻关
奥林巴斯+科技创新
奥林巴斯+技术创新
奥林巴斯+创新发展
奥林巴斯+协同创新
奥林巴斯+人工智能
奥林巴斯+自主创新
奥林巴斯+知识产权
奥林巴斯+关键核心技术
奥林巴斯+科技创新能力
奥林巴斯+竞争力
奥林巴斯+高新技术
奥林巴斯+科技成果
奥林巴斯+创新能力
奥林巴斯+产业创新
奥林巴斯+创新驱动
奥林巴斯+核心技术
奥林巴斯+创新引领
奥林巴斯+关键技术
奥林巴斯+制度创新
奥林巴斯+研发投入
奥林巴斯+技术研发
奥林巴斯+人才队伍
奥林巴斯+人才创新
奥林巴斯+科技人才
索尼+重大战略
索尼+国家战略
索尼+科技资源
索尼+科技攻关
索尼+科技创新
索尼+技术创新
索尼+创新发展
索尼+协同创新
索尼+人工智能
索尼+自主创新
索尼+知识产权
索尼+关键核心技术
索尼+科技创新能力
索尼+竞争力
索尼+高新技术
索尼+科技成果
索尼+创新能力
索尼+产业创新
索尼+创新驱动
索尼+核心技术
索尼+创新引领
索尼+关键技术
索尼+制度创新
索尼+研发投入
索尼+技术研发
索尼+人才队伍
索尼+人才创新
索尼+科技人才
通用电气+重大战略
通用电气+国家战略
通用电气+科技资源
通用电气+科技攻关
通用电气+科技创新
通用电气+技术创新
通用电气+创新发展
通用电气+协同创新
通用电气+人工智能
通用电气+自主创新
通用电气+知识产权
通用电气+关键核心技术
通用电气+科技创新能力
通用电气+竞争力
通用电气+高新技术
通用电气+科技成果
通用电气+创新能力
通用电气+产业创新
通用电气+创新驱动
通用电气+核心技术
通用电气+创新引领
通用电气+关键技术
通用电气+制度创新
通用电气+研发投入
通用电气+技术研发
通用电气+人才队伍
通用电气+人才创新
通用电气+科技人才
\ No newline at end of file
package com.zzsn; package com.zzsn;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.zzsn.cache.JedisUtil;
import com.zzsn.job.KafkaConsumerSougouTask; import com.zzsn.job.KafkaConsumerSougouTask;
import com.zzsn.search.FileUtil;
import com.zzsn.search.MetaSouGouSearchThread; import com.zzsn.search.MetaSouGouSearchThread;
import com.zzsn.search.entity.KeywordMsg; import com.zzsn.search.entity.KeywordMsg;
import com.zzsn.utility.index.Constants; import com.zzsn.utility.index.Constants;
...@@ -20,8 +22,10 @@ import org.springframework.boot.builder.SpringApplicationBuilder; ...@@ -20,8 +22,10 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Properties; import java.util.Properties;
@Slf4j @Slf4j
...@@ -56,7 +60,40 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple ...@@ -56,7 +60,40 @@ public class CrawlerStaticApplication extends SpringBootServletInitializer imple
// MetaSouGouSearchThread metaSearchThread=new MetaSouGouSearchThread(); // MetaSouGouSearchThread metaSearchThread=new MetaSouGouSearchThread();
// metaSearchThread.keywordMsg=keywordMsg; // metaSearchThread.keywordMsg=keywordMsg;
// metaSearchThread.crawler(); // metaSearchThread.crawler();
consumerKeyword ();
try {
consumerKeyword ();
} catch (Exception e) {
consumerKeyword ();
}
// loadSiteMsgLoc();
}
public void loadSiteMsgLoc() {
String filepath= Constants.META_SEARCH_KEYWORDPATH;
System.out.println(filepath);
// String filepath="E:\\baidu\\gaojibaidu\\baidu1\\data\\project.txt";
try {
File f = new File(filepath);
List<String> allLines = FileUtil.getFileLines(f, "utf-8");
System.out.println(allLines.size());
for (String keysite:allLines) {
try {
String value = JedisUtil.getNoPrefixString("KEY_WORDS_TO_REDIS::"+keysite);
System.out.println("——————++++++++++++——————===");
String subvalue=value.replace(value.substring(value.indexOf("startTime"),value.indexOf("searchEngines")),"");
KeywordMsg keywordMsg = new Gson().fromJson(subvalue, KeywordMsg.class);
log.info("关键词解析keywordMsg正常");
MetaSouGouSearchThread metaSearchThread=new MetaSouGouSearchThread();
metaSearchThread.keywordMsg=keywordMsg;
metaSearchThread.crawler();
}catch (Exception e){
continue;
}
}
}catch (Exception e){
e.getMessage();
}
} }
public void consumerKeyword (){ public void consumerKeyword (){
......
...@@ -52,7 +52,11 @@ public class JedisUtil { ...@@ -52,7 +52,11 @@ public class JedisUtil {
config.setMaxWaitMillis(Long.parseLong(maxWaitMillis)); config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
config.setTestOnBorrow(Boolean.valueOf(testOnBorrow)); config.setTestOnBorrow(Boolean.valueOf(testOnBorrow));
jedisPool = new JedisPool(config, host, Integer.parseInt(port), Integer.parseInt(timeout)); if(pass.equals("xxxxxx")){
jedisPool = new JedisPool(config, host, Integer.parseInt(port), Integer.parseInt(timeout));
}else{
jedisPool = new JedisPool(config, host, Integer.parseInt(port), Integer.parseInt(timeout),pass);
}
} }
private static Jedis getJedis() { private static Jedis getJedis() {
init(); init();
...@@ -135,7 +139,14 @@ public class JedisUtil { ...@@ -135,7 +139,14 @@ public class JedisUtil {
} }
return getDefaultJedis().get(PREFIX + key); return getDefaultJedis().get(PREFIX + key);
} }
public static String getNoPrefixString(String key) throws Exception {
if (StringUtils.isEmpty(key)) {
logger.error("key is null");
throw new Exception("key is null");
}
return getDefaultJedis().get(key);
}
public static long setnx(String key, String value) throws Exception { public static long setnx(String key, String value) throws Exception {
if (StringUtils.isEmpty(key)) { if (StringUtils.isEmpty(key)) {
......
...@@ -130,7 +130,7 @@ public class SouGouRecorderUtil { ...@@ -130,7 +130,7 @@ public class SouGouRecorderUtil {
catchWebByMetaSearches.add(catchMetaSearch); catchWebByMetaSearches.add(catchMetaSearch);
DetailSouGouSearchThread detailSouGouSearchThread=new DetailSouGouSearchThread(); DetailSouGouSearchThread detailSouGouSearchThread=new DetailSouGouSearchThread();
detailSouGouSearchThread.CatchWebNews(catchWebByMetaSearches,""); detailSouGouSearchThread.CatchWebNews(catchWebByMetaSearches,"2022世界机器人大会");
// ObjectMapper mapper = new ObjectMapper(); // ObjectMapper mapper = new ObjectMapper();
// try { // try {
// String docjson = mapper.writeValueAsString(catchMetaSearch); // String docjson = mapper.writeValueAsString(catchMetaSearch);
......
...@@ -28,9 +28,42 @@ public class WebSouGouSearch { ...@@ -28,9 +28,42 @@ public class WebSouGouSearch {
File f = new File(filepath); File f = new File(filepath);
List<String> allLines = FileUtil.getFileLines(f, "utf-8"); List<String> allLines = FileUtil.getFileLines(f, "utf-8");
paser(allLines); paser2();
} }
public static void paser2(){
ExecutorService threadPool = Executors.newFixedThreadPool(1);
Vector<WebSouGouSearchThread> workers = new Vector<WebSouGouSearchThread>();
int index = 0;
try {
List<String> keywordList=new ArrayList<>();
keywordList.add("2022世界机器人大会");
WebSouGouSearchThread webSouGouSearchThread = new WebSouGouSearchThread();
webSouGouSearchThread.setThreadId(index++);
webSouGouSearchThread.setKeywords(keywordList);
KeywordMsg keywordMsg=new KeywordMsg();
keywordMsg.setId("2022090333");
keywordMsg.setKeyWord("2022世界机器人大会");
webSouGouSearchThread.setKeywordMsg(keywordMsg);
workers.add(webSouGouSearchThread);
threadPool.execute(webSouGouSearchThread);
}catch (Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
}
threadPool.shutdown();
while (true) {
boolean isfinished = threadPool.isTerminated();
if (isfinished)
break;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
public static void paser(List<String> keywords){ public static void paser(List<String> keywords){
List<List<String>> splitList = splitList(keywords,5000); List<List<String>> splitList = splitList(keywords,5000);
ExecutorService threadPool = Executors.newFixedThreadPool(1); ExecutorService threadPool = Executors.newFixedThreadPool(1);
...@@ -42,8 +75,8 @@ public class WebSouGouSearch { ...@@ -42,8 +75,8 @@ public class WebSouGouSearch {
webSouGouSearchThread.setThreadId(index++); webSouGouSearchThread.setThreadId(index++);
webSouGouSearchThread.setKeywords(keywordList); webSouGouSearchThread.setKeywords(keywordList);
KeywordMsg keywordMsg=new KeywordMsg(); KeywordMsg keywordMsg=new KeywordMsg();
keywordMsg.setId("2022052504"); keywordMsg.setId("2022090333");
keywordMsg.setKeyWord("衣学东"); keywordMsg.setKeyWord("2022世界机器人大会");
webSouGouSearchThread.setKeywordMsg(keywordMsg); webSouGouSearchThread.setKeywordMsg(keywordMsg);
workers.add(webSouGouSearchThread); workers.add(webSouGouSearchThread);
threadPool.execute(webSouGouSearchThread); threadPool.execute(webSouGouSearchThread);
......
...@@ -108,7 +108,7 @@ public class WebSouGouSearchThread implements Runnable { ...@@ -108,7 +108,7 @@ public class WebSouGouSearchThread implements Runnable {
if(proxyid.equals("1")) { if(proxyid.equals("1")) {
// CatchWebNews(SouGouRecorderUtil.CatchWebOfGoogle1(urlList, charset, orgId, tid),kWord); // CatchWebNews(SouGouRecorderUtil.CatchWebOfGoogle1(urlList, charset, orgId, tid),kWord);
}else { }else {
for (int i = 1; i < 100; i++) { for (int i = 1; i < 20; i++) {
String urla = url1.replace("[keyword]",kWord); String urla = url1.replace("[keyword]",kWord);
urla=urla.replace("[page_num]",i+""); urla=urla.replace("[page_num]",i+"");
urlList.add(urla); urlList.add(urla);
......
...@@ -138,6 +138,7 @@ public class MetaSouGouRecorderUtil { ...@@ -138,6 +138,7 @@ public class MetaSouGouRecorderUtil {
} }
catchWebByMetaSearch.setOrgId(orgId); catchWebByMetaSearch.setOrgId(orgId);
catchWebByMetaSearch.setTid(tid); catchWebByMetaSearch.setTid(tid);
catchWebByMetaSearch.setSid(tid);
metaSearchList.add(catchWebByMetaSearch); metaSearchList.add(catchWebByMetaSearch);
} }
MetaSouGouSearchThread metaSouGouSearchThread=new MetaSouGouSearchThread(); MetaSouGouSearchThread metaSouGouSearchThread=new MetaSouGouSearchThread();
......
...@@ -78,7 +78,7 @@ public class MetaSouGouSearchThread implements Runnable { ...@@ -78,7 +78,7 @@ public class MetaSouGouSearchThread implements Runnable {
} }
public KafkaTemplate kafkaTemplate= SpringContextUtil.getBean(KafkaTemplate.class); public KafkaTemplate kafkaTemplate= SpringContextUtil.getBean(KafkaTemplate.class);
@Async("asyncexecutorServiceWebBaidu") // @Async("asyncexecutorServiceWebBaidu")
public void crawler(){ public void crawler(){
//对传进来的关键词组进行组合 //对传进来的关键词组进行组合
String keyWord = keywordMsg.getKeyWord(); String keyWord = keywordMsg.getKeyWord();
...@@ -107,7 +107,7 @@ public class MetaSouGouSearchThread implements Runnable { ...@@ -107,7 +107,7 @@ public class MetaSouGouSearchThread implements Runnable {
Long orgId = Long.parseLong(keywordMsg.getId()); Long orgId = Long.parseLong(keywordMsg.getId());
Long tid = Long.parseLong(keywordMsg.getId()); Long tid = Long.parseLong(keywordMsg.getId());
String proxyid=Constants.PROXY; String proxyid=Constants.PROXY;
for (int i = 1; i < 500; i++) { for (int i = 1; i < 10; i++) {
String urla = url1.replace("[keyword]",kWord); String urla = url1.replace("[keyword]",kWord);
urla=urla.replace("[page_num]",i+""); urla=urla.replace("[page_num]",i+"");
urlList.add(urla); urlList.add(urla);
......
...@@ -30,7 +30,7 @@ public class KeywordMsg { ...@@ -30,7 +30,7 @@ public class KeywordMsg {
private Long endTime; private Long endTime;
//需要启动的信息采集器 //需要启动的信息采集器
private List<String> searchEngines; // private List<String> searchEngines;
//采集的要求(1:标题 2:正文 3:全文) //采集的要求(1:标题 2:正文 3:全文)
private String crawlerType; private String crawlerType;
......
...@@ -45,12 +45,15 @@ META_SEARCH_URL=https://www.sogou.com/sogou?interation=1728053249&query=intitle: ...@@ -45,12 +45,15 @@ META_SEARCH_URL=https://www.sogou.com/sogou?interation=1728053249&query=intitle:
#META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word= #META_SEARCH_URL=https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=
#META_SEARCH_URL=https://www.baidu.com/s?q1=[kd1]&q2=&q3=[kd2]&q4=&rn=50&lm=0&ct=0&ft=&q5=1&q6=&tn=baiduadv&pn=50 #META_SEARCH_URL=https://www.baidu.com/s?q1=[kd1]&q2=&q3=[kd2]&q4=&rn=50&lm=0&ct=0&ft=&q5=1&q6=&tn=baiduadv&pn=50
META_SEARCH_KEYWORDPATH=E:\\ideaWorkerspace\\crawler_2022\\souGouSearch\\data\\projectbak.txt META_SEARCH_KEYWORDPATH=E:\\ideaWorkerspace\\meta_crawler\\sougou_crawler\\data\\project.txt
# Redis settings # Redis settings
redis.host=127.0.0.1 redis.host=114.115.236.206
redis.port=6379 redis.port=6379
redis.pass=xxxxxx redis.pass=clbzzsn
#redis.host=127.0.0.1
#redis.port=6379
#redis.pass=xxxxxx
redis.timeout=10000 redis.timeout=10000
redis.maxIdle=300 redis.maxIdle=300
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论