Програмное извлечения текста из Html страницы

  • Автор темы zazaza
  • Дата начала
Z

zazaza

Гость
#1
язык : Visual Basic . NET (Это чень важно потому что в google.com очень очень много вариантов нна языки : C++/ Delphi/ C# на VB.нет почти ничего нету а то что есть мне не походит)

____________

Объекты на форме:

Компонент : WEBBROWSER1
Кнопка : BUTTON1

Задача программы :

Зайти на сайт: http://rutube.ru/tracks/4189121.html?v=047...a9e9063619bb17d

Програмно извлечь код плеера:
Код:
<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/0478f5ae295301ef0a9e9063619bb17d"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/0478f5ae295301ef0a9e9063619bb17d" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></EMBED></OBJECT>
Исходный код страницы показывает следующий код:

Код:
<li>
<p>Код плеера</p>
<input class="address" tabindex="2" type="text" id="pcode" name="" value='<OBJECT width="470" height="353"><PARAM name="movie" value="http://video.rutube.ru/0478f5ae295301ef0a9e9063619bb17d"></PARAM><PARAM name="wmode" value="window"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/0478f5ae295301ef0a9e9063619bb17d" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" ></EMBED></OBJECT>' onclick='selectText(this)' readonly="1" />
<a href="java script:void(0)" onclick='textCopyIEiprEx(document.getElementById("pcode"),PCODE_COPIED_SUCCESS,PCODE_COPIED_ERROR)' title="Копировать"></a>
</li>
Пробовал програмно обращаться к атрибутам / id / value / tabindex но что то без результатно

Пробовал например такой вариант (не получилось):

Код:
dim codeee as string

Dim firstcode As HtmlElementCollection = WebBrowser1.Document.All

For Each webelementss As HtmlElement In firstcode 

If webelementss.GetAttribute("title") = "название видео" Then 

codeee = webelementss.GetAttribute("value").ToString()
debug.print (codeee)
End If

Next
 

LuMee

Well-Known Member
02.05.2006
477
0
#2
Если без заморочек, получается что-то наподобие:
Код:
Dim code As String = String.Empty;

Dim element As HtmlElement = browser.Document.GetElementById("TrP_2");
Dim ul As HtmlElement = element.GetElementsByTagName("ul").Item(0);

For Each li As HtmlElement In ul.Children
Dim children As HtmlElementCollection = li.GetElementsByTagName("p");
If children.Count > 0 And children.Item(0).InnerText = "Код плеера"
HtmlElementCollection inputs = li.GetElementsByTagName("input");
If (inputs.Count > 0)
code = inputs.Item(0).GetAttribute("value");			
End If
Exit For
End If
Next
В идеале надо бы побольше проверок всяких (на null и т.п.), чтобы совсем красиво было.
З.Ы. На VB я сам не пишу, код переводил с C# на глазок, так что не обессудь за ошибки :)
 
Z

zazaza

Гость
#3
Надо бы побольше проверок всяких (на null и т.п.), чтобы совсем красиво было.
З.Ы. На VB я сам не пишу, код переводил с C# на глазок, так что не обессудь за ошибки :)
Если бы я умел так же ловко как и ты переводить код с C# на Visual basic Net то проблем бы у меня небыло.

Не могу его под VB.НЕт перевести ругается:

я код не буду выделять в теги что бы было видно где ошибки ( может ты знаешь как поправить:
---------------------------------------------------------------------------------------
Dim code As String = String.Empty

Dim element As HtmlElement = browser.Document.GetElementById("TrP_2")
Dim ul As HtmlElement = element.GetElementsByTagName("ul").Item(0)

For Each li As HtmlElement In ul.Children
Dim children As HtmlElementCollection = li.GetElementsByTagName("p")
If children.Count > 0 And children.Item(0).InnerText = "Код плеера" Then
HtmlElementCollection(inputs = li.GetElementsByTagName("input"))
If (inputs.Count > 0) Then
code = inputs.Item(0).GetAttribute("value")
End If
Exit For
End If
Next
---------------------------------------------------------------------------------------

ОШИБКИ :


Ошибка 2 "HtmlElementCollection" является типом и не может использоваться как выражение. C:\Documents and Settings\User\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 12 17 WindowsApplication1

Ошибка 3 Имя "inputs" не объявлено. C:\Documents and Settings\User\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 12 39 WindowsApplication1

Ошибка 4 Имя "inputs" не объявлено. C:\Documents and Settings\User\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 13 21 WindowsApplication1

Ошибка 5 Имя "inputs" не объявлено. C:\Documents and Settings\User\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 14 28 WindowsApplication1
 

hosm

* so what *
18.05.2009
2 442
9
#4
просто попробуй попрааить так:
Dim inputs as HtmlElementCollection = li.GetElementsByTagName("input");
 
Z

zazaza

Гость
#6
Два вопроса есть

1- Как зацепиться за текст "Ролик не доступен для просмотра в вашей строане"

ошибка находится на этой странице: http://rutube.ru/tracks/2544286.html?v=461...8b30d4c6ad575cc

В первом варианте "Извлечения текста из HTML страницы худо бедно но для меня более менее был понятен" там ещё за "ID" зацепились

А тут за что хвататься тут одни CLASS стоят.
Код:
<div class="wcorn_t"><div class="wtl"></div><div class="wtr"></div></div>
<div class="wcont">
<div class="lCol">
<!-- h3 class="green">Ролик недоступен для просмотра в Вашей стране</h3 -->
<div class="error">
<span>Ролик недоступен для просмотра в Вашей стране</span>
</div

и другой вопрос:
Это уже по желанию если у вас настроение будет :)

У кажной задачи есть какие то определённые требования
например Если хочешь водить машину : Выучи правила Дорожного движеия.

А в этой теме что бы научиться цепляться к страница можете посоветовать что же мне нужно зубрить
PHP ? весь не осилю. может какието выборочные темы есть специально для этих целей? Как такие темы называются.

Заранее спасибо
 

hosm

* so what *
18.05.2009
2 442
9
#7
А в этой теме что бы научиться цепляться к страница можете посоветовать что же мне нужно зубрить
PHP ?
зубрить PHP не обязательно, но понимать хотя бы примерно с помощью гугля, что написано иногда может быть полезно. а вот HTML и работу с DOM понимать надо.
возможно, достаточно проверить наличие <div class="error">.
 
Z

zazaza

Гость
#8
зубрить PHP не обязательно, но понимать хотя бы примерно с помощью гугля, что написано иногда может быть полезно. а вот HTML и работу с DOM понимать надо.
возможно, достаточно проверить наличие <div class="error">.
Отлично, а можешь мне подкинуть материал по этой теме уже проверенный . На своё усмотрение(только не профессианальные учебники :) )