Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Спарсить строки таблицы. / 8 сообщений из 8, страница 1 из 1
13.03.2015, 04:59
    #38903266
black_height
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
Доброго времени суток.
Есть код:
Код: 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
13.03.2015, 06:13
    #38903269
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
black_heightЕсть код
Плохая идея
black_heightНаправьте в нужное русло.
Html Agility Pack
...
Рейтинг: 0 / 0
13.03.2015, 08:18
    #38903300
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
black_height,

регулярные выражение придумали, не для парсинга HTML. При определенном уровне мастерства, сделать это реально, но задача не стоит свеч и работать будет 1 фиг криво.
...
Рейтинг: 0 / 0
14.03.2015, 16:06
    #38904897
black_height
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
Спасибо, переписал код, использую 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
15.03.2015, 12:22
    #38905150
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
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
15.03.2015, 12:30
    #38905159
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
VSVLAD,

точнее
Код: vbnet
1.
For Each link As HtmlNode In If(doc.DocumentNode.SelectNodes("//tr[@class='head']"), new HtmlNode() {})
...
Рейтинг: 0 / 0
15.03.2015, 21:45
    #38905385
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
А возвращается 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
17.03.2015, 14:09
    #38907107
black_height
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Regex. Спарсить строки таблицы.
Спасибо, уже сделал через 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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Regex. Спарсить строки таблицы. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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