Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/28: Рейтинг темы: голосов - 28, средняя оценка - 4.79
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
1
.NET 4.x

Парсер данных с сайта и запись в XML

27.07.2011, 03:44. Просмотров 5361. Ответов 41
Метки нет (Все метки)

Как создать парсер для сайта который копирует нужный мне кусок кода с нужных мне стр. и записывает их в xml файл... Например с этой стр http://ru.aiondatabase.com/npc/213270/ мне нужно записать кусок кода


mapwidth, mapheight, false, '/img/aion/mapicons/maploc1.png', null);
var mapData = [{"title":"\u0411\u0435\u043b\u0443\u0441\u043b\u0430\u043d", "types":[{"id":1,"name":"\u0411\u0435\u043b\u0443\u0441\u043b\u0430\u 043d"}],"data":[{"x":56.1879487179,"y":45.6700321543,"type":1,"content":"\u0 41b\u043e\u043a\u0430\u0446\u0438\u044f: 1399.338 \/ 1406.33 \/ 295"},{"x":54.3234102564,"y":46.6972025723,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1431.283 \/ 1333.613 \/ 265"},{"x":55.359,"y":45.7150482315,"type":1,"content":"\u04 1b\u043e\u043a\u0430\u0446\u0438\u044f: 1400.738 \/ 1374.001 \/ 285"},{"x":52.6724102564,"y":45.457170418,"type":1,"content" :"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1392.718 \/ 1269.224 \/ 240.0004"},{"x":48.6137948718,"y":58.7960450161,"type":1,"co ntent":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1807.557 \/ 1110.938 \/ 313"},{"x":54.8303076923,"y":47.2138585209,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1447.351 \/ 1353.382 \/ 275"},{"x":54.5118205128,"y":47.8622829582,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1467.517 \/ 1340.961 \/ 274"},{"x":52.0524102564,"y":56.4984565916,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1736.102 \/ 1245.044 \/ 335"},{"x":55.8982564103,"y":48.4296784566,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1485.163 \/ 1395.032 \/ 300"},{"x":50.8781794872,"y":56.5975241158,"type":1,"content ":"\u041b\u043e\u043a\u0430\u0446\u0438\u044f: 1739.183 \/ 1199.249 \/ 335"}],"imageFile":"\/img\/aion\/zonemaps\/ru_ru\/600\/df3_map.jpg"}];

Добавлено через 2 минуты
Принцеп работы парсера мне особо не важен... Главное что бы он подрубался к сайту и копировал нужную мне информацию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2011, 03:44
Ответы с готовыми решениями:

Запись XML-дерева сразу в xml-файл (парсер JAXP)
Народ!Программеры!Помогите человеку,плиз! Парсерю я xml-файл,через DOM-модель,использую JAXP.После...

Парсер данных из txt или xml формата
Здравствуйте, выполняю одно студенческое задание и немного стопорнулся в этом вопросе. Все не так...

Парсер данных с сайта
require 'nokogiri' require 'open-uri' url =...

Парсер данных с сайта
шалом, помогите написать простой парсер данных с сайта oddsportal.com мне надо собрать базу...

41
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 06:50 2
Попробуй балалайку:
vb.net
1
2
3
4
5
6
7
8
9
        Dim R() As String = {"mapwidth, mapheight"}
        Dim L() As String = {"}];"}
        Dim myHttpWebRequest As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://ru.aiondatabase.com/npc/213270/")
        Dim myHttpWebResponse As Net.HttpWebResponse = myHttpWebRequest.GetResponse()
        Dim myStreamReader As New IO.StreamReader(myHttpWebResponse.GetResponseStream, System.Text.Encoding.GetEncoding(1251))
        Dim Str As String = myStreamReader.ReadToEnd()
        Dim Tmp As String = Str.Split(R, StringSplitOptions.None)(1)
        Dim Res As String = R(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
        TextBox1.Text = Res
1
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 07:03  [ТС] 3
Почти то что нужно... А где указывается какой кусок парсить? И как из текстбокса записать всю информацию в .xml?
Пробовал так
vb.net
1
My.Computer.FileSystem.WriteAllText("Парсер.xml", TextBox1.Text, False, System.Text.Encoding.GetEncoding(1251))
Но это не то что нужно
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 07:14 4
Treals, R() - левая граница
L() - Правая.
Хм, как-то странно, перепутал буквы...
1
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 07:22  [ТС] 5
Благодарю ... А диапазон страниц как указать? Допустим мне надо с http://ru.aiondatabase.com/npc/213270/ по http://ru.aiondatabase.com/npc/213288/?
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 07:28 6
Treals, тогда так:
vb.net
1
2
3
4
5
6
7
8
9
10
11
        For I As Integer = 213270 To 213288
            Dim R() As String = {"mapwidth, mapheight"}
            Dim L() As String = {"}];"}
            Dim myHttpWebRequest As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://ru.aiondatabase.com/npc/" & I & "/")
            Dim myHttpWebResponse As Net.HttpWebResponse = myHttpWebRequest.GetResponse()
            Dim myStreamReader As New IO.StreamReader(myHttpWebResponse.GetResponseStream, System.Text.Encoding.GetEncoding(1251))
            Dim Str As String = myStreamReader.ReadToEnd()
            Dim Tmp As String = Str.Split(R, StringSplitOptions.None)(1)
            Dim Res As String = R(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
            TextBox1.Text &= "Якобы распарсено со страницы " & I & vbCrLf & Res & vbCrLf & "===============================================" & vbCrLf
        Next
Про XML не подскажу, я не знаю, где эта запчасть в компьютере.
1
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 07:54  [ТС] 7
))) вот и первая ошибка "Индекс находился вне границ массива." ... Это что значит?
Указывает на этот код
vb.net
1
Dim Tmp As String = Str.Split(R, StringSplitOptions.None)(1)
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 08:07 8
Treals, сложно сказать, почему это возникло, у меня этот код сработал.
Добавлю, что этот код применим только для этого сайта, и если на какой-то странице будет отсутствовать кусок текста
mapwidth, mapheight
или
}];
то вот такая ошибка имеет право быть.
Посмотри еще на какой именно странице это вылетело (по переменной I), просмотри исходный код страницы, и убедись, что наши искомые блоки там присутствуют.
0
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 08:21  [ТС] 9
Я уже разобрался... Как ты выше уже сказал отсутствие куска кода на стр.

Добавлено через 10 минут
А как задать исключение при котором если на этой стр. нету искомого кода то переходить к другой стр? И сделать допустим два искомых значения в коде стр.
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 08:54 10
Treals, вот код, который я не пробовал, он пытается распарсить по трем параметрам и по идее должен при 3 неудачных попытках перейти на следующую страницу.
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
24
25
26
27
28
29
30
31
        For I As Integer = 213270 To 213288
            Dim R1() As String = {"mapwidth5, mapheight"}
            Dim R2() As String = {"Вторая строка"}
            Dim R3() As String = {"Третья"}
            Dim L() As String = {"}];"}
            Dim myHttpWebRequest As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://ru.aiondatabase.com/npc/" & I & "/")
            Dim myHttpWebResponse As Net.HttpWebResponse = myHttpWebRequest.GetResponse()
            Dim myStreamReader As New IO.StreamReader(myHttpWebResponse.GetResponseStream, System.Text.Encoding.GetEncoding(1251))
            Dim Str As String = myStreamReader.ReadToEnd()
            If InStr(Str, R1(0)) <> 0 Then
                Dim Tmp As String = Str.Split(R1, StringSplitOptions.None)(1)
                Dim Res As String = R1(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
                TextBox1.Text &= "Якобы распарсено со страницы " & I & vbCrLf & Res & vbCrLf & "===============================================" & vbCrLf
            Else
                TextBox1.Text &= "На странице " & I & " не найдено искомое вхождение. Ща попробуем с другим..." & vbCrLf
                If InStr(Str, R2(0)) <> 0 Then
                    Dim Tmp As String = Str.Split(R2, StringSplitOptions.None)(1)
                    Dim Res As String = R2(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
                    TextBox1.Text &= "Якобы распарсено со страницы " & I & vbCrLf & Res & vbCrLf & "===============================================" & vbCrLf
                Else
                    TextBox1.Text &= "На странице " & I & " не найдено и второе искомое вхождение. Ща попробуем третье..." & vbCrLf
                    If InStr(Str, R3(0)) <> 0 Then
                        Dim Tmp As String = Str.Split(R3, StringSplitOptions.None)(1)
                        Dim Res As String = R3(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
                        TextBox1.Text &= "Якобы распарсено со страницы " & I & vbCrLf & Res & vbCrLf & "===============================================" & vbCrLf
                    Else
                        TextBox1.Text &= "На странице " & I & " не найдено даже третье вхождение..." & vbCrLf
                    End If
                End If
            End If
        Next
Что касается
vb.net
1
Dim L() As String = {"}];"}
Если тут нужны варианты - додумывай сам, по аналогии
2
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 10:30  [ТС] 11
Все работает как швейцарские часы ))... Идет проверка по трем параметрам... Если значение не найденно то переходит к другой стр... Спасибо что помог... Только меня интерисует еще один момент... Как мне программно изменить в текстбуксе (или же в .txt файле) нужные мне символы, а не нужные удалить?
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 11:14 12
Попробуй так:
vb.net
1
2
3
4
5
6
        TextBox1.Text = "Какое бы слово удалить"
        MsgBox("Записали строку")
        TextBox1.Text = TextBox1.Text.Replace(" бы", "")
        MsgBox("Удалили слово БЫ")
        TextBox1.Text = TextBox1.Text.Replace("слово", "словечко")
        MsgBox("Заменили СЛОВО на СЛОВЕЧКО")
0
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
27.07.2011, 11:47  [ТС] 13
Способ устраивает... Но тут у меня проблема возникла... Что если у меня текст допустим

"Какое""бы слово удал"ить""

Вариант такой
vb.net
1
TextBox1.Text = TextBox1.Text.Replace(""Какое""бы слово удал"ить""", "")
код ошибку выдает... Пробовал и несколько ковычек ставить не помогает... А в спарсеном коде таких ковычек может быть и пять и десять... Так как быть?
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 11:54 14
vb.net
1
        MsgBox("Hello, "" WORLD """"", MsgBoxStyle.Information)
2
192 / 185 / 14
Регистрация: 09.02.2011
Сообщений: 458
27.07.2011, 16:59 15
Кстати там не XML а JSON готовые парсеры есть в сети, google в помощь...
Советую в StreamReader кодировку брать из Response
vb.net
1
System.Text.Encoding.GetEncoding(myHttpWebResponse.CharacterSet)
код будет универсальнее

 Комментарий модератора 
п. 4.2 Правил:
"Не отсылайте других пользователей в поиск и избегайте ссылок на поисковые системы (Google, Yandex и др.). Самостоятельно найдите ответ на вопрос и разместите его на форуме."


Добавлено через 51 минуту
Раскаиваюсь )) http://json.codeplex.com/
0
168 / 148 / 14
Регистрация: 13.07.2011
Сообщений: 477
27.07.2011, 18:23 16
почему не кто так не юзает?
vb.net
1
2
3
4
5
6
7
8
9
   Dim R() As String = {"mapwidth, mapheight"}
        Dim L() As String = {"}];"}
 
        Dim cl As New Net.WebClient
        Dim Str As String = cl.DownloadString("http://ru.aiondatabase.com/npc/213270/")
 
        Dim Tmp As String = Str.Split(R, StringSplitOptions.None)(1)
        Dim Res As String = R(0) & Tmp.Split(L, StringSplitOptions.None)(0) & L(0)
        TextBox1.Text = Res
2
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
27.07.2011, 20:09 17
eJ_Studio, действительно...
0
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
28.07.2011, 11:01  [ТС] 18
У меня вопрос... Что если в тексте одинаковые символы... Но мне надо по разному их изменить... Допустим если "аабб" мне надо первую "а" поменять на "ю" вторую "а" оставить без изменения и вторую "б" поменять на "т" допустим... То есть конечный вид должен быть такой "юабт"... Как это реализовать?

Добавлено через 1 минуту
вариант типа
vb.net
1
2
 TextBox1.Text = TextBox1.Text.Replace("аа", "юа ")
 TextBox1.Text = TextBox1.Text.Replace("бб", "бт")
и т.п не подходят
0
Почетный модератор
21203 / 8938 / 1080
Регистрация: 11.04.2010
Сообщений: 11,014
28.07.2011, 11:48 19
Цитата Сообщение от Treals Посмотреть сообщение
и т.п не подходят
Че это вдруг не подходят?
Все работает отлично
0
30 / 30 / 3
Регистрация: 25.05.2011
Сообщений: 308
28.07.2011, 11:59  [ТС] 20
как в таком виде

<spawn npcid= 203558>
X= 1674.391 Y= 1900.035 Y= 258
</spawn>

поменять второй Y на Z... Тот вариант который ты предлогал в таком случае не подходит... Или мб я что то не так делаю...

Добавлено через 2 минуты
И цифры должны быть в ковычках... Изначальное число не известно т.е вид должен быть такой

<spawn npcid= 203558>
X= "не известное число" Y= "не известное число" Z= "не известное число"
</spawn>

где "не известное число" определяется в спарсеном коде

Добавлено через 50 секунд
Хотя ковычки не так важны... Главное Y поменять на Z
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2011, 11:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Парсер данных сайта
Привет всем!!! Нужно написать парсер работоспособности Способов вывода из сайта платежей....

Парсер данных с сайта
Добрый день. Ищу так сказать идеи. Хочу написать программу, которая бы доставал с сайта данные,...

Парсер данных с сайта
Нужна помощь в реализации задачи. Задача такая: Есть сайт, назовем его: site.com 1. Методом...

Парсер ajax данных с сайта
Народ помогите пишу парсер некоторых данных с сайта, использую curl и фрэймворк simple dom php....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.