33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
1
.NET 4.x

Парсинг текста с сайта

05.01.2014, 21:30. Показов 13845. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Всех с праздниками!
Ребят, помогите разобраться с парсингом.
Суть вот в чем. Делаю запрос на сайт, получаю ответ и сохраняю его в TextBox.
Далее хотелось бы сперва спарсить что-то простое, к примеру информацию между тегами <title>.
Как это сделать?

Знаю, что многие сейчас налетят и скажут, мол пользуйся регулярками, поэтому сразу скажу, мне далеко еще до регулярок и я до них еще не дорос

И еще такой вопрос, правильно ли я делаю, что сохраняю результат в TextBox? Может, если сохранить во что-то другое, то работать будет легче?

Буду рад любым советам и примерам.
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2014, 21:30
Ответы с готовыми решениями:

Парсинг текста с сайта
Здравствуйте, подскажите пожалуйста как парсить текст с сайта на XAML. Мне с сайта просто слово...

Парсинг текста с сайта
Как получить текст на основе xNet c сайта между тегами. Без использования webBrowser1 Я читал...

Парсинг текста с запрещенного сайта через прокси
Здравствуйте, мне нужно спарсить текст с сайта на который зайти можно только через TOR browser или...

Парсинг русского текста с сайта. Неизвестные символы вместо кириллицы
С помощью WebRequest запрашиваю html код страницы, но вместо русских букв там крокозябры. Пробовал...

45
Заблокирован
05.01.2014, 21:49 3
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Imports System.Net
Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim WC As New WebClient 
        Dim HtmlText As String, Result As String
        HtmlText = WC.DownloadString(New Uri("http://site.ru")) 
        WC.Dispose()
        Result = Pars(HtmlText, ("<title>"), ("</title>")) 
        MsgBox(Result)
    End Sub
    Public Function Pars(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String) As String
        Dim iPos As Integer, iEnd As Integer
        Dim strResult As String
        iPos = strSource.IndexOf(strStart, 0)
        iEnd = strSource.IndexOf(strEnd, iPos + strStart.Length)
        If iPos <> -1 AndAlso iEnd <> -1 Then
            strResult = strSource.Substring(iPos + strStart.Length, iEnd - (iPos + strStart.Length))
        End If
        Return strResult
    End Function
1
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
05.01.2014, 21:51  [ТС] 4
Как я понял, для новичков самый лучший вариант пользоваться функцией:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Public Function Pars1(ByRef strSource As String, ByRef strStart As String, ByRef strEnd As String, Optional ByRef startPos As Integer = 0) As String
        Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length
        Dim strResult As String
        strResult = String.Empty
        iPos = strSource.IndexOf(strStart, startPos)
        iEnd = strSource.IndexOf(strEnd, iPos + lenStart)
        If iPos <> -1 AndAlso iEnd <> -1 Then
            strResult = strSource.Substring(iPos + lenStart, iEnd - (iPos + lenStart))
        End If
        Return strResult
    End Function
Кто-то может прокомментировать, как эта функция работает?
Можно конечно тупо перекопировать код, но хотелось бы именно понять каждую строку.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
05.01.2014, 21:54 5
Обычная функция поиска в строке определенного набора символов. Просматривается весть текст на предмет наличия двух строк, и если найдено-текст между ними возвращается.
1
Заблокирован
05.01.2014, 21:56 6
dimOk7, с виду ужасно не понятно с первого раза выглядит для новичка, а если разобрать все отдельно, то это как сказал insite2012 все очень просто.
1
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
05.01.2014, 21:57  [ТС] 7
Цитата Сообщение от insite2012 Посмотреть сообщение
Обычная функция поиска в строке определенного набора символов. Просматривается весть текст на предмет наличия двух строк, и если найдено-текст между ними возвращается.
Интуитивно я это понимаю, но хотелось бы понять, что именно делается в каждой строке кода.

P.S.
Ребят, если кто-то может это сделать, то закомментируйте пожалуйста код функции.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
05.01.2014, 22:01 8
Цитата Сообщение от dimOk7 Посмотреть сообщение
Ребят, если кто-то может это сделать, то закомментируйте пожалуйста код функции.
Это не сложно сделать, но толку будет с этого чуть менее чем никакого.

Не по теме:

Я уже не раз говорил и повторю - Мэтью Макдональд, "Рецепты программирования" - эта книга просто обязана быть у каждого, кто пишет на VB.NET. Есть ответы на большинство вопросов. Кстати, и именно такой (почти) пример там есть.:)

0
Заблокирован
05.01.2014, 22:01 9
Цитата Сообщение от dimOk7 Посмотреть сообщение
Ребят, если кто-то может это сделать, то закомментируйте пожалуйста код функции.
Ну так IntelliSense есть, кругом подсказки.
0
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
05.01.2014, 22:07  [ТС] 10
Парни, спасибо и на этом!
Пойду разбираться сам тогда Если уж будет что-то никак не понять, то спрошу у вас.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
05.01.2014, 22:08 11
Вот упрощенная функция, ищет количество совпадений. Думаю, с ней разберетесь, и ту поймете.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Module Module1
 
    Sub Main()
        Dim Text As String = "Маша ела кашу, ла ла ла"
        Console.WriteLine(CountMatches(Text, "ла"))
        Console.Read()
    End Sub
    'Функция поиска количества совпадений в строке определенной подстроки
    'один из недостатков-ошибка по количеству совпадений из-за извлечения подстрок из строки
    'для поиска совпадений целых слов не пригодна
    Private Function CountMatches(ByVal StringToSearch As String, ByVal SerchFor As String) As Integer
        Dim Position As Integer = 0
        Dim Matches As Integer = 0
        Do
            Position = StringToSearch.IndexOf(SerchFor, Position)
            If Position <> -1 Then
                Matches += 1
                Position += SerchFor.Length
            End If
        Loop Until Position = -1
        Return Matches
    End Function
End Module
1
Заблокирован
05.01.2014, 22:10 12
dimOk7, оке. еще есть фишка смотреть описание по функции/методу в справке MSDN.
0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
05.01.2014, 22:17 13
Везет VB-эшникам, так крепко отметили Новый год, что собрались парсить HTML через IndexOf и Substring.
По теме - HAP, SgmlReader
1
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
05.01.2014, 22:19  [ТС] 14
Цитата Сообщение от Release Посмотреть сообщение
dimOk7, оке. еще есть фишка смотреть описание по функции/методу в справке MSDN.
Я ею не умею пользоваться, справкой этой заморской. Вернее не понимаю большую часть текста, что там написано))) Поэтому, как-то не особо у меня MSDN прижился.
0
Заблокирован
05.01.2014, 22:30 15
Петррр, тему нужно внимательно читать. ТС начинающий, ему такие "прибомбасы" не потянуть.

Не по теме:

По себе людей не судят ;)

0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
05.01.2014, 22:34 16
Release, именно, друг мой, ТС начинающий программист, как вы метко заметили, и учить его парсить HTML через IndexOf/Substring - плохо. HTML-парсеры не пишутся в один присест. И лучше ему доказать, что нужно использовать готовый парсер, чем писать свой костыль, который придется переписывать, едва появится какая новая проблема.
1
Заблокирован
05.01.2014, 22:39 17
Петррр, соглашусь. этот костыль не гибок, но все же, для начала нужно образно видеть, как это реализовано, а потом переходить к готовым вариант парсинга (внутрь, которых не заглянешь и не посмотришь, как осуществляется сам процесс). Это мое ИМХО, по мне так я всегда начинал с самого простого, да и пока все сижу на этом костыле, так как с парсингом инфы я вообще не работаю, а за ссылки спасибо, пригодятся на будущие
0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
05.01.2014, 22:44 18
dimOk7, обычно парсеры предназначены для обработки большого количества информации, и делается это в многопоточном режиме. Сделайте обычное консольное приложение, GUI для таких целей не нужен (если вы конечно не для секретарш пишите программу).
1
33 / 3 / 0
Регистрация: 19.10.2013
Сообщений: 53
05.01.2014, 23:40  [ТС] 19
Цитата Сообщение от Петррр Посмотреть сообщение
dimOk7, обычно парсеры предназначены для обработки большого количества информации, и делается это в многопоточном режиме. Сделайте обычное консольное приложение, GUI для таких целей не нужен (если вы конечно не для секретарш пишите программу).
Петррр, Я хорошо представляю для чего нужны парсеры, т.к. у меня не один интернет магазин, который доводилось в свое время наполнять тысячами товаров, поэтому о парсерах знаю не по наслышке.
Пишу не для секретарш, а для себя, просто саморазвитие так сказать

Что касается IndexOf/Substring и HAP, я никуда не спешу и рассмотрю оба варианта.
В любом случае, всем спасибо помогли и дали пищу для ума.
0
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,329
Записей в блоге: 2
06.01.2014, 00:11 20
Вот, нашел в сети пример и dll-ку на шарпе. Переделал пример на VB.NET, dll-ку скомпилировал. Вроде работает, правда я с html не особо еще разбирался... Кто часто сталкивается, попробуйте. Вот мой тестовый текст и в архиве сама готовая dll.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
 Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
        Dim Client As New System.Net.WebClient
        Dim Str As String
        Str = Client.DownloadString(New Uri("http://www.yandex.ru"))
        Dim Reader = New SgmlReader
        Reader.InputStream = New System.IO.StringReader(Str)
        Dim Xmldocument = New Xml.XmlDocument(Reader.NameTable)
        Xmldocument.Load(Reader)
 
        Dim links As Xml.XmlNodeList = Xmldocument.GetElementsByTagName("a")
        TextBox1.AppendText("Найдено: " & links.Count.ToString)
    End Sub
Вложения
Тип файла: rar HtmlParser.rar (34.4 Кб, 99 просмотров)
1
06.01.2014, 00:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2014, 00:11
Помогаю со студенческими работами здесь

Парсинг данных с сайта или страницы сайта
Здравствуйте, добрые люди! Есть задача спарсить данные с страницы соц сети. Или просто со...

Парсинг сайта
Здравствуйте программисты :) Помогите пожалуйста с такой проблемкой: нужно вытащить IP адрес с...

Парсинг сайта
Добрый день! Не могли бы помочь сделать Парсинг с сайта...

Парсинг сайта
Здравствуйте уважаемые программисты, у меня задача распарсить сайт...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru