|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Траблы с парсингом
Добрый день, или утро, ну или что у вас сейчас))
Пытаюсь спарсить погоду с gismeteo md Получаю html, удаляю всё не нужное с начала и конца, оставив только то, что нужно парсить Парсю ) Код такой: Код:
var i : integer; s : string; begin For i := 0 to smemo1.Lines.Count - 1 do begin s := smemo1.Lines.Strings[i]; if pos('<td class="cltext">',s) <> 0 then begin s := copy(s,pos('<td class="cltext">',s)+19,length(s)); s := copy(s,0,pos('</td>',s)-1); smemo2.Lines.Add(s); end; end; end; в мемо 2, попадает сама погода, но только (ясно, облачно). Почему не вырезается: Малооблачно, небольшой дождь Малооблачно, дождь, гроза Вместо этих строк в мемо2 добавляется пустая строчка.. Код HTML:
В коде что-то не учел или что? Последний раз редактировалось Tech N9ne, 25.06.2018 в 05:20. |
#2
|
||||
|
||||
На в скидку - вы построчно ответ обрабатываете,а его надо как строчку единую парсить, в смысле smemo1.text, переводы строк парсингу плохо поддаются
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Tech N9ne (25.06.2018)
|
#3
|
|||
|
|||
Цитата:
Попробовал так Код:
smemo2.Lines.Text := sMemo2.Lines.Text +' '+ s; Получаю тоже самое.. Такое ощущение, как будто из-за запятых или пробелов не вырезает. Так выглядит отрывок HTML . Код HTML:
Последний раз редактировалось Tech N9ne, 25.06.2018 в 16:43. |
#4
|
||||
|
||||
У вас четкие теги в ответе, можно парсингом их раскрыть, можно стандартными методами (json), если это не подходит, покажите пжлст, что приходит (без чистки) и что должно отобразиться (что оставить), мож обычным поиском в тексте можно обойтись
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Tech N9ne (25.06.2018)
|
#5
|
|||
|
|||
Цитата:
После долгих мучений с гуглом, нашёл процедурку) Код:
uses StrUtils; //Поиск подстрок, расположенных между шаблонами aSub1 и aSub2. //Найденные подстроки добавляются в список aSl. procedure ParseStr(const aStr, aSub1, aSub2 : string; aSl : TStrings); const SelfName = 'ParseStr()'; var L1, L2, P1, P2 : Integer; begin if aSl = nil then raise Exception.Create(SelfName + '. ГЋГёГЁГЎГЄГ*! Ñïèñîê Г*ГҐ ñîçäГ*Г*.'); L1 := Length(aSub1); L2 := Length(aSub2); P1 := 1; P2 := 0; repeat //Ищем первый тег, начиная с позиции P1. P1 := PosEx(aSub1, aStr, P1); //Если нашли первый тег. if P1 > 0 then begin //Справа от первого тега ищем второй тег. P2 := PosEx(aSub2, aStr, P1 + L1); //Если нашли второй тег. if P2 > 0 then begin //Подстроку, которая расположена между тегами, добавляем в aSl. aSl.Add( Copy(aStr, P1 + L1, P2 - P1 - L1) ); //Начальную позицию поиска располагаем справа от второго тега. P1 := P2 + L2; end; end; //Если первый или второй тег оказался не найденным, то выходим из цикла. until (P1 = 0) or (P2 = 0); end; //Пример использования. //В Memo1 - исходный текст, в Memo2 выводятся результаты поиска. procedure TForm1.Button1Click(Sender: TObject); begin Memo2.Clear; ParseStr(Memo1.Text, '<artist>', '</artist>', Memo2.Lines); end; |