Нужно распарсить таблицу с html на C#

255
26 ноября 2016, 19:45

Вот есть такой html:

<div class="middle"><table width='100%' border='0' cellspacing='0' cellpadding='0' bgcolor='#ffffff' id='forecast'>
<tr>
<td id="dt" class='legend' width='245' style='border-bottom: 1px solid #ddd;'>
<span style="color:#333; font-size: 11px; font-weight: normal;">Прогноз <a href="/about/?information=forecast" title="Численная модель UKMET 12">рассчитан автоматически</a> без контроля и корректировки специалистом.</span><br>
</td><td style='border-bottom: 1px solid #ddd;' width='10'><img src="/tpl/img/data-main.gif" alt=""></td>

<td width='7%' class='dat'  bgcolor="#F2F2FF">вечер, чт.<br>03 ноября</td>
<td width='7%' class='dat'  bgcolor="#F2F2FF">ночь, пт.<br>04 ноября</td>
<td width='7%' class='dat' >утро, пт.<br>04 ноября</td>
<td width='7%' class='dat' >день, пт.<br>04 ноября</td>
<td width='7%' class='dat'  bgcolor="#F2F2FF">вечер, пт.<br>04 ноября</td>
<td width='7%' class='dat'  bgcolor="#F2F2FF">ночь, сб.<br>05 ноября</td>
<td width='7%' class='dat' >утро, сб.<br>05 ноября</td>
<td width='7%' class='dat' >день, сб.<br>05 ноября</td>
<td width='7%' class='dat'  bgcolor="#F2F2FF">вечер, сб.<br>05 ноября</td>
<td width='7%' class='dat'  bgcolor="#F2F2FF">ночь, <font color='#EA6400'>вс.</font><br>06 ноября</td>
</tr>
<tr>
<td class='legend'>Облачность и погодные явления</td><td>&nbsp;</td>
 <td class='meteo'>
 <img title='Облачно с прояснениями.Без осадков.' src='6/pict-40/BKNn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Облачно с прояснениями.Без осадков.'></td>
 <td class='meteo'>
 <img title='Переменная облачность.Без осадков.' src='6/pict-40/SCTn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Переменная облачность.Без осадков.'></td>
 <td class='meteo'>
 <img title='Облачно с прояснениями.Без осадков.' src='6/pict-40/BKN.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Облачно с прояснениями.Без осадков.'></td>
 <td class='meteo'>
 <img title='Сплошная облачность.Возможен мокрый снег.' src='6/pict-40/SNRA.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Сплошная облачность.Возможен мокрый снег.'></td>
 <td class='meteo'>
 <img title='Небольшая облачность.Без осадков.' src='6/pict-40/FEWn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Небольшая облачность.Без осадков.'></td>
 <td class='meteo'>
 <img title='Переменная облачность.Без осадков.Дымка.' src='6/pict-40/SCTn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Переменная облачность.Без осадков.Дымка.'></td>
 <td class='meteo'>
 <img title='Сплошная облачность.Без осадков.' src='6/pict-40/OVC.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Сплошная облачность.Без осадков.'></td>
 <td class='meteo'>
 <img title='Сплошная облачность.Без осадков.' src='6/pict-40/OVC.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Сплошная облачность.Без осадков.'></td>
 <td class='meteo'>
 <img title='Облачно с прояснениями.Без осадков.Дымка.' src='6/pict-40/BKNn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Облачно с прояснениями.Без осадков.Дымка.'></td>
 <td class='meteo'>
 <img title='Сплошная облачность.Без осадков.Дымка.' src='6/pict-40/OVCn.png' width='40' height='40' vspace='4' hspace='6' alt='Явление погоды:Сплошная облачность.Без осадков.Дымка.'></td>
</tr>
<tr>
<td class='legend'>Температура, °С</td><td>&nbsp;</td>
 <td class='meteo' title='Tmax=6.6 Tmin=4.5'>+4..+6</td>
 <td class='meteo' title='Tmax=4.6 Tmin=2.2'>+1..+3</td>
 <td class='meteo' title='Tmax=2.4 Tmin=1.6'>+1..+3</td>
 <td class='meteo' title='Tmax=4.3 Tmin=2.4'>+3..+5</td>
 <td class='meteo' title='Tmax=3.9 Tmin=0.8'>+0..+2</td>
 <td class='meteo' title='Tmax=0.7 Tmin=-1'>0..-2</td>
 <td class='meteo' title='Tmax=0.5 Tmin=-1.2'>около 0</td>
 <td class='meteo' title='Tmax=2.9 Tmin=0.6'>+2..+4</td>
 <td class='meteo' title='Tmax=2.7 Tmin=-0.3'>около 0</td>
 <td class='meteo' title='Tmax=-0.3 Tmin=-0.9'>0..-2</td>
</tr>
<tr>
<td class='legend' nowrap>Скорость и направление ветра, м/с</td><td>&nbsp;</td>
 <td class='meteo' valign='top'> 4–6, Ю-З </td>
 <td class='meteo' valign='top'> 5–7, Западный </td>
 <td class='meteo' valign='top'> 5–7, Западный </td>
 <td class='meteo' valign='top'> 6–8, Западный,&nbsp;<br>порывы 11 </td>
 <td class='meteo' valign='top'> 4–6, Западный </td>
 <td class='meteo' valign='top'> 3–5, Западный </td>
 <td class='meteo' valign='top'> 3–5, Западный </td>
 <td class='meteo' valign='top'> 4–6, Западный </td>
 <td class='meteo' valign='top'> 2–4, Ю-З </td>
 <td class='meteo' valign='top'> 2–4, Южный </td>
</tr>
<tr>
<td class='legend'>Атмосферное давление,<br>приведенное уровню моря, гПа <span style='color:#888888;'> [мм рт. ст.] </span></td><td>&nbsp;</td>
 <td class='meteo'>1011<br><span style='color:#888;'>758</span></td>
 <td class='meteo'>1013<br><span style='color:#888;'>760</span></td>
 <td class='meteo'>1016<br><span style='color:#888;'>762</span></td>
 <td class='meteo'>1018<br><span style='color:#888;'>763</span></td>
 <td class='meteo'>1021<br><span style='color:#888;'>766</span></td>
 <td class='meteo'>1023<br><span style='color:#888;'>767</span></td>
 <td class='meteo'>1024<br><span style='color:#888;'>768</span></td>
 <td class='meteo'>1024<br><span style='color:#888;'>768</span></td>
 <td class='meteo'>1024<br><span style='color:#888;'>768</span></td>
 <td class='meteo'>1022<br><span style='color:#888;'>767</span></td>
</tr>
<tr>
<td class='legend'>Влажность, %</td><td>&nbsp;</td>
 <td class='meteo'>95</td>
 <td class='meteo'>95</td>
 <td class='meteo'>95</td>
 <td class='meteo'>90</td>
 <td class='meteo'>80</td>
 <td class='meteo'>90</td>
 <td class='meteo'>90</td>
 <td class='meteo'>75</td>
 <td class='meteo'>95</td>
 <td class='meteo'>95</td>
</tr>
<tr>
<td class='legend'>Количество осадков, мм за 6 ч </td><td>&nbsp;</td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo' nowrap>0.3</td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td>
 <td class='meteo'> — </td></tr>
</table></div>

нужно получить данные из ячеек, за исключением 2 строки. В ней нужно из атрибутов тега img выбирать данные. Я сделал так, но так я выбираю данные только из ячеек:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var table = doc.DocumentNode.SelectSingleNode("//div[@class='middle']/table").Descendants("tr")
            .Where(tr => tr.Elements("td").Count() > 1)
            .Select(tr => tr.Elements("td").Skip(2).Select(td => td.InnerText.Trim()).ToList()).ToList();
Answer 1

Так для второй строки вместо InnerText будет браться аттрибут:

var table = doc.DocumentNode.SelectNodes("//div[@class='middle']/table").Descendants("tr")
        .Where(tr => tr.Elements("td").Count() > 1)
        .Select((tr, i) => tr.Elements("td").Skip(2)
                .Select(td => i == 1 ? td.Descendants("img").FirstOrDefault().Attributes["title"].Value.Trim() : td.InnerText.Trim()).ToList())
        .ToList();
READ ALSO
Как вытащить инфу из html тегов по id?

Как вытащить инфу из html тегов по id?

Есть скрипт получающий запрос (через input())Далее запрос складывается с заранее заданным url, и в переменную присваивается html код получившейся...

280
Проблема с плеером на JavaScript

Проблема с плеером на JavaScript

Есть самопальный плеер на JavaScript, если я добавляю второй элемент <audio>, то он работает лишь с первым источником, игнорируя другой, то есть...

250
flexbox grid system

flexbox grid system

Не могу понять почему мои боксы стали такие маленькие (были квардратные)lg в md в xs вставил но всё же криво всё стало

232
html css при скролле ресайз картинки

html css при скролле ресайз картинки

Добрый деньНе могу разобраться в чём причина, может поможете? Вот сайт: http://ipass

341