public static void Main(string[] args)
HtmlDocument htmlDoc = new HtmlDocument();
string url = "https://www.procyclingstats.com/race/tour-de-france/2022/stage-1";
var stage = url.Substring(url.Length - 2) ;
StringBuilder sb = new StringBuilder();
string urlResponse = URLRequest(url);
htmlDoc.LoadHtml(urlResponse);
var resultRiders = htmlDoc.DocumentNode.SelectNodes("//div[contains(@class, 'result-cont')]").FirstOrDefault();
if (resultRiders != null)
var riderAnchors = resultRiders.SelectNodes("//a").Where(a => a.ParentNode.Name == "div" && a.Attributes.Any(att => att.Name == "href" && att.Value.StartsWith("rider")));
if (riderAnchors != null && riderAnchors.Any() == true)
sb.AppendFormat("Declare @StageId int = {0};\n\r",stage);
sb.AppendLine("Insert Into RawData.StageResult(StageId,Position,Name)");
foreach (var anchorNode in riderAnchors)
sb.AppendLine(String.Format("(@StageId, {1}, '{0}' )", anchorNode.InnerText,++i));
sb.AppendFormat(_template,stage);
Console.WriteLine("GEEN RESULTS");
static string URLRequest(string url)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)";
string responseContent = null;
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader streamreader = new StreamReader(stream))
responseContent = streamreader.ReadToEnd();
return (responseContent);
static string _template = @"
From RawData.StageResult rsr
Insert Into [dbo].[StageResult]( StageId, Position, CyclistID)
Select rsr.StageId,rsr.Position,c.CyclistID
From RawData.StageResult rsr
Declare @StageId int = {0};
Insert Into ParticipantStageResult(StageId,ParticipantID,PreviousPoints,StagePoints,TotalPoints)
Select --@StageId, pc.ParticipantID, psr.TotalPoints, (isnull(21-sr.Position,0)), psr.TotalPoints + (isnull(21-sr.Position,0))
@StageId, pc.ParticipantID, psr.TotalPoints, SUM(isnull(21-sr.Position,0)), psr.TotalPoints + SUM(isnull(21-sr.Position,0))
From ParticipantCyclist pc
Join ParticipantStageResult psr
on psr.StageId = @StageId -1
and psr.ParticipantID = pc.ParticipantID
and pc.CyclistID = sr.CyclistID
pc.ParticipantID,psr.StageId, psr.TotalPoints
-- Uitslag punten per Renner
Select sr.Position as Positie, c.Name as Naam, 21-sr.Position as Punten
on c.CyclistID = sr.CyclistID
-- Uitslag punten per Renner, per gekozen renner
21-sr.Position as Punten,
ISNULL(LEFT(names.name, Len(names.name) - 1),'') as Deelnemers
on c.CyclistID = sr.CyclistID
SELECT CONVERT(VARCHAR(100), p.Name) + ',' AS [text()]
FROM ParticipantCyclist pc WITH(readuncommitted)
Join Participant p on p.ParticipantID = pc.ParticipantID
WHERE pc.CyclistId = c.CyclistId
GROUP BY pc.CyclistId,p.Name
Select p.Name as Naam, psr.PreviousPoints as SubTotaal, psr.StagePoints as Etappe, psr.TotalPoints as Tussenstand
From ParticipantStageResult psr
on p.ParticipantID = psr.ParticipantID
Order by TotalPoints asc, Naam asc";