Suppress the error messages with @. The document is still loaded and parsed (which it would have to be for the error messages to be generated). Most of those errors are corrected in the process. Some of the errors need to be cut down to make the code manageable. Who uses <font> tags these days? preg_replace('!</?font.*?>!','', $html). What's left should parse legibly. A lot of the grief comes from braindead constructs like <strong><font>...</strong></font>
Each item is in a td element that has attributes width="284" and valign="top". You're after the content of the strong element each contains. (Note I said "element", not "tag" - two different things.)
$itemXpath = new DOMXPath($doc);
$items = $itemXpath->query("//td[@width='284'][@valign='top']/strong");
The result of that is a DOMNodeList that can be traversed.
$doc = new DomDocument;
$html = preg_replace('!</?font.*?>!','', $html);
@$doc->loadHTML($html);
$itemXpath = new DOMXPath($doc);
$items = $itemXpath->query("//td[@width='284'][@valign='top']/strong");
for ($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "\n";
}
The $items do contain more detail than is just contained in the nodeValue, but given the mess the code is to begin with, it may not be trivial to separate the date from the title.