C#/ Html敏捷包,是否有更为雄辩的屏幕刮擦方式?

时间:2012-05-02 02:31:09

标签: linq c#-4.0 html-agility-pack

我正在使用C#中的应用程序,每天从几个不同的页面收集Web数据并将其保存在SQL Server中。我正在使用html敏捷包...目前我有一个数据库中每个字段/列的xpath。表中有62列,并且检查正确的值和格式,下面的代码非常冗长和重复(特别是xpath表达式和相关块)。我想知道是否有更好,更简洁的方式,也许使用LINQ? (我还没有用太多但是想要)这里只是下面设置的第一对夫妇,重复...... 62 cols。我不是在寻找重写,只是我能得到的任何建议。

List<IDataPoint> list = new List<IDataPoint>();
HtmlWeb hwObject = new HtmlWeb();
HtmlDocument htmlDoc = hwObject.Load(AddressString);

if (htmlDoc.DocumentNode != null && !htmlDoc.DocumentNode.InnerHtml.Contains("There is no key statistics data available"))
{
      var symbolNode = htmlDoc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[4] /div/div/div/div/div/div/h2");
      if (symbolNode != null)
      {
            KeyStatsDP keyStatsDp = new KeyStatsDP();
            String symb = "";
            symb = symbolNode.InnerHtml;
            symb = symb.Substring(symb.LastIndexOf("(") + 1);
            symb = symb.Substring(0, symb.Length - 1);
            keyStatsDp.Symbol = symb;

            String mktCapXPath = "//*[@id=\"yfs_j10_" + symb.ToLower() + "\"]";
            var mktCapNode = htmlDoc.DocumentNode.SelectSingleNode(mktCapXPath);
            if (mktCapNode != null)
            {
                  String mktCap = mktCapNode.InnerHtml;
                  keyStatsDp.MarketCapIntraDay = ConvertMoneyInStrToInt(mktCap);
            }

            var entValNode = htmlDoc.DocumentNode.SelectSingleNode("//html/body/div[3]/div[4]/table[2]/tr[2]/td/table[2]/tr/td/table/tr[2]/td[2]");
            if (entValNode != null)
            {
                  if (!entValNode.InnerHtml.Contains("N"))
                  {
                        String entVal = entValNode.InnerHtml;
                        keyStatsDp.EntValue = ConvertMoneyInStrToInt(entVal);
                   }
            }

0 个答案:

没有答案