private async Task <FoodMaterialItem> GetFoodMaterial(string foodMaterialName, string foodMaterialHref) { string englishName = CrawlerHelper.GetUrlLast(foodMaterialHref); var foodMaterial = new FoodMaterialItem() { Description = foodMaterialName, EnglishName = englishName, SourceUrl = foodMaterialHref, Photo = FoodMaterial.GetImageUrlPath(englishName), }; IHtmlDocument foodMaterialDoc = await CrawlerHelper.GetDocumentAddHttpPrefixAsync(foodMaterialHref + "/useful"); var sourceImgUrl = foodMaterialDoc.QuerySelector("#category_pic")?.GetAttribute("data-src"); if (sourceImgUrl == null) { Logger.Error($"{foodMaterialName} 找不到 category_pic"); } //string localImgPath = "FoodMaterial\\" + englishName + ".jpg"; if (ChiMaConfig.NeedDownloadFoodMaterialImage && sourceImgUrl != null) { string localImgPath = FoodMaterial.GetImageLocalPath(englishName); CrawlerHelper.DownloadImgAndSaveAsync(sourceImgUrl, localImgPath); } var nutritionsUL = foodMaterialDoc.QuerySelector(".category_use_table.mt10.clear")?.FirstElementChild; foodMaterial.Nutritions = new List <string>(); if (nutritionsUL != null) { foreach (var li in nutritionsUL.GetElementsByTagName("li")) { var name = li.TextContent; //var value = li.FirstElementChild.TextContent; foodMaterial.Nutritions.Add(name); } } return(foodMaterial); }