Explorar o código

粮油商务网数据对接

gmy hai 8 meses
pai
achega
06b00a4f57
Modificáronse 2 ficheiros con 666 adicións e 57 borrados
  1. 191 57
      cmd/commodity_trade_liangyou.go
  2. 475 0
      static/liangyou.json

+ 191 - 57
cmd/commodity_trade_liangyou.go

@@ -1,89 +1,223 @@
 package main
 
 import (
+	"context"
+	"encoding/json"
 	"fmt"
-	"github.com/xuri/excelize/v2"
-	"path/filepath"
+	"github.com/beego/beego/v2/core/logs"
+	"os"
 	"strings"
+	"time"
+
+	"github.com/chromedp/chromedp"
 )
 
-type Content struct {
-	Title   string
-	Details []string
+// UserInfo 登录用户信息
+type UserInfo struct {
+	Username string
+	Password string
 }
 
-type SecondLevelDirectory struct {
-	Title    string
-	Contents []Content
-}
+func main() {
 
-type FirstLevelDirectory struct {
-	Title           string
-	SecondLevelDirs []SecondLevelDirectory
-}
+	// 读取 JSON 文件
+	configFile, err := os.ReadFile("D:\\go\\workspace1\\eta_crawler\\static\\liangyou.json")
+	if err != nil {
+		fmt.Printf("读取配置文件错误: %v\n", err)
+		return
+	}
 
-type Directory struct {
-	RootDirectory  string
-	FirstLevelDirs []FirstLevelDirectory
-}
+	// 定义通用的 map 结构体来解析 JSON
+	var data map[string]map[string]map[string][]string
 
-func main() {
-	filePath := filepath.Join("C:", "Users", "32715", "Desktop", "ly_data.xlsx")
-	f, err := excelize.OpenFile(filePath)
+	// 解析 JSON 文件内容
+	err = json.Unmarshal(configFile, &data)
 	if err != nil {
-		fmt.Println("Error opening file:", err)
+		fmt.Printf("解析配置文件错误: %v\n", err)
 		return
 	}
 
-	// 假设数据在名为 "Sheet1" 的工作表上
-	rows, err := f.GetRows("Sheet1")
+	// 打印解析后的数据以验证
+	fmt.Printf("%+v\n", data)
+
+	// 创建 chromedp 执行上下文
+	options := []chromedp.ExecAllocatorOption{
+		chromedp.Flag("headless", false),
+		chromedp.Flag("disable-blink-features", "AutomationControlled"),
+		chromedp.UserAgent(`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36`),
+	}
+
+	allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), options...)
+	defer cancel()
+	ctx, cancel := chromedp.NewContext(allocCtx)
+	defer cancel()
+
+	// 登录操作
+	err = login(ctx)
 	if err != nil {
-		fmt.Println("Error reading rows:", err)
+		fmt.Printf("登录错误: %v\n", err)
 		return
 	}
 
-	var directory Directory
-	var currentFirst *FirstLevelDirectory
-	var currentSecond *SecondLevelDirectory
-	var directories []Directory
-
-	for i, row := range rows {
-		// 前两行跳过
-		if row[0] == "" || i < 2 {
-			continue
+	// 遍历配置并爬取数据
+	for product, productData := range data {
+		for category, categoryData := range productData {
+			for report, keywords := range categoryData {
+				fmt.Printf("正在获取数据: %s -> %s -> %s\n", product, category, report)
+				err = fetchReportData(ctx, product, category, report, keywords)
+				if err != nil {
+					fmt.Printf("获取数据错误: %s -> %s -> %s: %v\n", product, category, report, err)
+				}
+			}
 		}
+	}
+}
 
-		// 检测根目录
-		if len(row) >= 4 {
-			directory.RootDirectory = row[0]
-			continue
+func login(ctx context.Context) error {
+	userInfo := UserInfo{
+		Username: "13633849418",
+		Password: "828384Abc@",
+	}
+	return chromedp.Run(ctx,
+		chromedp.Navigate(`https://www.fao.com.cn/`),
+		chromedp.Sleep(5*time.Second),
+		chromedp.Click(`a[id="btnLogin"]`, chromedp.ByQuery),
+		chromedp.Sleep(2*time.Second),
+		chromedp.SetValue(`input[id="userName"]`, userInfo.Username, chromedp.ByQuery),
+		chromedp.SetValue(`input[id="pwd"]`, userInfo.Password, chromedp.ByQuery),
+		chromedp.Sleep(2*time.Second),
+		chromedp.Click(`input[id="btn_Login"]`, chromedp.ByQuery),
+		chromedp.Sleep(5*time.Second),
+	)
+}
+
+func fetchReportData(ctx context.Context, product, category, report string, keywords []string) error {
+	// Navigate to the main page
+	err := chromedp.Run(ctx,
+		chromedp.Navigate(`https://www.fao.com.cn/`),
+		chromedp.Sleep(5*time.Second),
+	)
+	if err != nil {
+		return err
+	}
+
+	// Navigate to the product page
+	var productPageURL string
+
+	selector := fmt.Sprintf(`//dl[contains(@class, 'dl_hot')]//a[text()='%s']`, product)
+	fmt.Printf("选择器表达式: %s\n", selector)
+
+	// 增加超时
+	/*ctx, cancel := context.WithTimeout(ctx, 15*time.Second)
+	defer cancel()*/
+
+	err = chromedp.Run(ctx,
+		chromedp.WaitReady(selector, chromedp.BySearch),
+		chromedp.Click(selector, chromedp.BySearch),
+		chromedp.Sleep(5*time.Second),
+		chromedp.Location(&productPageURL),
+	)
+	if err != nil {
+		return err
+	}
+	logs.Info("productPageURL: %s", productPageURL)
+
+	// Navigate to the category page
+	var categoryPageURL string
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(productPageURL),
+		chromedp.Sleep(5*time.Second),
+		chromedp.Click(fmt.Sprintf(`//div[contains(@class, "newBox")]//a[contains(text(), '%s')]`, category), chromedp.BySearch),
+		chromedp.Sleep(5*time.Second),
+		chromedp.Location(&categoryPageURL),
+	)
+	if err != nil {
+		return err
+	}
+	logs.Info("categoryPageURL: %s", categoryPageURL)
+
+	var htmlContent string
+	err = chromedp.Run(ctx,
+		chromedp.Navigate(categoryPageURL),
+		chromedp.Sleep(5*time.Second),
+		chromedp.OuterHTML("html", &htmlContent),
+	)
+	if err != nil {
+		return err
+	}
+	fmt.Printf("页面内容: %s\n", htmlContent)
+
+	// Navigate to the report page and extract data
+	var reportURLs []string
+	// Extract report URLs containing the partial keyword
+	reportURLs = extractReportURLs(htmlContent, report)
+
+	/*for _, keyword := range keywords {
+		keyword = strings.Split(keyword, ":")[0]
+
+	}*/
+
+	if len(reportURLs) == 0 {
+		return fmt.Errorf("未找到报告 URL")
+	}
+
+	// Process each report URL
+	for _, reportURL := range reportURLs {
+		err = processReport(ctx, reportURL, keywords)
+		if err != nil {
+			fmt.Printf("处理报告错误: %s: %v\n", reportURL, err)
 		}
+	}
+
+	return nil
+}
+
+func extractReportURLs(htmlContent, keyword string) []string {
+	var reportURLs []string
 
-		// 检测一级目录
-		if row[0] != "" {
-			currentFirst = &FirstLevelDirectory{Title: row[0]}
-			directory.FirstLevelDirs = append(directory.FirstLevelDirs, *currentFirst)
+	// Find all occurrences of the keyword and extract report URLs
+	for {
+		content := htmlContent
+		startIdx := strings.Index(content, keyword)
+		if startIdx == -1 {
+			break
 		}
+		startIdx += len(keyword)
 
-		// 检测二级目录
-		if row[1] != "" {
-			currentSecond = &SecondLevelDirectory{Title: row[1]}
-			if currentFirst != nil {
-				currentFirst.SecondLevelDirs = append(currentFirst.SecondLevelDirs, *currentSecond)
-			}
+		// Extract the URL from the HTML content
+		urlStartIdx := strings.LastIndex(content[:startIdx], `href="`) + len(`href="`)
+		logs.Info("strings.Index(content[urlStartIdx:])", strings.Index(content[urlStartIdx:], `"`))
+		urlEndIdx := strings.Index(content[urlStartIdx:], `"`) + urlStartIdx
+		if urlStartIdx > 0 && urlEndIdx > urlStartIdx {
+			reportURLs = append(reportURLs, content[urlStartIdx:urlEndIdx])
 		}
 
-		// 添加内容
-		if row[2] != "" && currentSecond != nil {
-			content := Content{
-				Title:   row[2],
-				Details: strings.Split(row[2], ":"),
-			}
-			currentSecond.Contents = append(currentSecond.Contents, content)
+		content = content[urlEndIdx:]
+	}
+
+	return reportURLs
+}
+
+func processReport(ctx context.Context, reportURL string, keywords []string) error {
+	// Navigate to the report page
+	var reportContent string
+	err := chromedp.Run(ctx,
+		chromedp.Navigate(reportURL),
+		chromedp.Sleep(5*time.Second),
+		chromedp.OuterHTML("html", &reportContent),
+	)
+	if err != nil {
+		return err
+	}
+
+	// Process the data based on keywords
+	for _, keyword := range keywords {
+		partialKeyword := strings.SplitN(keyword, ":", 2)[0]
+		if strings.Contains(reportContent, partialKeyword) {
+			fmt.Printf("找到关键词: %s 在报告: %s 中\n", partialKeyword, reportURL)
+			// 这里可以添加进一步的处理逻辑,比如提取具体的值
 		}
-		directories = append(directories, directory)
 	}
 
-	// 打印读取的数据结构
-	fmt.Printf("%+v\n", directories)
+	return nil
 }

+ 475 - 0
static/liangyou.json

@@ -0,0 +1,475 @@
+{
+  "大豆": {
+    "进口成本": {
+      "国际大豆进口成本参考价": [
+        "美湾:国际大豆进口成本价:期货收盘:张家港:美分/蒲式耳:日度",
+        "美湾:国际大豆进口成本价:升贴水:张家港:美分/蒲式耳:日度",
+        "美湾:国际大豆进口成本价:FOB价:张家港:美元/吨:日度",
+        "美湾:国际大豆进口成本价:运费:张家港:美元/吨:日度",
+        "美湾:国际大豆进口成本价:CNF升贴水:张家港:美分/蒲式耳:日度",
+        "美湾:国际大豆进口成本价:CNF:张家港:美元/吨:日度",
+        "美湾:国际大豆进口成本价:进口成本:张家港:元/吨:日度",
+        "巴西:国际大豆进口成本价:期货收盘:张家港:美分/蒲式耳:日度",
+        "巴西:国际大豆进口成本价:升贴水:张家港:美分/蒲式耳:日度",
+        "巴西:国际大豆进口成本价:FOB价:张家港:美元/吨:日度",
+        "巴西:国际大豆进口成本价:运费:张家港:美元/吨:日度",
+        "巴西:国际大豆进口成本价:CNF升贴水:张家港:美分/蒲式耳:日度",
+        "巴西:国际大豆进口成本价:CNF:张家港:美元/吨:日度",
+        "巴西:国际大豆进口成本价:进口成本:张家港:元/吨:日度"
+      ]
+    },
+    "加工利润": {
+      "进口大豆盘面榨利及现货榨利表": [
+        "美湾:进口大豆盘面榨利:元/吨:日度",
+        "巴西:进口大豆盘面榨利:元/吨:日度",
+        "美湾:进口大豆现货榨利:元/吨:日度",
+        "巴西:进口大豆现货榨利:元/吨:日度"
+      ]
+    },
+    "船运费用": {
+      "国际谷物船运费报价及走势图": [
+        "巴西桑托斯:中国北方港口:超灵便型船:国际谷物船运费:美元:日度",
+        "阿根廷:中国北方港口:巴拿马型船:国际谷物船运费:美元:日度",
+        "美湾密西西比河:中国北方港口:巴拿马型船:国际谷物船运费:美元:日度",
+        "美西塔科马:中国北方港口:巴拿马型船:国际谷物船运费:美元:日度",
+        "美国北太平洋沿岸:中国:巴拿马型船:国际谷物船运费:美元:日度",
+        "美国墨西哥湾:中国:巴拿马型船:国际谷物船运费:美元:日度",
+        "巴西巴拉那瓜:中国:巴拿马型船:国际谷物船运费:美元:日度",
+        "伊特科提亚拉港:中国:巴拿马型船:国际谷物船运费:美元:日度",
+        "波罗的海巴拿马型指数(BPI):国际谷物船运费:%:日度",
+        "波罗的海超灵便型指数(BSI):国际谷物船运费:%:日度",
+        "波罗的海海岬型指数(BCI):国际谷物船运费:%:日度",
+        "波罗的海干散货指数(BDI):国际谷物船运费:%:日度",
+        "波罗的海灵便型指数(BHSI):国际谷物船运费:%:日度"
+      ]
+    },
+    "供需平衡": {
+      "年度中国大豆市场供需报告": [
+        "中国大豆市场供需:期初库存:万吨:月度",
+        "中国大豆市场供需:种植面积:万吨:月度",
+        "中国大豆市场供需:国内产量:万吨:月度",
+        "中国大豆市场供需:进口量:万吨:月度",
+        "中国大豆市场供需:总供应量:万吨:月度",
+        "中国大豆市场供需:压榨用量:万吨:月度",
+        "中国大豆市场供需:其中:国产大豆:万吨:月度",
+        "中国大豆市场供需:进口大豆:万吨:月度",
+        "中国大豆市场供需:出口量:万吨:月度",
+        "中国大豆市场供需:食用量:万吨:月度",
+        "中国大豆市场供需:种用及其他:万吨:月度",
+        "中国大豆市场供需:总需求量:万吨:月度",
+        "中国大豆市场供需:期末库存:万吨:月度"
+      ]
+    },
+    "采购装船": {
+      "中国大豆采购进度周统计": [
+        "中国大豆计划采购量:万吨:周度",
+        "中国大豆已采购量:美国:万吨:周度",
+        "中国大豆已采购量:巴西:万吨:周度",
+        "中国大豆已采购量:阿根廷/乌拉圭:万吨:周度",
+        "中国大豆已采购量:小计:万吨:周度",
+        "中国大豆未采购量:万吨:周度",
+        "中国大豆采购进度:%:周度"
+      ]
+    },
+    "加工报告": {
+      "国内大豆周度加工量调查": [
+        "国内大豆周度加工量:河南省:万吨:周度",
+        "国内大豆周度加工量:湖北省:万吨:周度",
+        "国内大豆周度加工量:湖南省:万吨:周度",
+        "国内大豆周度加工量:黑龙江:万吨:周度",
+        "国内大豆周度加工量:吉林省:万吨:周度",
+        "国内大豆周度加工量:辽宁省:万吨:周度",
+        "国内大豆周度加工量:内蒙古:万吨:周度",
+        "国内大豆周度加工量:河北省:万吨:周度",
+        "国内大豆周度加工量:天津市:万吨:周度",
+        "国内大豆周度加工量:山西省:万吨:周度",
+        "国内大豆周度加工量:山东省:万吨:周度",
+        "国内大豆周度加工量:安徽省:万吨:周度",
+        "国内大豆周度加工量:江苏省:万吨:周度",
+        "国内大豆周度加工量:上海市:万吨:周度",
+        "国内大豆周度加工量:浙江省:万吨:周度",
+        "国内大豆周度加工量:福建省:万吨:周度",
+        "国内大豆周度加工量:广东省:万吨:周度",
+        "国内大豆周度加工量:广西省:万吨:周度",
+        "国内大豆周度加工量:海南省:万吨:周度",
+        "国内大豆周度加工量:陕西省:万吨:周度",
+        "国内大豆周度加工量:四川省:万吨:周度",
+        "国内大豆周度加工量:重庆市:万吨:周度",
+        "国内大豆周度加工量:云南省:万吨:周度",
+        "国内大豆周度加工量:合计:万吨:周度",
+        "国内大豆周度加工量:其中:国产:万吨:周度",
+        "国内大豆周度加工量:进口:万吨:周度",
+        "国内大豆周度开机率:河南省:%:周度",
+        "国内大豆周度开机率:湖北省:%:周度",
+        "国内大豆周度开机率:湖南省:%:周度",
+        "国内大豆周度开机率:黑龙江:%:周度",
+        "国内大豆周度开机率:吉林省:%:周度",
+        "国内大豆周度开机率:辽宁省:%:周度",
+        "国内大豆周度开机率:内蒙古:%:周度",
+        "国内大豆周度开机率:河北省:%:周度",
+        "国内大豆周度开机率:天津市:%:周度",
+        "国内大豆周度开机率:山西省:%:周度",
+        "国内大豆周度开机率:山东省:%:周度",
+        "国内大豆周度开机率:安徽省:%:周度",
+        "国内大豆周度开机率:江苏省:%:周度",
+        "国内大豆周度开机率:上海市:%:周度",
+        "国内大豆周度开机率:浙江省:%:周度",
+        "国内大豆周度开机率:福建省:%:周度",
+        "国内大豆周度开机率:广东省:%:周度",
+        "国内大豆周度开机率:广西省:%:周度",
+        "国内大豆周度开机率:海南省:%:周度",
+        "国内大豆周度开机率:陕西省:%:周度",
+        "国内大豆周度开机率:四川省:%:周度",
+        "国内大豆周度开机率:重庆市:%:周度",
+        "国内大豆周度开机率:云南省:%:周度",
+        "国内大豆周度开机率:合计:%:周度",
+        "国内大豆周度开机率:其中:国产:%:周度",
+        "国内大豆周度开机率:进口:%:周度"
+      ]
+    },
+    "库存分析": {
+      "全国油厂进口大豆库存量统计周报": [
+        "全国油厂进口大豆库存量:东北地区:万吨:周度",
+        "全国油厂进口大豆库存量:华北地区:万吨:周度",
+        "全国油厂进口大豆库存量:华东地区:万吨:周度",
+        "全国油厂进口大豆库存量:华南地区:万吨:周度",
+        "全国油厂进口大豆库存量:西南地区:万吨:周度",
+        "全国油厂进口大豆库存量:其他地区:万吨:周度",
+        "全国油厂进口大豆库存量:全国统计:万吨:周度",
+        "全国油厂进口大豆库存量:东北地区:万吨:周度"
+      ]
+    }
+  },
+  "豆粕": {
+    "库存分析": {
+      "全国油厂豆粕库存与合同统计周报": [
+        "全国油厂豆粕库存量:东北地区:万吨:周度",
+        "全国油厂豆粕库存量:华北地区:万吨:周度",
+        "全国油厂豆粕库存量:华东地区:万吨:周度",
+        "全国油厂豆粕库存量:华中地区:万吨:周度",
+        "全国油厂豆粕库存量:华南地区:万吨:周度",
+        "全国油厂豆粕库存量:西南地区:万吨:周度",
+        "全国油厂豆粕库存量:西北地区:万吨:周度",
+        "全国油厂豆粕库存量:全国合计:万吨:周度",
+        "全国油厂豆粕库存量:其中:沿海库存:万吨:周度",
+        "全国油厂豆粕合同量:东北地区:万吨:周度",
+        "全国油厂豆粕合同量:华北地区:万吨:周度",
+        "全国油厂豆粕合同量:华东地区:万吨:周度",
+        "全国油厂豆粕合同量:华中地区:万吨:周度",
+        "全国油厂豆粕合同量:华南地区:万吨:周度",
+        "全国油厂豆粕合同量:西南地区:万吨:周度",
+        "全国油厂豆粕合同量:西北地区:万吨:周度",
+        "全国油厂豆粕合同量:全国合计:万吨:周度",
+        "全国油厂豆粕合同量:其中:沿海库存:万吨:周度"
+      ]
+    }
+  },
+  "大豆油": {
+    "库存分析": {
+      "全国油厂豆油库存与合同统计周报": [
+        "全国油厂豆油库存量:东北地区:万吨:周度",
+        "全国油厂豆油库存量:华北地区:万吨:周度",
+        "全国油厂豆油库存量:华东地区:万吨:周度",
+        "全国油厂豆油库存量:华中地区:万吨:周度",
+        "全国油厂豆油库存量:华南地区:万吨:周度",
+        "全国油厂豆油库存量:西南地区:万吨:周度",
+        "全国油厂豆油库存量:西北地区:万吨:周度",
+        "全国油厂豆油库存量:全国合计:万吨:周度",
+        "全国油厂豆油库存量:其中:沿海库存:万吨:周度",
+        "全国油厂豆油合同量:东北地区:万吨:周度",
+        "全国油厂豆油合同量:华北地区:万吨:周度",
+        "全国油厂豆油合同量:华东地区:万吨:周度",
+        "全国油厂豆油合同量:华中地区:万吨:周度",
+        "全国油厂豆油合同量:华南地区:万吨:周度",
+        "全国油厂豆油合同量:西南地区:万吨:周度",
+        "全国油厂豆油合同量:西北地区:万吨:周度",
+        "全国油厂豆油合同量:全国合计:万吨:周度",
+        "全国油厂豆油合同量:其中:沿海库存:万吨:周度"
+      ]
+    },
+    "价差套利": {
+      "豆棕油期现货价差统计": [
+        "棕榈油主力:大商所:期现货价差:元/吨:日度",
+        "豆油主力:大商所:期现货价差:元/吨:日度",
+        "24度棕榈油:进口液:期现货价差:元/吨:日度",
+        "一级豆油:进口压榨:期现货价差:元/吨:日度"
+      ]
+    },
+    "每日成交": {
+      "豆油成交量及价格统计": [
+        "豆油成交量:东北:吨:日度",
+        "豆油成交量:华北:吨:日度",
+        "豆油成交量:江苏:吨:日度",
+        "豆油成交量:浙江:吨:日度",
+        "豆油成交量:山东:吨:日度",
+        "豆油成交量:广东:吨:日度",
+        "豆油成交量:广西:吨:日度",
+        "豆油成交量:福建:吨:日度",
+        "豆油成交量:其他:吨:日度",
+        "豆油成交量:合计:吨:日度",
+        "豆油周度成交量:东北:吨:周度",
+        "豆油周度成交量:华北:吨:周度",
+        "豆油周度成交量:江苏:吨:周度",
+        "豆油周度成交量:浙江:吨:周度",
+        "豆油周度成交量:山东:吨:周度",
+        "豆油周度成交量:广东:吨:周度",
+        "豆油周度成交量:广西:吨:周度",
+        "豆油周度成交量:福建:吨:周度",
+        "豆油周度成交量:其他:吨:周度",
+        "豆油周度成交量:合计:吨:周度",
+        "主要集团:九三:豆油周度现货成交量:吨:周度",
+        "主要集团:中粮:豆油周度现货成交量:吨:周度",
+        "主要集团:中储粮:豆油周度现货成交量:吨:周度",
+        "主要集团:达孚:豆油周度现货成交量:吨:周度",
+        "主要集团:嘉吉:豆油周度现货成交量:吨:周度",
+        "主要集团:金光:豆油周度现货成交量:吨:周度",
+        "主要集团:邦基:豆油周度现货成交量:吨:周度",
+        "主要集团:益海:豆油周度现货成交量:吨:周度",
+        "主要集团:汇福:豆油周度现货成交量:吨:周度",
+        "主要集团:渤海:豆油周度现货成交量:吨:周度",
+        "主要集团:香驰:豆油周度现货成交量:吨:周度",
+        "主要集团:中海:豆油周度现货成交量:吨:周度",
+        "主要集团:其他:豆油周度现货成交量:吨:周度",
+        "主要集团:合计:豆油周度现货成交量:吨:周度",
+        "主要集团:九三:豆油周度基差成交量:吨:周度",
+        "主要集团:中粮:豆油周度基差成交量:吨:周度",
+        "主要集团:中储粮:豆油周度基差成交量:吨:周度",
+        "主要集团:达孚:豆油周度基差成交量:吨:周度",
+        "主要集团:嘉吉:豆油周度基差成交量:吨:周度",
+        "主要集团:金光:豆油周度基差成交量:吨:周度",
+        "主要集团:邦基:豆油周度基差成交量:吨:周度",
+        "主要集团:益海:豆油周度基差成交量:吨:周度",
+        "主要集团:汇福:豆油周度基差成交量:吨:周度",
+        "主要集团:渤海:豆油周度基差成交量:吨:周度",
+        "主要集团:香驰:豆油周度基差成交量:吨:周度",
+        "主要集团:中海:豆油周度基差成交量:吨:周度",
+        "主要集团:其他:豆油周度基差成交量:吨:周度",
+        "主要集团:合计:豆油周度基差成交量:吨:周度"
+      ]
+    }
+  },
+  "棕榈油": {
+    "国际价格": {
+      "国际棕榈油FOB报价及走势": [
+        "马来棕榈液油:FOB价格:美元/吨:日度",
+        "马来棕榈油:FOB价格:美元/吨:日度",
+        "马来棕榈硬脂:FOB价格:美元/吨:日度",
+        "印尼毛棕油:FOB价格:美元/吨:日度"
+      ]
+    },
+    "进口成本": {
+      "马来西亚棕榈油进口成本参考价": [
+        "棕榈液油(24度):运费:张家港:美元/吨:日度",
+        "棕榈液油(24度):CNF:张家港:美元/吨:日度",
+        "棕榈液油(24度):宗税价:张家港:美元/吨:日度",
+        "棕榈液油(24度):进口成本:张家港:元/吨:日度"
+      ]
+    },
+    "库存分析": {
+      "全国棕榈油库存与合同统计周报": [
+        "棕榈油:24度及以下库存:华北地区:万吨:周度",
+        "棕榈油:24度及以下库存:华东地区:万吨:周度",
+        "棕榈油:24度及以下库存:华南地区:万吨:周度",
+        "棕榈油:24度及以下库存:其他地区:万吨:周度",
+        "棕榈油:24度及以下库存:全国合计:万吨:周度",
+        "棕榈油:总库存:华北地区:万吨:周度",
+        "棕榈油:总库存:华东地区:万吨:周度",
+        "棕榈油:总库存:华南地区:万吨:周度",
+        "棕榈油:总库存:其他地区:万吨:周度",
+        "棕榈油:总库存:全国合计:万吨:周度",
+        "棕榈油:合同量:华北地区:万吨:周度",
+        "棕榈油:合同量:华东地区:万吨:周度",
+        "棕榈油:合同量:华南地区:万吨:周度",
+        "棕榈油:合同量:其他地区:万吨:周度",
+        "棕榈油:合同量:全国合计:万吨:周度"
+      ]
+    },
+    "每日成交": {
+      "棕榈油成交量及价格统计": [
+        "棕榈油成交量:华北:吨:日度",
+        "棕榈油成交量:山东:吨:日度",
+        "棕榈油成交量:江苏:吨:日度",
+        "棕榈油成交量:浙江:吨:日度",
+        "棕榈油成交量:福建:吨:日度",
+        "棕榈油成交量:广东:吨:日度",
+        "棕榈油成交量:广西:吨:日度",
+        "棕榈油成交量:其他:吨:日度",
+        "棕榈油成交量:合计:吨:日度",
+        "棕榈油周度成交量:华北:吨:日度",
+        "棕榈油周度成交量:山东:吨:日度",
+        "棕榈油周度成交量:江苏:吨:日度",
+        "棕榈油周度成交量:浙江:吨:日度",
+        "棕榈油周度成交量:福建:吨:日度",
+        "棕榈油周度成交量:广东:吨:日度",
+        "棕榈油周度成交量:广西:吨:日度",
+        "棕榈油周度成交量:其他:吨:日度",
+        "棕榈油周度成交量:合计:吨:日度",
+        "主要集团:中粮:豆油周度现货成交量:吨:周度",
+        "主要集团:金光:豆油周度现货成交量:吨:周度",
+        "主要集团:益海:豆油周度现货成交量:吨:周度",
+        "主要集团:来宝:豆油周度现货成交量:吨:周度",
+        "主要集团:合益荣:豆油周度现货成交量:吨:周度",
+        "主要集团:其他:豆油周度现货成交量:吨:周度",
+        "主要集团:总计:豆油周度现货成交量:吨:周度",
+        "主要集团:中粮:豆油周度基差成交量:吨:周度",
+        "主要集团:金光:豆油周度基差成交量:吨:周度",
+        "主要集团:益海:豆油周度基差成交量:吨:周度",
+        "主要集团:来宝:豆油周度基差成交量:吨:周度",
+        "主要集团:合益荣:豆油周度基差成交量:吨:周度",
+        "主要集团:其他:豆油周度基差成交量:吨:周度",
+        "主要集团:总计:豆油周度基差成交量:吨:周度"
+      ]
+    }
+  },
+  "油菜籽": {
+    "进口成本": {
+      "加拿大油菜籽理论进口成本": [
+        "加拿大油菜籽:期货收盘:广州港:美分/蒲式耳:日度",
+        "加拿大油菜籽:升贴水:广州港:美元/吨:日度",
+        "加拿大油菜籽:FOB价:广州港:美元/吨:日度",
+        "加拿大油菜籽:运费:广州港:美元/吨:日度",
+        "加拿大油菜籽:CNF升贴水:广州港:美元/吨:日度",
+        "加拿大油菜籽:CNF:广州港:美元/吨:日度",
+        "加拿大油菜籽:进口成本:广州港:元/吨:日度"
+      ]
+    },
+    "库存分析": {
+      "全国油厂进口油菜籽库存量统计周报": [
+        "全国油厂进口油菜籽库存量:广西地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:广东地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:福建地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:江苏地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:辽宁地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:其他地区:万吨:周度",
+        "全国油厂进口油菜籽库存量:全国统计:万吨:周度"
+      ]
+    },
+    "进口预估": {
+      "进口油菜籽月度进口量预估": [
+        "进口油菜籽月度进口量预估:本年进口量:万吨:周度",
+        "进口油菜籽月度进口量预估:本年海关进口量:万吨:周度"
+      ]
+    },
+    "加拿大统计局": {
+      "加拿大双低油菜籽周度商业库存": [
+        "加拿大双低油菜籽:期初库存:万吨:周度",
+        "加拿大双低油菜籽:上市量:万吨:周度",
+        "加拿大双低油菜籽:出口量:万吨:周度",
+        "加拿大双低油菜籽:消费量:万吨:周度",
+        "加拿大双低油菜籽:期末库存:万吨:周度"
+      ]
+    },
+    "进出口分析": {
+      "油菜籽进口数量分析": [
+        "油菜籽进口量:万吨:月度"
+      ],
+      "油菜籽出口数量分析": [
+        "油菜籽出口量:吨:月度"
+      ]
+    }
+  },
+  "菜粕": {
+    "库存分析": {
+      "全国油厂进口压榨菜粕库存与合同统计周报": [
+        "全国油厂进口压榨菜粕库存量:广西地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:广东地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:福建地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:江苏地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:辽宁地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:其他地区:万吨:周度",
+        "全国油厂进口压榨菜粕库存量:全国合计:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:广西地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:广东地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:福建地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:江苏地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:辽宁地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:其他地区:万吨:周度",
+        "全国油厂进口压榨菜粕合同量:全国合计:万吨:周度"
+
+      ]
+    },
+    "进出口分析": {
+      "菜粕出口数量分析": [
+        "菜粕出口数量:吨:月度"
+      ],
+      "菜粕进口数量分析": [
+        "菜粕进口数量:万吨:月度"
+      ]
+    }
+  },
+  "菜籽油": {
+    "库存分析": {
+      "全国油厂进口压榨菜油库存与合同统计周报": [
+        "全国油厂进口压榨菜油库存量:广西地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:广东地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:福建地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:江苏地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:辽宁地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:其他地区:万吨:周度",
+        "全国油厂进口压榨菜油库存量:全国合计:万吨:周度",
+        "全国油厂进口压榨菜油库存量:其中:非油企库存:万吨:周度",
+        "全国油厂进口压榨菜油库存量:油企库存:万吨:周度",
+        "全国油厂进口压榨菜油合同量:广西地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:广东地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:福建地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:江苏地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:辽宁地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:其他地区:万吨:周度",
+        "全国油厂进口压榨菜油合同量:全国合计:万吨:周度",
+        "全国油厂进口压榨菜油合同量:其中:非油企库存:万吨:周度",
+        "全国油厂进口压榨菜油合同量:油企库存:万吨:周度"
+      ]
+    },
+    "进口预估": {
+      "菜籽油月度进口量预估": [
+        "菜籽油月度进口量预估:本年进口量:万吨:周度",
+        "菜籽油月度进口量预估:本年海关进口量:万吨:周度"
+
+      ]
+    },
+    "每日成交": {
+      "菜籽油成交量及价格统计": [
+        "菜籽油成交量:东北:吨:日度",
+        "菜籽油成交量:华东:吨:日度",
+        "菜籽油成交量:福建:吨:日度",
+        "菜籽油成交量:广东:吨:日度",
+        "菜籽油成交量:广西:吨:日度",
+        "菜籽油成交量:其他:吨:日度",
+        "菜籽油成交量:合计:吨:日度",
+        "菜籽油成交量:华南合计:吨:日度",
+        "菜籽油成交量:华沿海合计:吨:日度",
+        "菜籽油周度成交量:东北:吨:周度",
+        "菜籽油周度成交量:华东:吨:周度",
+        "菜籽油周度成交量:福建:吨:周度",
+        "菜籽油周度成交量:广东:吨:周度",
+        "菜籽油周度成交量:广西:吨:周度",
+        "菜籽油周度成交量:其他:吨:周度",
+        "菜籽油周度成交量:合计:吨:周度",
+        "菜籽油周度成交量:华南合计:吨:周度",
+        "菜籽油周度成交量:华沿海合计:吨:周度",
+        "主要集团:营口嘉里:菜籽油周度现货成交量:吨:周度",
+        "主要集团:富之源:菜籽油周度现货成交量:吨:周度",
+        "主要集团:防城大海:菜籽油周度现货成交量:吨:周度",
+        "主要集团:防城澳加:菜籽油周度现货成交量:吨:周度",
+        "主要集团:成都中粮:菜籽油周度现货成交量:吨:周度",
+        "主要集团:其他:菜籽油周度现货成交量:吨:周度",
+        "主要集团:合计:菜籽油周度现货成交量:吨:周度",
+        "主要集团:营口嘉里:菜籽油周度基差成交量:吨:周度",
+        "主要集团:富之源:菜籽油周度基差成交量:吨:周度",
+        "主要集团:防城大海:菜籽油周度基差成交量:吨:周度",
+        "主要集团:防城澳加:菜籽油周度基差成交量:吨:周度",
+        "主要集团:成都中粮:菜籽油周度基差成交量:吨:周度",
+        "主要集团:其他:菜籽油周度基差成交量:吨:周度",
+        "主要集团:合计:菜籽油周度基差成交量:吨:周度"
+      ]
+    }
+  },
+  "葵花粕": {
+    "进口预估": {
+      "进口葵花粕月度进口量预估": [
+        "进口葵花粕月度进口量预估:本年进口量:万吨:周度",
+        "进口葵花粕月度进口量预估:本年海关进口量:万吨:周度"
+      ]
+    }
+  }
+}