// 获得采集模式 0: 普通 1: 列表+详情 2: 列表 3: 详情
function getCrawlType(){
var crawlType;// 0: 普通 1: 列表+详情 2: 列表 3: 详情
// 采集模式保存在 文本域里则是人物编辑页 否则是新建任务页
if($("#crawlType").length > 0){
// 编辑任务页
crawlType = $("#crawlType").val();
}else{
// 新建任务页
crawlType = $(".crawlType:checked").val();
}
return crawlType;
}
// 正则 和 xpath切换
function methodChange(){
if($("#method").val() == 1){
$("#regexpTabRow").show();
$("#xpathTabRow").hide();
}else if($("#method").val() == 2){
$("#regexpTabRow").hide();
$("#xpathTabRow").show();
}else {
$("#regexpTabRow").hide();
$("#xpathTabRow").hide();
}
}
//表格错误提示
function tabErr(tabId, msg){
$("#"+tabId).prev().find("div.valierr").find("label").html(msg);
}
//清除表格错误提示
function clearTabErr(tabId){
$("#"+tabId).prev().find("div.valierr").find("label").html("");
}
// 表格行点击事件
function clickTabFunc(tabId){
//单击编辑
$("#"+tabId+" tbody").on( 'click', 'tr', function () {
if(tabId == "headerTab"){
editHeaderTab(this);
}else if(tabId == "pageTab"){
editPageTab(this);regexpTab
}else if(tabId == "regexpTab"){
editRegexpTab(this);
}else if(tabId == "xpathTab"){
editXpathTab(this);
}else if(tabId == "outConfigTab"){
editOutConfigTab(this);
}
});
}
// 提交任务数据保存时,校验表格是否有未提交行,如有保存,并删除保存失败的行
function isSubmitTab(tabId){
if(tabId == "headerTab" && !saveHeaderTab()){
delHeaderTab();
}
if(tabId == "pageTab" && !savePageTab()){
delPageTab();
}
if(tabId == "regexpTab" && !saveRegexpTab()){
delRegexpTab();
}
if(tabId == "xpathTab" && !saveXpathTab()){
delXpathTab();
}
if(tabId == "outConfigTab" && !saveOutConfigTab()){
delOutConfigTab();
}
}
// header -----------------------------------------------------------------------------------
//新建
function addHeaderTab(){
// 新建前先保存
if(!saveHeaderTab()){
return false;
}
var html = "
";
html+= " | "
html+= " | "
html+= "
"
$("#headerTab tbody").append(html);
$("#headerTab tbody tr.edittrue").click();
}
//保存
function saveHeaderTab(){
clearTabErr("headerTab");
var trDom = $("#headerTab tbody tr.edittrue");
if(trDom.length > 0){
var obj = {};
trDom.find("td").each(function(index){
obj[index] = $(this).find("input").val();
});
if(obj[0].trim() != "" && obj[1].trim() != ""){
trDom.html(""+obj[0]+" | "+obj[1]+" | ");
trDom.removeClass("edittrue").css("background-color", "");
}else{
tabErr("headerTab", "header名称和内容不能为空");
return false;
}
}
return true;
}
//编辑
function editHeaderTab(dom){
//判断点击的行是否已在编辑状态
if($(dom).hasClass("edittrue")){
return;
}
// 否则,编辑前先保存当前
if(!saveHeaderTab()){
return false;
}
// 标记为编辑 和 高亮
$(dom).addClass("edittrue").css("background-color", "#B0BED9");
var html = "";
$(dom).find("td").each(function(index){
html+= " | "
});
$(dom).html(html);
}
//删除
function delHeaderTab(){
clearTabErr("headerTab");
if($("#headerTab tbody tr.edittrue").length > 0){
$("#headerTab tbody tr.edittrue").remove();
}else{
swal({title: "提示", text: "请选中要删除的数据!", confirmButtonText: "确定!",confirmButtonColor: "#1ab394"});
}
}
// page -----------------------------------------------------------------------------------
//新建
function addPageTab(){
// 新建前先保存
if(!savePageTab()){
return false;
}
var html = "";
html+= " | "
html+= " | "
html+= "
"
$("#pageTab tbody").append(html);
$("#pageTab tbody tr.edittrue").click();
}
//保存
function savePageTab(){
clearTabErr("pageTab");
var trDom = $("#pageTab tbody tr.edittrue");
if(trDom.length > 0){
var obj = {};
trDom.find("td").each(function(index){
obj[index] = $(this).find("input").val();
});
if(obj[0].trim() != "" && obj[1].trim() != ""){
trDom.html(""+obj[0]+" | "+obj[1]+" | ");
trDom.removeClass("edittrue").css("background-color", "");
}else{
tabErr("pageTab", "分页参数和页码范围不能为空");
return false;
}
}
return true;
}
//编辑
function editPageTab(dom){
//判断点击的行是否已在编辑状态
if($(dom).hasClass("edittrue")){
return;
}
// 否则,编辑前先保存当前
if(!savePageTab()){
return false;
}
// 标记为编辑 和 高亮
$(dom).addClass("edittrue").css("background-color", "#B0BED9");
var html = "";
$(dom).find("td").each(function(index){
html+= " | "
});
$(dom).html(html);
}
//删除
function delPageTab(){
clearTabErr("pageTab");
if($("#pageTab tbody tr.edittrue").length > 0){
$("#pageTab tbody tr.edittrue").remove();
}else{
swal({title: "提示", text: "请选中要删除的数据!", confirmButtonText: "确定!",confirmButtonColor: "#1ab394"});
}
}
// regexp -----------------------------------------------------------------------------------
//新建
function addRegexpTab(){
// 新建前先保存
if(!saveRegexpTab()){
return false;
}
var html = "";
html+= " | "
// 0: 普通 1: 列表+详情 2: 列表 3: 详情
var crawlType = getCrawlType();
if(crawlType == "0" || crawlType == "3"){
html+= "正文模版 | "
}else if(crawlType == 2){
html+= "链接模版 | "
}else{
html+= " | ";
}
html+= " | ";
html+= " | ";
html+= " | "
html+= "
"
$("#regexpTab tbody").append(html);
$("#regexpTab tbody tr.edittrue").click();
}
//保存
function saveRegexpTab(){
clearTabErr("regexpTab");
var trDom = $("#regexpTab tbody tr.edittrue");
if(trDom.length > 0){
var obj = {};
trDom.find("td").each(function(index){
if(index == 1){
if($(this).html().indexOf("select") != -1){
obj[index] = $(this).find("select").val();
}else{
obj[index] = $(this).html();
}
}else{
obj[index] = $(this).find("input").val();
}
});
if(obj[0].trim() != "" && obj[3].trim() != ""){
obj[2] = obj[2].replace(//g, ">");//转译
obj[3] = obj[3].replace(//g, ">");//转译
trDom.html(""+obj[0]+" | "+obj[1]+" | "+obj[2]+" | "+obj[3]+" | "+obj[4]+" | ");
trDom.removeClass("edittrue").css("background-color", "");
if(trDom.hasClass("addtrue")){
// 新建 保存时,创建输出配置
$("#outConfigTab tbody").append("| "+obj[0]+" | value | [@"+obj[0]+"@] |
");
//删除新建标识
trDom.removeClass("addtrue");
}
}else{
tabErr("regexpTab", "字段名称和正则配置不能为空");
return false;
}
}
return true;
}
//编辑
function editRegexpTab(dom){
//判断点击的行是否已在编辑状态
if($(dom).hasClass("edittrue")){
return;
}
// 否则,编辑前先保存当前
if(!saveRegexpTab()){
return false;
}
// 标记为编辑 和 高亮
$(dom).addClass("edittrue").css("background-color", "#B0BED9");
var html = "";
var tdObjArr = [];
$(dom).find("td").each(function(index){
if(index == 0){
html+= " | "
}else if(index == 1){
// 0: 普通 1: 列表+详情 2: 列表 3: 详情
var crawlType = getCrawlType();
if(crawlType == "0" || crawlType == "3"){
html+= ""+$(this).html()+" | "
}else if(crawlType == 2){
html+= ""+$(this).html()+" | "
}else{
html+= " | ";
}
}else if(index == 2 || index == 3){
var tdVal = $(this).html().replace(/</g, "<").replace(/>/g, ">");
tdObjArr.push({"index": index, "value": tdVal});
html+= " | ";
}else{
html+= " | ";
}
});
$(dom).html(html);
// 正则直接填入input会有问题, 这里用jquery赋值
$.each(tdObjArr, function(i, obj){
$(dom).find("td").eq(obj.index).find("input").val(obj.value);
});
}
//删除
function delRegexpTab(){
clearTabErr("regexpTab");
if($("#regexpTab tbody tr.edittrue").length > 0){
$("#regexpTab tbody tr.edittrue").remove();
}else{
swal({title: "提示", text: "请选中要删除的数据!", confirmButtonText: "确定!",confirmButtonColor: "#1ab394"});
}
}
// xpath -----------------------------------------------------------------------------------
//新建
function addXpathTab(){
// 新建前先保存
if(!saveXpathTab()){
return false;
}
var html = "";
html+= " | "
// 0: 普通 1: 列表+详情 2: 列表 3: 详情
var crawlType = getCrawlType();
if(crawlType == "0" || crawlType == "3"){
html+= "正文模版 | "
}else if(crawlType == 2){
html+= "链接模版 | "
}else{
html+= " | ";
}
html+= "" +
" | ";
html+= "" +
" | ";
html+= " | "
html+= "
"
$("#xpathTab tbody").append(html);
$("#xpathTab tbody tr.edittrue").click();
}
//保存
function saveXpathTab(){
clearTabErr("xpathTab");
var trDom = $("#xpathTab tbody tr.edittrue");
if(trDom.length > 0){
var obj = {};
trDom.find("td").each(function(index){
if(index == 1){
if($(this).html().indexOf("select") != -1){
obj[index] = $(this).find("select").val();
}else{
obj[index] = $(this).html();
}
}else{
obj[index] = $(this).find("input").val();
}
});
if(obj[0].trim() != "" && obj[3].trim() != ""){
trDom.html(""+obj[0]+" | "+obj[1]+" | "+obj[2]+" | "+obj[3]+" | "+obj[4]+" | ");
trDom.removeClass("edittrue").css("background-color", "");
if(trDom.hasClass("addtrue")){
// 新建 保存时,创建输出配置
$("#outConfigTab tbody").append("| "+obj[0]+" | value | [@"+obj[0]+"@] |
");
//删除新建标识
trDom.removeClass("addtrue");
}
}else{
tabErr("xpathTab", "字段名称和xpath配置不能为空");
return false;
}
}
return true;
}
//编辑
function editXpathTab(dom){
//判断点击的行是否已在编辑状态
if($(dom).hasClass("edittrue")){
return;
}
// 否则,编辑前先保存当前
if(!saveXpathTab()){
return false;
}
// 标记为编辑 和 高亮
$(dom).addClass("edittrue").css("background-color", "#B0BED9");
var html = "";
$(dom).find("td").each(function(index){
if(index == 0){
html+= " | "
}else if(index == 1){
// 0: 普通 1: 列表+详情 2: 列表 3: 详情
var crawlType = getCrawlType();
if(crawlType == "0" || crawlType == "3"){
html+= ""+$(this).html()+" | "
}else if(crawlType == 2){
html+= ""+$(this).html()+" | "
}else{
html+= " | ";
}
}else if(index == 2){
html+= "" +
" | ";
}else if(index == 3){
html+= "" +
" | ";
}else{
html+= " | ";
}
});
$(dom).html(html);
}
//删除
function delXpathTab(){
clearTabErr("xpathTab");
if($("#xpathTab tbody tr.edittrue").length > 0){
$("#xpathTab tbody tr.edittrue").remove();
}else{
swal({title: "提示", text: "请选中要删除的数据!", confirmButtonText: "确定!",confirmButtonColor: "#1ab394"});
}
}
// outconfig -----------------------------------------------------------------------------------
//新建
function addOutConfigTab(){
// 新建前先保存
if(!saveOutConfigTab()){
return false;
}
var html = "";
html+= " | "
html+= " | ";
html+= " | "
html+= "
"
$("#outConfigTab tbody").append(html);
$("#outConfigTab tbody tr.edittrue").click();
}
//保存
function saveOutConfigTab(){
clearTabErr("outConfigTab");
var trDom = $("#outConfigTab tbody tr.edittrue");
if(trDom.length > 0){
var obj = {};
trDom.find("td").each(function(index){
if($(this).find("select").length > 0){
obj[index] = $(this).find("select").val();
}else{
obj[index] = $(this).find("input").val();
}
});
if(obj[0].trim() != "" && obj[2].trim() != ""){
trDom.html(""+obj[0]+" | "+obj[1]+" | "+obj[2]+" | ");
trDom.removeClass("edittrue").css("background-color", "");
}else{
tabErr("outConfigTab", "字段名和处理语法不能为空");
return false;
}
}
return true;
}
//编辑
function editOutConfigTab(dom){
//判断点击的行是否已在编辑状态
if($(dom).hasClass("edittrue")){
return;
}
// 否则,编辑前先保存当前
if(!saveOutConfigTab()){
return false;
}
// 标记为编辑 和 高亮
$(dom).addClass("edittrue").css("background-color", "#B0BED9");
var html = "";
$(dom).find("td").each(function(index){
if(index == 1){
html+= " | ";
}else{
html+= " | "
}
});
$(dom).html(html);
}
//删除
function delOutConfigTab(){
clearTabErr("outConfigTab");
if($("#outConfigTab tbody tr.edittrue").length > 0){
$("#outConfigTab tbody tr.edittrue").remove();
}else{
swal({title: "提示", text: "请选中要删除的数据!", confirmButtonText: "确定!",confirmButtonColor: "#1ab394"});
}
}
//XPath 可视化-------------------------------------------------------------------------------------
// 0: 链接模版 1: 正文模版
var savetype;
// xpath可视化编辑的列数
var count = 1;
// 编辑类型 xpath:子节点 xpath_pid:父节点
var xpathEditType = "xpath";
//打开可视化编辑
function openXpathEdit(dom){
if($("#mainUrl").val() != ""){
// 获得采集模式 0: 普通 1: 列表+详情 2: 列表 3: 详情
// 列表+详情 任务时 正则和xpath 新建编辑时 展示类别编辑,否则按模式默认选项
var crawlType = getCrawlType();
if(crawlType == 1){// 列表+详情
savetype = $("#xpathTab tbody tr.edittrue").find("select").val();
}else if(crawlType == 2){//列表
// 链接模版
savetype = 0;
}else if(crawlType == 3 || crawlType == 0){//详情
// 正文模版
savetype = 1;
}
// xpath可视化编辑的列数 还原
count = 1;
// 编辑类型 xpath:子节点 xpath_pid:父节点
xpathEditType = $(dom).attr("id");
jQuery.ajax({
url: "spiderHtmlTask/extract",
// data: {mainUrl: "http://news.cctv.com/2017/09/15/ARTIrjSD08QwGpHiuiyZ3fi1170915.shtml"},
data: {mainUrl: $("#mainUrl").val()},
dataType: "html",
success: function (data) {
//html源码转json有异常,这里处理字符串
if (data.indexOf("$$$successXpath: true,$$$") != -1) {
var html = data.replace("$$$successXpath: true,$$$", "").replace("/");
var scripthtml = "