package services import ( "encoding/json" "eta/eta_data_analysis/models" "eta/eta_data_analysis/utils" "fmt" "github.com/PuerkitoBio/goquery" "strings" "time" ) // OilchemTaskAnalysisHandlers 解析表格的函数 var OilchemTaskAnalysisHandlers = map[string]func(htm []byte) (err error){ "[产量/产能利用率]:中国甲醇产量及产能利用率周数据统计": AnalysisOilchemJiaChun1, "库存周数据分析": AnalysisOilchemJiaChun2, "中国甲醇样本生产企业库存及订单待发周数据统计": AnalysisOilchemJiaChun3, "中国甲醇样本利润周数据统计": AnalysisOilchemJiaChun4, "中国甲醇产量及产能利用率": AnalysisOilchemJiaChun5, "中国甲醇下游样本产能利用率周数据": AnalysisOilchemJiaChun6, "中国甲醇样本生产企业库存及订单待发周数据分析": AnalysisOilchemJiaChun7, "中国尿素分原料产能利用率周数据统计": AnalysisOilchemNiaoSu1, "中国尿素样本生产理论利润周数据统计": AnalysisOilchemNiaoSu2, "中国尿素样本港口库存周数据统计": AnalysisOilchemNiaoSu3, "中国尿素产量周数据分析": AnalysisOilchemNiaoSu4, "中国尿素企业库存周数据分析": AnalysisOilchemNiaoSu5, "中国尿素样本港口库存周数据分析": AnalysisOilchemNiaoSu6, "中国尿素企业预收订单周数据分析": AnalysisOilchemNiaoSu7, "中国尿素样本理论利润周数据分析": AnalysisOilchemNiaoSu8, "中国复合肥产能利用率周数据统计": AnalysisOilchemNiaoSu9, "中国三聚氰胺产能利用率周数据统计": AnalysisOilchemNiaoSu10, "中国尿素产量分省份月数据统计": AnalysisOilchemNiaoSu11, "中国尿素进出口量数据总体分析": AnalysisOilchemNiaoSu12, "中国磷铵产能利用率周数据统计": AnalysisOilchemFuHeFei1, "中国钾肥样本港口库存量周数据统计": AnalysisOilchemFuHeFei2, "中国复合肥进出口月数据分析": AnalysisOilchemFuHeFei3, "中国阔叶浆样本产量周数据分析": AnalysisOilchemZhiJiang1, "中国化机浆样本产量周数据分析": AnalysisOilchemZhiJiang1, "中国纸浆主流港口样本库存周数据分析": AnalysisOilchemZhiJiang2, "国内独立炼厂产能利用率周数据统计": AnalysisOilchemYuanYou1, "国内炼厂常减压装置产能利用率月数据统计": AnalysisOilchemYuanYou2, "山东独立炼厂原油到港量周数据统计": AnalysisOilchemYuanYou3, "中国港口商业原油库存指数分析": AnalysisOilchemYuanYou4, "山东独立炼厂原油样本库容率周数据分析": AnalysisOilchemYuanYou5, "中国炼厂原油加工量月数据分析": AnalysisOilchemYuanYou6, "国内原油加工量简况": AnalysisOilchemYuanYou7, "国内原油产量表": AnalysisOilchemYuanYou8, "中国原油进出口量月数据统计": AnalysisOilchemYuanYou9, "中国原油月度进出口数据分析报告": AnalysisOilchemYuanYou10, "美国能源信息署最新石油库存报告": AnalysisOilchemYuanYou11, "美国API库存数据": AnalysisOilchemYuanYou12, "国际主要汇率收盘": AnalysisOilchemYuanYou13, } var JiaChunListMap = map[string]string { "[产量/产能利用率]:中国甲醇产量及产能利用率周数据统计" : "https://list.oilchem.net/140/38266/", "库存周数据分析" : "https://list.oilchem.net/140/38271/", "中国甲醇样本生产企业库存及订单待发周数据统计" : "https://list.oilchem.net/140/1086/", "中国甲醇样本利润周数据统计" : "https://list.oilchem.net/140/1088/", "中国甲醇产量及产能利用率" : "https://list.oilchem.net/140/1087/", "中国甲醇下游样本产能利用率周数据" : "https://list.oilchem.net/140/38270/", "中国甲醇样本生产企业库存及订单待发周数据分析" : "https://list.oilchem.net/140/38271/", } // 中国甲醇产量及产能利用率周数据统计 func AnalysisOilchemJiaChun1(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } suffixList := make([]string, 0) unitList := make([]string, 0) doc.Find("p").Each(func(i int, selection *goquery.Selection) { ptext := selection.Text() if strings.Contains(ptext, "单位:") { unit := strings.Replace(ptext, "单位:", "", -1) //fmt.Println("unit:",unit) unitList = append(unitList, unit) } if strings.Contains(ptext, "中国甲醇产量分地区") { suffix := ptext //fmt.Println("title:",title) if strings.Contains(ptext, "利用率") { suffix = "产能利用率" } else { suffix = "产量" } suffixList = append(suffixList, suffix) } }) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) //fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { mid := "分地区" table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) && text3 != "本周" { area = text3 return } if area == "" { return } if area == "工艺类型" { mid = "分工艺" return } title = "中国甲醇产量" + mid + suffixList[tableIndex] value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} indexName := title + "(" + area +")" fmt.Println("indexName:",indexName) fmt.Println("valueF:",value) unit := unitList[tableIndex] item := &models.BaseFromOilchemIndex{ IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: time.Now(), ModifyTime: time.Now(), IndexNameStr: title, MarketName: area, } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇样本港口库存周数据统计 func AnalysisOilchemJiaChun2(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } titleList := make([]string, 0) unitList := make([]string, 0) doc.Find("p").Each(func(i int, selection *goquery.Selection) { ptext := selection.Text() if strings.Contains(ptext, "趋势") { return } if strings.Contains(ptext, "单位:") { unit := strings.Replace(ptext, "单位:", "", -1) //fmt.Println("unit:",unit) unitList = append(unitList, unit) } if strings.Contains(ptext, "中国甲醇港口样本库存周数据对比") { title := "中国甲醇港口库存" //fmt.Println("title:",title) titleList = append(titleList, title) } }) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) && text3 != "本周" { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} title := "中国甲醇港口库存" indexName := title + "(" + area +")" unit := "万吨" fmt.Println("indexName:",indexName) fmt.Println("valueF:",value) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: time.Now(), ModifyTime: time.Now(), IndexNameStr: title, MarketName: area, } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇样本生产企业库存及订单待发周数据统计 func AnalysisOilchemJiaChun3(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } titleList := make([]string, 0) unitList := make([]string, 0) doc.Find("p").Each(func(i int, selection *goquery.Selection) { ptext := selection.Text() if strings.Contains(ptext, "趋势") { return } if strings.Contains(ptext, "单位:") { unit := strings.Replace(ptext, "单位:", "", -1) //fmt.Println("unit:",unit) unitList = append(unitList, unit) } //https://www.oilchem.net/22-1026-13-e6e4dd2d1d3d9309.html 10-26的表格没有名字。。。 //if strings.Contains(ptext, "中国甲醇样本生产企业") { // title := ptext // //fmt.Println("title:",title) // if strings.Contains(title, "订单待发") { // title = "中国甲醇样本生产企业订单待发" // } else { // title = "中国甲醇样本生产企业库存" // } // titleList = append(titleList, title) //} titleList = append(titleList, "中国甲醇样本生产企业库存","中国甲醇样本生产企业订单待发") }) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) && text3 != "本周" { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} indexName := titleList[tableIndex] + "(" + area +")" unit := "万吨" fmt.Println("indexName:",indexName) //fmt.Println("valueF:",valueF) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: time.Now(), ModifyTime: time.Now(), IndexNameStr: titleList[tableIndex], MarketName: area, } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇样本利润周数据统计 func AnalysisOilchemJiaChun4(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } //titleList := make([]string, 0) //unitList := make([]string, 0) //doc.Find("p").Each(func(i int, selection *goquery.Selection) { // ptext := selection.Text() // if strings.Contains(ptext, "趋势") { // return // } // if strings.Contains(ptext, "单位:") { // unit := strings.Replace(ptext, "单位:", "", -1) // //fmt.Println("unit:",unit) // unitList = append(unitList, unit) // } // if strings.Contains(ptext, "中国甲醇样本利润") { // title := ptext // //fmt.Println("title:",title) // titleList = append(titleList, title) // } //}) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) && text3 != "本周" { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) if e != nil { err = e utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) return } indexName := area unit := "元/吨" fmt.Println("indexName:",indexName) //fmt.Println("valueF:",valueF) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: time.Now(), ModifyTime: time.Now(), IndexNameStr: indexName, MarketName: "", } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇产量及产能利用率周数据 func AnalysisOilchemJiaChun5(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } //titleList := make([]string, 0) //unitList := make([]string, 0) //doc.Find("p").Each(func(i int, selection *goquery.Selection) { // ptext := selection.Text() // if strings.Contains(ptext, "趋势") { // return // } // if strings.Contains(ptext, "单位:") { // unit := strings.Replace(ptext, "单位:", "", -1) // //fmt.Println("unit:",unit) // unitList = append(unitList, unit) // } // if strings.Contains(ptext, "中国甲醇样本利润") { // title := ptext // //fmt.Println("title:",title) // titleList = append(titleList, title) // } //}) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) && text3 != "本周" { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} indexName := "中国甲醇" + area unit := "" if area == "产量" { unit = "吨" } else { unit = "%" } fmt.Println("indexName:",indexName) //fmt.Println("valueF:",valueF) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: time.Now(), ModifyTime: time.Now(), IndexNameStr: indexName, } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇部分下游品种产能利用率 func AnalysisOilchemJiaChun6(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } //titleList := make([]string, 0) //unitList := make([]string, 0) //doc.Find("p").Each(func(i int, selection *goquery.Selection) { // ptext := selection.Text() // if strings.Contains(ptext, "趋势") { // return // } // if strings.Contains(ptext, "单位:") { // unit := strings.Replace(ptext, "单位:", "", -1) // //fmt.Println("unit:",unit) // unitList = append(unitList, unit) // } // if strings.Contains(ptext, "中国甲醇样本利润") { // title := ptext // //fmt.Println("title:",title) // titleList = append(titleList, title) // } //}) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) || utils.ContainsEnglishLetter(text3) { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} area = strings.Replace(area," ","",-1) area = strings.Replace(area," ","",-1) indexName := "中国甲醇部分下游品种产能利用率" +"("+ area +")" unit := "%" fmt.Println("indexName:",indexName) //fmt.Println("valueF:",valueF) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ BaseFromOilchemIndexId: 0, IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: createTime, ModifyTime: createTime, IndexNameStr: "中国甲醇部分下游品种产能利用率", MarketName: area, } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } // 中国甲醇样本生产企业库存及订单待发 func AnalysisOilchemJiaChun7(htm []byte) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } //titleList := make([]string, 0) //unitList := make([]string, 0) //doc.Find("p").Each(func(i int, selection *goquery.Selection) { // ptext := selection.Text() // if strings.Contains(ptext, "趋势") { // return // } // if strings.Contains(ptext, "单位:") { // unit := strings.Replace(ptext, "单位:", "", -1) // //fmt.Println("unit:",unit) // unitList = append(unitList, unit) // } // if strings.Contains(ptext, "中国甲醇样本利润") { // title := ptext // //fmt.Println("title:",title) // titleList = append(titleList, title) // } //}) area := "" title := doc.Find("h2").Text() fmt.Println("title:",title) createTimeStr := doc.Find("h2").Next().Text() createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:") createTimeStrIndex := strings.Index(createTimeStr,"来源:") createTimeStr = createTimeStr[:createTimeStrIndex] createTimeStr = strings.TrimSpace(createTimeStr) createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr) if err != nil { utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err)) return } //fmt.Println("createTime:",createTime) dataTime := createTime.Format(utils.FormatDate) fmt.Println("dataTime:",dataTime) indexList := make([]*models.BaseFromOilchemIndex, 0) doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) { table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) { table.Find("td").Each(func(jj int, table3 *goquery.Selection) { text3 := table3.Text() text3 = strings.Replace(text3,"\n","",-1) text3 = strings.Replace(text3," ","",-1) text3 = strings.Replace(text3,"\u00a0","",-1) if text3 == "上周" || text3 == "环比" || text3 == "地区" { return } //fmt.Println("table3:",text3) //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3)) //fmt.Println("ii:",ii) //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii)) //fmt.Println("jj:",jj) //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj)) //fmt.Println("tableIndex:",tableIndex) //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex)) if utils.ContainsChinese(text3) || utils.ContainsEnglishLetter(text3) { area = text3 return } if area == "" { return } value := text3 value = strings.TrimRight(value, "%") //valueF, e := strconv.ParseFloat(value, 64) //if e != nil { // err = e // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e)) // return //} indexName := area unit := "万吨" fmt.Println("indexName:",indexName) //fmt.Println("valueF:",valueF) fmt.Println("unit:",unit) item := &models.BaseFromOilchemIndex{ BaseFromOilchemIndexId: 0, IndexName: indexName, ClassifyId: 1, Unit: unit, Frequency: "周度", Describe: "", DataTime: dataTime, Value: value, Sort: 0, CreateTime: createTime, ModifyTime: createTime, IndexNameStr: indexName, MarketName: "", } indexList = append(indexList,item) area = "" }) }) }) // 写入数据库 err = PostHandleOilchem(indexList) if err != nil { utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err)) fmt.Println("PostHandleOilchem err",err) return } return } func PostHandleOilchem(indexList []*models.BaseFromOilchemIndex) (err error) { params := make(map[string]interface{}) params["List"] = indexList result, e := postEdbLib(params, utils.LIB_ROUTE_OILCHEM_TABLE_HANDLE) if e != nil { b, _ := json.Marshal(params) fmt.Printf("postEdbLib err: %v, params: %s\n", e, string(b)) utils.FileLog.Info(fmt.Sprintf("postEdbLib err: %v, params: %s", e, string(b))) return } resp := new(models.BaseEdbLibResponse) if e = json.Unmarshal(result, &resp); e != nil { fmt.Printf("json.Unmarshal err: %v\n", e) utils.FileLog.Info(fmt.Sprintf("json.Unmarshal err: %v", e)) return } if resp.Ret != 200 { fmt.Printf("Msg: %s, ErrMsg: %s\n", resp.Msg, resp.ErrMsg) utils.FileLog.Info(fmt.Sprintf("Msg: %s, ErrMsg: %s", resp.Msg, resp.ErrMsg)) return } return } func JiaChunList(num int) (err error) { for k, v := range JiaChunListMap { for i := 1; i < num; i++ { listUrl := v + fmt.Sprintf("%d.html",i) fmt.Println("listUrl:",listUrl) htm, e := FetchPageHtml(listUrl) if e != nil { err = e utils.FileLog.Error(fmt.Sprintf("FetchPageHtml err:%v",err)) fmt.Println("FetchPageHtml err",err) return } err = AnalysisOilchemList(htm, k) if err != nil { utils.FileLog.Error(fmt.Sprintf("AnalysisOilchemJiaChunList err:%v",err)) fmt.Println("AnalysisOilchemJiaChunList err",err) return } //time.Sleep(2*time.Second) } } return } func AnalysisOilchemList(htm []byte, classifyTitle string) (err error) { if len(htm) == 0 { utils.FileLog.Info("htm empty") return } doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm))) if e != nil { err = fmt.Errorf("NewDocumentFromReader err: %v", e) return } title := doc.Find("h2").Text() fmt.Println("title:",title) doc.Find("div.list").Each(func(divIndex int, table *goquery.Selection) { table.Find("li").Each(func(divIndex2 int, table2 *goquery.Selection) { title := table2.Text() if strings.Contains(title,classifyTitle) { table2.Find("li.clearfix a").Each(func(i int, s *goquery.Selection) { href, exists := s.Attr("href") if exists { fmt.Printf("Link %d: %s\n", i, href) respBody, err := FetchPageHtml(href) if err != nil { utils.FileLog.Error(fmt.Sprintf("FetchPageHtml err:%v",err)) fmt.Println("FetchPageHtml err",err) return } else { handler, ok := OilchemTaskAnalysisHandlers[classifyTitle] if !ok { utils.FileLog.Info(fmt.Sprintf("%s无解析函数\n", classifyTitle)) return } err := handler(respBody) if err != nil { utils.FileLog.Error(fmt.Sprintf("OilchemTaskAnalysisHandlers err:%v",err)) fmt.Println("OilchemTaskAnalysisHandlers err",err) return } } } else { fmt.Println("Link attribute does not exist") } }) } }) }) return }