1. 背景

周末花了两天写了一个爬取、并解析HMDB数据库的工具,为了能够根据需要修改关键搜索参数,我使用了配置文件的方式进行配置。配置文件当时为了快速省事,直接采用了json文件。
请添加图片描述
请添加图片描述

在程序启动时,读取配置文件中的参数,然后使用这部分参数从HMDB网站获取数据,也算是比较灵活方便了。

2. 实现

由于配置文件比较小,这里我直接读取了整个文件内容;然后将其解析成对应的结构体

type ReqParam struct {
	SearchMode     string   `json:"ms_search_ion_mode"`
	AdductType     []string `json:"adduct_type"`
	Tolerance      string   `json:"tolerance"`
	ToleranceUnits string   `json:"tolerance_units"`
	CcsPredictors  string   `json:"ccs_predictors"`
	CcsTolerance   string   `json:"ccs_tolerance"`
}


func ReadReqParamConfig(fileName string) string {
	f, err := os.Open(fileName)
	if err != nil {
		fmt.Println(err)
		return ""
	}
	r := io.Reader(f)

	param := &ReqParam{}
	if err = json.NewDecoder(r).Decode(param); err != nil {/********************/
		panic(err)
	}

	return param.Trans2String()
}

func (rp ReqParam) Trans2String() string {//转换为http post载荷格式
	str := make([]byte, 0, 1024)
	{
		ss := fmt.Sprintf("&ms_search_ion_mode=%s", rp.SearchMode)
		str = append(str, []byte(ss)...)
	}

	{
		for _, v := range rp.AdductType {
			ss := "&adduct_type%5B%5D=" + v
			str = append(str, []byte(ss)...)
		}
	}
	{
		ss := fmt.Sprintf("&tolerance=%s", rp.Tolerance)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&tolerance_units=%s", rp.ToleranceUnits)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&ccs_predictors=%s", rp.CcsPredictors)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&ccs_tolerance=%s", rp.CcsTolerance)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&commit=%s", "Search")
		str = append(str, []byte(ss)...)
	}
	return strings.ReplaceAll(string(str), "+", "%2B")
}

3. HMDB爬虫工具效果

这里是最后的结果,上面介绍的只是其中一个很小的功能,虽然很简单,但是我还是百度出来的。正所谓:面向CSDN编程。为了以后能够更快,更准,更高效的面向CSDN编程,特将此小小功能记录下来。
请添加图片描述

请添加图片描述