可以在 C# 的 HtmlAgilityPack 中使用 LINQ 吗?
Posted
技术标签:
【中文标题】可以在 C# 的 HtmlAgilityPack 中使用 LINQ 吗?【英文标题】:It is possible to use LINQ in HtmlAgilityPack in C#? 【发布时间】:2020-08-26 01:08:09 【问题描述】:我学习C#
并尝试编写一个简单的应用程序。想问你帮我优化下面的代码。
我写了 2 种方法,并考虑使用 yield 和 LINQ
让它变得更好。想想有没有可能?
public List<string> getsSubpagesUrls(int subpages)
List<string> subpagesUrls= new List<string>();
for (int i = 1; i < subpages; i++)
string singleUrl = $"url/search%&page=i";
subpagesUrls.Add(singleUrl);
return subpagesUrls;
public List<string> getAllAnnouncementIds(int numberOfSubpages)
List<string> annIds = new List<string>();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
htmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
annIds.Add(id.Attributes["data-item-id"].Value);
return annIds;
【问题讨论】:
【参考方案1】:要使用 yield
关键字,您将从您的函数返回一个 IEnumerable,我稍微重构了您的代码:
public IEnumerable<string> getsSubpagesUrls(int subpages)
=> Enumerable.Range(1, subpages).Select(i => new string($"url/search%&page=i"));
public IEnumerable<string> getAllAnnouncementIds(int numberOfSubpages)
HtmlWeb web = new HtmlWeb();
foreach (var url in getsSubpagesUrls(numberOfSubpages))
var htmlDoc = web.Load(url);
var htmlBody = htmlDoc.DocumentNode.SelectNodes("//xpath");
var ids = htmlBody.Elements("element");
foreach (var id in ids)
yield return id.Attributes["data-item-id"].Value;
【讨论】:
以上是关于可以在 C# 的 HtmlAgilityPack 中使用 LINQ 吗?的主要内容,如果未能解决你的问题,请参考以下文章
c# 爬虫 -ChromeDriver+HtmlAgilityPack爬取比赛实时比分
如何使用 C# 在 Visual Studio 2010 中使用正则表达式或 HTMLAgilityPack 抓取 HTML 页面的特定部分?