1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039 |
- 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
- }
|