Подтвердить что ты не робот

Экран Скребок HTML с С#

Мне была поручена работа по экранизации одного из наших устаревших веб-приложений для извлечения определенных данных из кода. Данные форматируются и "должны" отображаться одинаково каждый раз. Я просто не знаю, как это сделать. Это полный html файл с навигацией верхнего и нижнего колонтитулов, но в середине всего этого нужны данные.

Мне нужно извлечь значение имени компании, контактное имя, телефон, адрес электронной почты и т.д.

Вот пример того, как выглядит код:

...html above here

<br /><br />
<table cellpadding="0" cellspacing="12" border="0">
    <tr>
        <td valign="top" align="center">
            <!-- Company Info -->

            <table cellpadding="0" cellspacing="0" border="0">
                <tr>
                    <td class="black">
                        <table cellspacing="1" cellpadding="0" border="0" width="370">
                            <tr>
                                <th>ABC INDUSTRIES</th>
                            </tr>
                            <tr>
                                <td class="search">

                                    <table cellpadding="5" cellspacing="0" border="0" width="100%">
                                        <tr>
                                            <td>
                                                <table cellpadding="1" cellspacing="0" border="0" width="100%">
                                                   <tr>
                                                        <td align="center" colspan="2"><hr></td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">Contact Person&nbsp;<img src="/images/icon_contact.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;Joe Smith</td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">Phone Number&nbsp;<img src="/images/icon_phone.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;555-555-5555</td>
                                                    </tr>
                                                    <tr>
                                                        <td align="right" nowrap><b><font color="FF0000">E-mail Address&nbsp;<img src="/images/icon_email.gif" align="absmiddle">&nbsp;:</font></b></td>
                                                        <td align="left" width="100%">&nbsp;<a HREF="mailto:[email protected]">[email protected]</a></td>
                                                    </tr>
                                                    more...

В другой структуре таблицы есть больше кода на экране, и мне также нужно тянуть.

4b9b3361

Ответ 1

Вы просто ищете предложения о том, как это сделать? HTML Agility Pack, вероятно, будет вашим лучшим выбором для разбора DOM в целом. Там может быть очень немного возиться и проб и ошибок, чтобы сохранить скриншот экрана (обычно для этого есть вещи), но эта библиотека довольно хороша для разбора HTML.

Технически, любой синтаксический анализ XML (даже родной LINQ to XML) должен делать трюк, но сайты имеют неприятную привычку не быть хорошо сформированными, поэтому вы можете столкнуться с небольшими головными болями здесь и там.

Ответ 2

В последних проектах я успешно использовал WebRequest и связанные с ним классы для загрузки HTML из URL-адреса, а затем SgmlReader парсер фактически получить доступ к структурированному контенту.

Ответ 3

Если комментарии к странице и код макета таблицы одинаковы при вызове, я бы вытащил страницу в строку и использовал ряд функций .IndexOf и .Substring для анализа данных. Используйте функцию IndexOf, чтобы найти начальные и конечные индексы каждого поля. Используйте эти индексы полей в функции подстроки для захвата данных.

Это не очень, но выполняет свою работу.

Ответ 5

Если у вас есть HTML, хранящийся в строке, вы всегда можете использовать регулярные выражения с группами захвата для анализа необходимой информации.