Files
retoor da6d3d747b chore: add AngleSharp dependency and refactor rant scraping to use CSS class queries
- Add AngleSharp NuGet package version 1.1.2 to csproj for HTML parsing
- Introduce DomQueryClass helper method using AngleSharp to extract elements by CSS class name
- Replace XPath-based node selection in get_rants with DomQueryClass targeting "rantlist-title-text"
- Update Program.cs to await RunIt task and add a 100-iteration loop around rant fetching
- Add transform string concatenation utility method to Program class
2024-12-17 11:10:58 +00:00

47 lines
1.4 KiB
C#

using HtmlAgilityPack;
using System;
using System.Linq;
using AngleSharp;
class DrApi
{
public static async Task<List<string>> DomQueryClass(string htmlContent, string className)
{
var config = Configuration.Default;
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(req => req.Content(htmlContent));
var elements = document.QuerySelectorAll($".{className}");
return elements.Select(el => el.TextContent).ToList(); //OuterHtml).ToList()
}
public static async Task<string> get_rants(string url)
{
string response = await HTTP.get(url).ConfigureAwait(false); ;
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(response);
var nodes = await DomQueryClass(response, "rantlist-title-text");
foreach (var node in nodes)
{
Console.WriteLine(node);
}
//var nodes = doc.DocumentNode.SelectNodes("//a");
//var nodes = doc.DocumentNode.SelectNodes("//a[contains(@class,'rantlist-content-col')");
//var nodes = doc.DocumentNode.SelectNodes("//div[contains(@class, 'rant-comment-row-widget')]");
//foreach (var node in nodes) {
// Console.WriteLine(node.GetAttributeValue("class","None"));
// if(node.GetAttributeValue("class","None") == "rantlist-bglink"){
// Console.WriteLine(node.InnerText);
//}
//}
return null;
}
}