powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Спарсить строки таблицы.
8 сообщений из 8, страница 1 из 1
Regex. Спарсить строки таблицы.
    #38903266
black_height
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Есть код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  
        Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://tender.interpipe.biz")
        Dim response As System.Net.HttpWebResponse = request.GetResponse
        Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
        Dim rssourcecode As String = sr.ReadToEnd
        Dim r As New System.Text.RegularExpressions.Regex("\<td.*?\>.*?\<\/td\>")
        Dim matches As MatchCollection = r.Matches(rssourcecode)
        Dim i As Integer = 1
        For Each itemcode As Match In matches
            TextBox1.AppendText(i & ". " & itemcode.Value & vbCrLf)
            i += 1
        Next
        


Все работает. Вот только появилась необходимость спарсить полностью строку, т.е. теги tr и все между ними. Никак не могу переписать выражение. Помогите пожалуйста.
И еще, подскажите быть может имеет смысл сделать вообще без регулярных выражений? Направьте в нужное русло.
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38903269
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_heightЕсть код
Плохая идея
black_heightНаправьте в нужное русло.
Html Agility Pack
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38903300
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_height,

регулярные выражение придумали, не для парсинга HTML. При определенном уровне мастерства, сделать это реально, но задача не стоит свеч и работать будет 1 фиг криво.
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38904897
black_height
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, переписал код, использую Html Agility Pack.
Смысл программы: из базы выдергиваются сайты с параметрами, которые необходимо спарсить.
написал след. код:
Код: vbnet
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.
Module Module1

    Sub Main(ByVal ID As Integer, ByVal NAME As String, ByVal URL As String, ByVal TAGS As String, ByVal CHARSET As String)

        Dim web As New HtmlWeb
        Dim CodeHTML As String
        If (CHARSET = 0) Then
            web.OverrideEncoding = Encoding.UTF8
        ElseIf (CHARSET = 1) Then
            web.OverrideEncoding = Encoding.GetEncoding("windows-1251")
        End If
        Dim doc As New HtmlDocument
        doc = web.Load(URL)
        For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//tr")
            CodeHTML = link.OuterHtml
            addCode(ID, CodeHTML)
        Next

    End Sub

    Sub addCode(ByVal id As Integer, ByVal code As String)
  
        'Добавление данных в  базу
  
    End Sub
End Module



При работе модуля все данные в базу заносятся нормально. Если строку изменить на:
Код: vbnet
1.
For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//tr[@class='head']")


То вылетает в этой строке ошибка: Необработанное исключение типа "System.NullReferenceException" в parser from main.exe
Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.

Подозреваю это происходит в том случае, если не найдены элементы на сайте. Как решить проблему?
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38905150
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_height,

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

Код: c#
1.
For Each link As HtmlNode In If(doc.DocumentNode.SelectNodes("//tr[@class='head']"), new HtmlNode())


или так
Код: c#
1.
2.
3.
Dim colNodes() As HtmlNode = doc.DocumentNode.SelectNodes("//tr[@class='head']")
If colNodes IsNot Nothing Then
   ...



Но вообще не должно быть такого, хотя не проверял
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38905159
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,

точнее
Код: vbnet
1.
For Each link As HtmlNode In If(doc.DocumentNode.SelectNodes("//tr[@class='head']"), new HtmlNode() {})
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38905385
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А возвращается Nothing, всё потому... что если нет ни одного элемента, разработчики решили возвращать Nothing/null

Можно возвращать тогда пустую коллекцию: New HtmlNodeCollection(Nothing)

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function SelectNodes(xpath As String) As HtmlNodeCollection
	Dim list As HtmlNodeCollection = New HtmlNodeCollection(Nothing)
	Dim nav As HtmlNodeNavigator = Me.OwnerDocument
	Dim it As XPathNodeIterator = nav.[Select](xpath)
	While it.MoveNext()
		Dim i As HtmlNodeNavigator = CType(it.Current, HtmlNodeNavigator)
		list.Add(i.CurrentNode)
	End While
	If list.Count = 0 Then
		Return Nothing
	End If
	Return list
End Function
...
Рейтинг: 0 / 0
Regex. Спарсить строки таблицы.
    #38907107
black_height
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, уже сделал через Try Catch.

Возник еще один вопрос: Есть переменная с адресом: http://www.site.com/textpars.php. В парсеном с этой страницы тексте расположены ссылки в виде
Код: html
1.
<a href="/textpart2.php">Вторая страница</a>


Каким образом можно проверить ссылки, и если они начинаются с
Код: html
1.
<a href="/

, а не
Код: html
1.
<a href="http:

вставлять
Код: html
1.
http://www.site.com

? Надеюсь понятно изъяснил. :)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Спарсить строки таблицы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]