开发手册 欢迎您!
软件开发者资料库

.NET(C#) 使用CsQuery后台通过JQuery语法解析Html方法代码

本文主要介绍.NET(C#)中,后台代码中使用CsQuery框架,通过JQuery语法选择器处理解析Html或提取Html中指定的内容方法代码。CsQuery是.NET 4的jQuery端口。它实现了所有CSS2和CSS3选择器,jQuery的所有DOM操作方法,以及一些实用方法。大多数jQuery测试套件(截至1.6.2)已移植到C#。

1、CsQuery安装引用

官方地址https://github.com/jamietre/CsQuery

通过Nuget管理器,搜索"CsQuery" => 点击"安装"。

相关文档VS(Visual Studio)中Nuget的使用

2、CsQuery使用代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using CsQuery;using CsQuery.Web;using Microsoft.VisualStudio.TestTools.UnitTesting;using NUnit.Framework;using Assert = NUnit.Framework.Assert;using Description = NUnit.Framework.DescriptionAttribute;using TestContext = Microsoft.VisualStudio.TestTools.UnitTesting.TestContext;using System.Diagnostics;namespace CsQuery.Tests.Examples{    ///    ///     这个测试在默认情况下是禁用的,因为它访问公共web站点,激活它只是为了测试这个特性    ///        [TestFixture, TestClass]    public class YahooFinance : CsQueryTest    {        public override void FixtureSetUp()        {            base.FixtureSetUp();            ServerConfig.Default.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";        }        //[Test, TestMethod]        public void YahooFinanceExample()        {            string URL = "http://finance.yahoo.com/q/op?s=MSFT&m=2012-09";            CQ doc = CQ.CreateFromUrl(URL);            // 这两个表有一个类“yfnc_datamodoutline1”,但是包装了一个内部表            var rows = doc.Select(".yfnc_datamodoutline1 table tr");           //在CsQuery中,索引器[]是用Select方法sysnoymous的           //每个头行都有类"yfnc_tablehead1" -找出要使用哪个列           //你感兴趣的四个部分            var headers= rows.First().Find(".yfnc_tablehead1");            int strikeIndex = headers.Filter(":contains('Strike')").Index();            int symbolIndex = headers.Filter(":contains('Symbol')").Index();            int bidIndex = headers.Filter(":contains('Bid')").Index();            int askIndex = headers.Filter(":contains('Ask')").Index();           //  遍历所有行,头行除外(“has”排除头行)            foreach (var row in rows.Has("td")) {                CQ cells = row.Cq().Find("td");                string output = String.Format("Strike: {0} Symbol: {1} Bid: {2} ask: {3}",                    cells[strikeIndex].Cq().Text(),                    cells[symbolIndex].Cq().Text(),                    cells[bidIndex].Cq().Text(),                    cells[askIndex].Cq().Text());           // CQ cq = CsQuery.CQ.CreateFromFile(path);            // string title = cq["body > div > p [style*='font-weight:bold']"].Text();           // string content = cq["body > div > p [style*='text-decoration:underline']"].Text();                Console.WriteLine(output);            }        }    }}

作者提供的注意事项: 

CsQuery未得到积极维护。我不再在日常工作中使用它,甚至在这些日子里甚至都没有在.NET中工作!因此,我很难花时间解决问题。如果您发布问题,我可能无法回复它们,并且我不太可能修复错误。
虽然NuGet(1.3.4)上的当前版本是稳定的,但是有一些已知的错误(请参阅问题),并且自存储库中的上一版本以来有许多更改。但是,我不打算发布任何正式版本,因为我没有时间验证当前的代码库并解决已知问题,或支持新版本可能出现的任何不可预见的问题。
我欢迎任何社区参与使这个项目再次活跃起来。如果您使用CsQuery并且有兴趣成为项目的合作者,请直接与我联系。
您还应该考虑使用AngleSharp,这是一个正在积极维护的新项目。它不是替代品,但提供类似的功能。

相关文档.Net(C#) Core安装使用AngleSharp解析html的方法及示例代码