Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WinForm中解析html页面,C#_C#_Winforms_Linq To Sql_Html Parsing_Html Agility Pack - Fatal编程技术网

在WinForm中解析html页面,C#

在WinForm中解析html页面,C#,c#,winforms,linq-to-sql,html-parsing,html-agility-pack,C#,Winforms,Linq To Sql,Html Parsing,Html Agility Pack,我正在使用HtmlAgility包解析html页面。我可以从我需要获取数据的地方找到我的部分。实际上它是一个表,我必须解析它的tr。 基本上,我有两个问题 当我在解析器中加载一个页面时,将其加载到内存中大约需要20-30秒,需要解析的网页大约有4738个。所以,我想减少它…我想知道我可以在循环中使用委托调用方法,这样我可以减少延迟时间。或者是否有任何有效的方法来做到这一点。请引导我通过那个 我的行是“\r\n\t\t\t\t110001New DelhiDelhiBaroda House\r\n

我正在使用HtmlAgility包解析html页面。我可以从我需要获取数据的地方找到我的部分。实际上它是一个表,我必须解析它的tr。 基本上,我有两个问题

  • 当我在解析器中加载一个页面时,将其加载到内存中大约需要20-30秒,需要解析的网页大约有4738个。所以,我想减少它…我想知道我可以在循环中使用委托调用方法,这样我可以减少延迟时间。或者是否有任何有效的方法来做到这一点。请引导我通过那个

  • 我的行是
    “\r\n\t\t\t\t110001New DelhiDelhiBaroda House\r\n\t\t\t”
    ,从上面我必须解析11001,新德里,德里和巴罗达House。实际上我有一个类Pincodes,其中我有Pincode、Area、State和District属性。所以我需要一个正则表达式或某种方法来将这些值放到类中

  • 最后,我必须将这些记录推送到我使用Linq2Sql的数据库中。所以保留所有的东西,请告诉我解决方法。任何参考或链接都会有很大帮助

    我的代码:

      var url = @"http://www.eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
                var web = new HtmlWeb();
                var doc = web.Load(url);
                //doc.DocumentNode.SelectSingleNode("//*[@id=\"lst-ib\"]");//("/html/body/div[2]/form/div/div[2]/table/tbody/tr/td/table/tbody/tr/td/div/table/tbody/tr/td/table/tbody/tr/td[2]/div/input");
                //System.Console.WriteLine(doc.DocumentNode.SelectSingleNode("//*[@id=\"lst-ib\"]").Id);
                var htmlNode =
                    doc.DocumentNode.SelectSingleNode(
                        "//*[@id=\"ctl00_uxContentPlaceHolder_ResourceAndGuideUserControl1_ResourceAndGuideGrid_myGridView_mainGridView\"]");
    

    提前感谢

    页面上的URL、ID或其他任何内容看起来都没有模式。它设计得很差。如果有一个很好的模式(比如结果的不同页码),那么这可能可以并行完成。因为它不是,所以您必须按顺序执行,因为没有可靠的方法(我可以看到)将url获取到下一页

    var url = "http://eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
    var web = new HtmlWeb();
    var results = new List<Pincode>();
    while (!String.IsNullOrWhiteSpace(url))
    {
        var doc = web.Load(url);
        var query = doc.DocumentNode
            .SelectNodes("//div[@class='Search']/div[3]//tr")
            .Skip(1)
            .Select(row => row.SelectNodes("td"))
            .Select(row => new Pincode
            {
                PinCode = row[0].InnerText,
                District = row[1].InnerText,
                State = row[2].InnerText,
                Area = row[3].InnerText,
            });
        results.AddRange(query);
    
        var next = doc.DocumentNode
            .SelectSingleNode("//div[@class='slistFooter']//a[last()]");
        if (next != null && next.InnerText == "Next")
        {
            url = next.Attributes["href"].Value;
        }
        else
        {
            url = null;
        }
    }
    
    var url=”http://eximguru.com/traderesources/pincode.aspx?&GridInfo=Pincode01";
    var web=新的HtmlWeb();
    var results=新列表();
    而(!String.IsNullOrWhiteSpace(url))
    {
    var doc=web.Load(url);
    var query=doc.DocumentNode
    .SelectNodes(“//div[@class='Search']/div[3]//tr”)
    .Skip(1)
    .Select(row=>row.SelectNodes(“td”))
    .选择(行=>新Pincode
    {
    PinCode=行[0]。InnerText,
    District=行[1]。InnerText,
    状态=行[2]。InnerText,
    区域=行[3]。InnerText,
    });
    results.AddRange(查询);
    var next=doc.DocumentNode
    .SelectSingleNode(“//div[@class='slistFooter']//a[last()]”);
    if(next!=null&&next.InnerText==“next”)
    {
    url=next.Attributes[“href”].Value;
    }
    其他的
    {
    url=null;
    }
    }