protected override async Task <BaseEvt> ParseHtml(string sn, string html) { var evt = new ListedEvt(); evt.Sn = sn; evt.Url = $"{domain}/ipo/show{sn}/"; if (await ParseHtml(evt)) { return(evt); } return(null); }
/// <summary> /// 拉取单个上市详细数据 /// </summary> /// <param name="evt"></param> /// <returns></returns> async Task <bool> ParseHtml(ListedEvt evt) { if (string.IsNullOrEmpty(evt.Url)) { throw new ArgumentException("未赋值Url,无法执行"); } string html; try { html = await Util.GetPage(evt.Url); } catch (Exception exp) { Util.Error($"error: {evt.Url}: {exp}"); return(false); } var idx = html.IndexOf("投资事件详情", StringComparison.Ordinal); if (idx < 0) { Util.Error($"no data: {evt.Url}: {html}"); return(false); } var match = _regexMain.Match(html, idx); if (!match.Success) { Util.Error($"no match data: {evt.Url}: {html}"); return(false); } var dataStr = match.Value; var matTitle = _regexTitle.Match(dataStr); if (!matTitle.Success) { Util.Error($"no match title: {evt.Url}: {dataStr}"); return(false); } evt.Title = TrimVal(matTitle, 1); var matData = _regexData.Match(dataStr); if (!matData.Success) { Util.Error($"no match dataStr: {evt.Url}: {dataStr}"); return(false); } evt.Name = TrimVal(matData, 1); matData = matData.NextMatch(); evt.Industry = TrimVal(matData, 1); matData = matData.NextMatch(); evt.InvestName = TrimVal(matData, 1); matData = matData.NextMatch(); evt.Date = TrimVal(matData, 1); matData = matData.NextMatch(); evt.Price = TrimVal(matData, 1); matData = matData.NextMatch(); evt.ListedPlace = TrimVal(matData, 1); matData = matData.NextMatch(); evt.ListedNum = TrimVal(matData, 1); matData = matData.NextMatch(); evt.Code = TrimVal(matData, 1); matData = matData.NextMatch(); evt.VcSuport = TrimVal(matData, 1); return(true); }