Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/43: Рейтинг темы: голосов - 43, средняя оценка - 4.91
14 / 14 / 1
Регистрация: 23.06.2011
Сообщений: 34

парсинг с помощью mshtml

30.11.2011, 23:44. Показов 8641. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
pps ошибся и не правильно назвал тему, с помощью mshtml

Всем привет такой вопрос. У меня есть html страничка, которую я получаю с помощью пост запроса.
C# Скопировано
1
2
3
string html = " <body>......</body>";
mshtml.IHTMLDocument2 doc = new mshtml.HTMLDocumentClass();
 doc.write(html);
В ней есть некоторая таблица, часть
HTML5 Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<tr>
  <th width="30">
    <a href="#" tabindex="6">5</a>
  </th>
  <th width="30">
    <a class="over_lib" style="cursor: pointer;">
      <img src="skins/xnova-evolution-plus/planeten/small/s_dschjungelplanet09.jpg" height="30" width="30">
    </a>
  </th>
  <th style="white-space: nowrap;" width="130">
    <font color="red">2ва</font>
  </th>
  <th style="white-space: nowrap;" width="30">
    <a class="over_lib" style="cursor: pointer;">
      <img src="skins/xnova-evolution-plus/planeten/small/s_mond.jpg" height="30" width="30">
    </a>
  </th>
  <th style="white-space: nowrap;" width="30"></th>
  <th width="150">
    <a class="over_lib" style="cursor: pointer;" href="options.php">
_2-D_ </a>
  </th>
  <th width="80">
    <a class="over_lib" style="cursor: pointer;">
      <span class="allymember">Garfield</span>
    </a>
  </th>
  <th style="white-space: nowrap;" width="125"></th>
</tr>
мне нужно получить элементы этой таблицы и я не знаю как. Раньше делал через webbrouser и там использовал getelement by tag name
C# Скопировано
1
2
HtmlElementCollection tr = webBrowser1.Document.GetElementsByTagName("tr");
 HtmlElementCollection td = tr[i].GetElementsByTagName("th");
всё получалось, но хотелось бы без webbrouser, но в mshtml нет GetElementsByTagName.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2011, 23:44
Ответы с готовыми решениями:

Парсинг с помощью HtmlAgilityPack
Здравствуйте. Нужно спарсить со страницы два числа, которые стоят между тегов &lt;span id=&quot;first_id&quot;&gt;*первое...

Подключить mshtml.dll
В проекте добавляю ссылку на mshtml.dll , и вылетает ошибка --------------------------- Не удается добавить ссылку на...

Как подключить библиотеку mshtml
Как подключить библиотеку mshtml? В проекте необходимо использовать mshtml, но при добавлении using.mshtml компилятор не видит ее.

4
 Аватар для sau
2756 / 2058 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
01.12.2011, 00:07
Легких путей не ищем ? , используй IHTMLDocument3, там все есть.
http://msdn.microsoft.com/en-u... S.85).aspx
0
14 / 14 / 1
Регистрация: 23.06.2011
Сообщений: 34
01.12.2011, 20:17  [ТС]
не знал об этом, я первый день наткнулся на эту библиотеку))

можно поподробнее, как сделать

Добавлено через 19 часов 55 минут
вопрос актуален
0
LAPAGURU
12.01.2013, 15:31
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System.Net;
using mshtml;
 
 
               WebRequest req1 = WebRequest.Create("samsing url")
 
                req1.Method = "GET";
                req1.Credentials = System.Net.CredentialCache.DefaultCredentials;
                req1.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
                WebResponse res1 = req1.GetResponse();
                StreamReader sr1 = new StreamReader(res1.GetResponseStream());
                string returnvalue1 = sr1.ReadToEnd();
 
                HTMLDocument doc = new HTMLDocument();
                IHTMLDocument2 doc2 = (IHTMLDocument2)doc;
                doc2.clear();
                doc2.write(returnvalue1);
 
                IHTMLDocument3 doc3 = (IHTMLDocument3)doc2;
                IHTMLElement div = doc3.getElementById("YouId or ne YouId");
                
 
                IHTMLElementCollection allInputs = div.all;
 
                foreach (IHTMLElement tst in allInputs)
                {
 
                        string result = tst.innerHTML;
                        richTextBox1.Text = result;
 
                 }
LAPAGURU
15.01.2013, 12:56
А вообще, для более лучшего понимания я объясню все этапы работы парсера с использованием mshtml.

Code Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
.................
.................
.................
using mshtml;
 
private void Parse()
{
    HTMLDocument    doc; //Класс
    IHTMLDocument2 doc2; //Интерфейс второго уровня 
    IHTMLDocument3 doc3; //Интерфейс третьего уровня - не поленитесь почитайте что за уровни? 
                                     //и как их препарировать
    string s = "";  //куда будем складывать данные
 
    //Допустим мы где-то достали HTML страничку и поместили ее в переменную html
    string html = "<html __expr-val-dir='ltr' dir='tr'>
                       <body class='body' scroll='yes' onload='javascript:_spBodyOnLoadWrapper();'>
                          <div id='someid' style='width: auto'>
                          <div class='resultS'>
                         <h1>
                        Результаты поиска
                         </h1>
                          </div>
 
                              <div class='forms resultSearchTable' style='width: auto'>
                        <table class='resultsINN columnsAuto' style='width: 100%!important; table-layout:auto'>
                       <col width='15' />
                       <col width='90' />
                       <col width='25' />
                       <col width='55' />
                                   <col width='80' />
                       <col width='80' />
                       <col width='60' />
                       <col width='60' />
                       <col width='80' />
                                   <col width='130' />
                                 <thead>
                     <tr>
                    <td style='vertical-align: middle'>
                        №
                    </td>
                    <td style='vertical-align: middle'>
                        Наименование
                    </td>
                    <td style='vertical-align: middle'>
                        Тип
                    </td>
                    <td style='vertical-align: middle'>
                        Резидент
                    </td>
                                        <td style='vertical-align: middle'>
                        ИНН
                    </td>
                    <td style='vertical-align: middle'>
                            БИН
                    </td>
                    <td style='vertical-align: middle'>
                        Дата гос. регистрации
                    </td>
                    <td style='vertical-align: middle'>
                        Дата снятия с учёта
                    </td>
                    <td style='vertical-align: middle'>
                        Причина снятия с учёта
                    </td>
                                        <td style='vertical-align: middle'>
                        Дополнительные сведения
                    </td>
                      </tr>
                    </thead>
                    <tbody>
                      <tr>
                    <td class="complKnowlege" style="vertical-align:middle;">
                        1
                    </td>
                    <td class="complKnowlege" style="vertical-align:middle;">
                        ШЕВЕЛЕВА ОКСАНА ЮРЬЕВНА
                    </td>
                    <td style="vertical-align:middle;">
                        ФЛ
                    </td>
                    <td style="vertical-align:middle;">
                        Да
                    </td>
                    <td style="vertical-align:middle;">
                        600412066086
                    </td>
                    <td style="vertical-align:middle;">
                        771125400672
                    </td>
                    <td style="vertical-align:middle;">
                        31.08.2000
                    </td>
                    <td style="vertical-align:middle;">
                                
                    </td>
                    <td class="complKnowlege" style="vertical-align:middle;">
                                
                    </td>
                    <td class="complKnowlege" style="vertical-align:middle;">
                                
                    </td>
                     </tr>
                        </tbody>
                      </table>
                       </div>
                         </div>
                     </body>
               </html>";
                //Нам позарез захотелось вытащить индивидуальные данные прекрасной дамы (тут она ОКСАНА ЮРЬЕВНА)
 
                //первое что приходит в голову есть элемент div с id = "someid", который включает все остальные
                //элементы 
                //И так поехали
 
                 doc = new HTMLDocument(); //создаем элемент doc на прямую к классу HTMLDocumentClass 
                                                        //нам доступ закрыт
                 doc2 = (IHTMLDocument2)doc; //Инициализируем интерфейс 2 го уровня  
                 doc2.write(html ); //передаем интерфейсу наш документ
 
                //Мы бы могли не трах..ься, а использовать сразу doc класс но тогда мы не выделим нужные нам объекты
                //Если не верите попробуйте сами выделить нужные вам объекты 
 
                IHTMLElement div = doc3.getElementById("someid"); //вычленяем наш элементик
                if (div != null)
                {
                     //если он не null
                     IHTMLElementCollection el = div.children; //в el передаем все дочерние элементы
                     foreach (IHTMLElement ff in el)
                     {
                            if (ff.className == "forms resultSearchTable") // тутачки выделяем класс элемента, 
                                                                                          //а именно наш 2 ой div элемент
                            {
                                   IHTMLElementCollection el2 = ff.all; //в el2 кладем все элементы div
                                   foreach (IHTMLElement ff2 in el2)
                                   {
                                          if (ff2 is mshtml.HTMLTable){ //проверяем если в этом элементе есть таблица
                                                                                  //хотя могли воспользоваться свойством className 
                                                                                  //но мы из принципа пройдем весь путь дальше
                                                IHTMLElementCollection el3 = ff2.all; //в el3 кладем все элементы уже нашей таблицы
                                                foreach (IHTMLElement ff3 in el3)
                                                {
                                                    if (ff3 is mshtml.HTMLTableSection) //если этот элемент одна из 
                                                                                                    //секций таблицы  <TBODY> или <THEAD>
                                                    {
                                                          //здесь бы мы могли вставить фильтр типа if (ff3.TagName == "TBODY") 
                                                          //но не будем этого делать  
                                                          
                                                          IHTMLElementCollection el4 = ff3.all; //выделяем все элементы таблички
                                                          foreach (IHTMLElement ff4 in el4)
                                                          {
                                                                if (ff4 is mshtml.HTMLTableRow) //проверяем, 
                                                                                                            //а выделенные элементы суть стоки? 
                                                                {
                                                                       IHTMLElementCollection el5 = ff4.all;
                                                                       foreach (IHTMLElement ff5 in el5)
                                                                       {
                                                                           s+ = ff5.innerText +"\t";
                                                                       }
                                                                 }
                                                            }
 
                                                     }
                                                 }
                                             }
                                         }
                                   }
                            }
                     
                 } 
                 else s = "Все плохо! Не нашли данный класс"
 
 
}
Надеюсь после представленного кода исчезнут вопросы на счет интерфейсов MSHTML
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2013, 12:56
Помогаю со студенческими работами здесь

Парсинг страницы с помощью HtmlAgilityPack
Имеется такая конструкция: &lt;div id=&quot;farm_town_20721&quot; class=&quot;tile farmtown_not_owned_on_same_island ft5&quot; style=&quot;left: 47290px; top:...

Парсинг элементв с помощью HtmlAgilityPack
Помогите найти ошибку в коде. Сайт взял произвольный. X path с заголовка H1 &lt;h1 class=&quot;mainhead&quot;&gt;Госдума приняла закон о...

Парсинг HTML с помощью регулярных выражений
имеем строку(вернее табличку): &lt;table class=&quot;mesview&quot; &gt;&lt;tr&gt;&lt;td&gt;Тип сообщения&lt;/td&gt;&lt;td&gt;О стоимости чистых...

Парсинг жанров музыки с помощью HtmlAgilityPack
Здравствуйте! Уважаемые пользователи CyberForum! Подскажите пожалуйста как правильно парсить? Есть сайт с выбором жанра музыки....

Парсинг с помощью HtmlAgilityPack. Как добиться вывода информации?
Доброго времени суток. Я использую библиотек HtmlAgilityPack. Произвожу парсинг www.banki.ru Мне необходимо получить информацию из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер