Here is some VB code to read a single race off the Racing Post.
I order todays races by time then click on a race of interest. Copy the RP URL into The VB form then click on the race info button and get a copy paste list for excel.

The VB form has two buttons bScrape, bRaceInfo and two text boxes tLinkURL, SrcBox. SrcBox Property set to multi-line for the the results to be printed to.

Might be of interest to someone.
-------------------------------
Imports System.Net
Imports System.IO

Public Class Form1

Private Sub bScrape_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bScrape.Click
If (Not tLinkURL.Text = Nothing) Then
Dim src As String
src = GetWebText(tLinkURL.Text)
'tLinkURL.Text = tLinkURL.Text.ToLower()

SrcBox.Text = src

End If
End Sub
Sub ShowRace(ByVal src As String)
Dim titleArray() As String
Dim Course() As String
Dim Trainer As String
Dim Horse As String

'Markers
'<title> -means- time and Race course found next ending with | Full Racecard | Racing Post</title>
'title="Full details about this TRAINER"> -means- trainer name </a>
'data-outcome-name=" -means- Name of Horse follows ending with "
src = src.Replace(":", "¬")
src = src.Replace("<", ":")
src = src.Replace(">", ":")
src = src.Replace("""", ":")
titleArray = Split(src, ":")
For i As Integer = 0 To titleArray.Length - 1
Trainer = ""
Horse = ""
If (titleArray(i) = "title") Then
If (titleArray(i + 1) <> "¬") Then
Course = Split(titleArray(i + 1), "|")
Course(0) = Course(0).Replace("¬", ".")
Print(Course(0))
End If
End If
If titleArray(i) = "Full details about this TRAINER" Then
Trainer = titleArray(i + 2)
Trainer = Trainer.Replace("&acute;", "'")
titleArray(0) = Trainer
End If
If titleArray(i) = " data-outcome-name=" Then
Horse = titleArray(i + 1)
Horse = Horse.Replace("&acute;", "'")
End If
If titleArray(i) = "div class=" Then 'Dont read single race card after finding this
If titleArray(i + 1) = "cardFooter" Then
i = titleArray.Length - 1
End If
End If
If Horse <> "" Then
titleArray(0) = Horse + Chr(9) + titleArray(0)
Print(titleArray(0))
End If
Next
Print("")
End Sub
Sub Print(ByVal Message As String)
With SrcBox
.SelectionStart = .Text.Length
.SelectedText = vbCrLf & Message
End With
End Sub

Function GetWebText(ByVal SomeURL As String) As String
If (Not SomeURL = Nothing) Then
SomeURL = SomeURL.ToLower()
If (SomeURL.StartsWith("https://") Or SomeURL.StartsWith("http://")) Then
If (Not SomeURL.StartsWith("https://www.") And Not SomeURL.StartsWith("http://www.")) Then
If Not (SomeURL.StartsWith("www.")) Then
If (SomeURL.StartsWith("http://")) Then
SomeURL = "http://www." & SomeURL.Substring(7, SomeURL.Length - 7)
Else
SomeURL = "https://www." & SomeURL.Substring(8, SomeURL.Length - 8)
End If
End If
End If
ElseIf (SomeURL.StartsWith("www.")) Then
SomeURL = "http://" & SomeURL
Else
SomeURL = "http://www." & SomeURL
End If
Dim req As HttpWebRequest = HttpWebRequest.Create(SomeURL)
Dim res As HttpWebResponse = req.GetResponse()
Dim src As String = New StreamReader(res.GetResponseStream()).ReadToEnd()
Return src
End If
Return ""
End Function


Private Sub bRaceInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bRaceInfo.Click
If (Not tLinkURL.Text = Nothing) Then
Dim src As String
src = GetWebText(tLinkURL.Text)
ShowRace(src)
End If
End Sub
End Class