2015-02-25 3 views
-1

Я пытаюсь понять, как анализировать ранжирование, название и URL-адрес результатов поиска Google с помощью Delphi.Анализ результатов Google с помощью Delphi

Главным образом мне нужно получить все ссылки A и TEXT с тега H3 с определенным именем класса «r».

Вот функция, чтобы получить раздел результатов в HTML Google:

function TForm1.ExtractContainer: TStringList; 
var 
    Doc : IHTMLDocument3; 
    i: Integer; 
    Download: IHTMLElement; 
    Coll: IHTMLElementCollection; 
    Anchor: IHTMLAnchorElement; 
    tmp : String; 

begin 
    Result := TStringList.Create; 
    Doc := EmbeddedWB1.Document as IHTMLDocument3; 
    Download := Doc.getElementById('center_col') as IHTMLElement; 
    tmp := Download.innerHTML; 
    result.Text := AnsiReplaceStr(tmp, '<h3 class="r">', '<h3 class="r">'#13#10); 

for i := 1 to result.Count -1 do 
begin 
    tmp := ExtractTextBetween (result[i], 'href="','">'); 
    memo1.Lines.Add(tmp); 
end; 

Как вы можете видеть в сНу идентификатор center_col являются все результаты Google. Теперь мне нужно сделать какой-то вид, чтобы получить все ссылки A и TEXT из тега H3 с определенным именем класса «r».

Надеюсь, что кто-то может мне помочь!

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 ** пробовали ли вы используя XML-парсер? ** –

+0

@DavidHeffernan Основная проблема заключается в том, что can not получить ответ Google в формате XML. Вы предлагаете конвертировать из html в XML? –

+0

В этом случае у вас есть html, поэтому вам нужен синтаксический анализатор html. Принцип не изменился. –

ответ

2

В соответствии с рекомендациями ниже, я изменил мой ответ:

Для разбора HTML наиболее эффективным способом является использование DOM на основе HTML-парсер. Делая быстрый поиск подъехала: http://www.yunqa.de/delphi/doku.php/products/htmlparser/index

На главной странице: «HTML-теги: HTML-теги легко разбирается на имя, атрибуты и значения DIHtmlParser распознает Start теги, закрывающие теги и пустой элемент Теги Пример:.:. «.

Этот продукт является не единственным, но я видел, как он упоминается на нескольких других сообщениях SO.

Надеется, что это помогает

+1

Ugh! Анализ HTML или XML с регулярным выражением - это глупое дело, когда парсер, основанный на DOM, делает его намного проще, быстрее и менее подвержен ошибкам. (Я не занимаюсь ничем, потому что вы прикладываете очевидные усилия для написания ответа, и он может действительно работать, но я не могу его выдвинуть, потому что я думаю, что это технически ужасное решение заданного вопроса.) –

+3

@Sme Вам просто нужно прочитайте ответ bobince, который я связал выше. –

+0

@DavidHeffernan Я получил удар из этого сообщения. Также я никогда не использовал парсер, основанный на DOM (я очень редко разбираю HTML в своей работе). Я исхожу из фона Perl, поэтому я склоняюсь к шаблонам, когда вижу такую ​​проблему. Мне обязательно нужно будет изучить другие доступные инструменты. – SmeTheWiz

Смежные вопросы