zoukankan      html  css  js  c++  java
  • Html Agility Pack 使用 XPath 选择器

    想做一个爬虫程序,以前用的一直使用CSS选择器的html解析插件,最近做的项目想使用 Html Agility Pack 来做解析

    Html Agility Pack使用 XPath 和 Linq 来做Html解析,我使用Xpath中记录

    解析网页:http://txzhanshang.zhankoo.com/tt

    列表下一页://*[contains(@class, 'pagination-right')]/a[text()='下一页']

    文章地址://*[@class='zsinfo']/li/a[@href]

            // GET: Test
            public ActionResult Index()
            {
                var crawlerConfigList = _crawlerConfigService.GetCrawlerConfigs();
                foreach (var crawlerConfig in crawlerConfigList)
                {
                    GetList(crawlerConfig);
                }
                ViewBag.UrlList = urlList;
                return View(crawlerConfigList);
            }
    
            private void GetList(CrawlerConfig crawlerConfig)
            {
                var web = new HtmlWeb();
                var htmlDoc = web.Load(crawlerConfig.CrawlerUrl);
                var node = htmlDoc.DocumentNode.SelectNodes(crawlerConfig.ASelector);
                node.ForEach(x =>
                {
                    urlList.Add(x.Attributes["href"].Value);
                });
    
                //下一页
                var nextpageNode = htmlDoc.DocumentNode.SelectSingleNode(crawlerConfig.ListNextPageSelector);
                if (nextpageNode != null)
                {
                    var nextpage = nextpageNode.Attributes["href"].Value;
                    if (!string.IsNullOrEmpty(nextpage))
                    {
                        crawlerConfig.CrawlerUrl = crawlerConfig.CrawlerDomain + nextpage;
                        GetList(crawlerConfig);
                    }
                }
            }

     移除某个节点

    var url = "http://txzhanshang.zhankoo.com/detail/12709.html";
                var web = new HtmlWeb();
                var htmlDoc = web.Load(url);
                var node = htmlDoc.DocumentNode.SelectSingleNode("//*[@class='inner-wrap']");
                //移除某个节点
                foreach (var rm in node.SelectNodes("//*[@class='newsContenttip']"))
                {
                    rm.Remove();
                }
                var ss = node.InnerText;
                var sss = node.InnerHtml;
  • 相关阅读:
    关于数据集的划分--训练集、验证集和测试集
    关于过拟合的问题总结
    paddle 09-13
    关于NLP多分类任务评价指标的总结
    数组题解
    多进程-协程
    多任务-进程
    多任务-线程
    网络-tcp
    网络-udp
  • 原文地址:https://www.cnblogs.com/ideacore/p/7661826.html
Copyright © 2011-2022 走看看