Какое регулярное выражение я могу использовать для извлечения URL из поиска Google? - PullRequest
0 голосов
/ 23 января 2010

Я использую Delphi с JCLRegEx и хочу получить все URL-адреса результатов из поиска Google. Я посмотрел на HackingSearch.com, и у них есть пример RegEx, который выглядит правильно, но я не могу получить никаких результатов, когда я пытаюсь это сделать.

Я использую это похоже на:

Var re:JVCLRegEx;
    I:Integer; 
Begin
  re := TJclRegEx.Create;

  With re do try
    Compile('class="?r"?>.+?href="(.+?)".*?>(.+?)<\/a>.+?class="?s"?>(.+?)<cite>.+?class="?gl"?><a href="(.+?)"><\/div><[li|\/ol]',false,false);  
    If match(memo1.lines.text) then begin
      For I := 0 to captureCount -1 do
        memo2.lines.add(captures[1]);
    end;
  finally free;
  end;
  freeandnil(re);
end;

Regex доступно на hackingsearch.com

Я использую версию Delphi Jedi, так как каждый раз, когда я устанавливаю TPerlRegEx, я получаю конфликт с двумя ...

Ответы [ 4 ]

1 голос
/ 25 января 2010

Ниже приведен соответствующий раздел из результатов поиска Google для термина python tuple. (Я изменил его, чтобы он соответствовал экрану здесь, добавляя новые строки здесь и там, но я проверил ваше регулярное выражение на необработанной строке, полученной из источника Google, как показано Firebug). Ваше регулярное выражение не дало совпадений для этой строки.

<li class="g w0">
  <h3 class="r">
    <a onmousedown="return rwt(this,'','','res','2','AFQjCNG5WXSP8xy6BkJFyA2Emg8JrFW2_g','&amp;sig2=4MpG_Ib3MrwYmIG6DbZjSg','0CBUQFjAB')" 
      class="l" href="http://www.korokithakis.net/tutorials/python">Learn <em>Python</em> in 10 minutes | Stavros's Stuff</a>
  </h3>
  <span style="display: inline-block;">
    <button class="w10">
    </button>
    <button class="w20">
    </button>
  </span>
  <span class="m">&nbsp;<span dir="ltr">- 2 visits</span>&nbsp;<span dir="ltr">- Jan 21</span></span>
  <div class="s">
  The data structures available in <em>python</em> are lists, <em>tuples</em>
   and dictionaries. Sets are available in the sets library (but are built-in in <em>
  Python</em> 2.5 and <b>...</b><br>
  <cite>
    www.korokithakis.net/tutorials/<b>
    python</b>
     - 
  </cite>
  <span class="gl">
    <a onmousedown="return rwt(this,'','','clnk','2','AFQjCNFVaSJCprC5enuMZ9Nt7OZ8VzDkMg','&amp;sig2=4qxw5AldSTW70S01iulYeA')" 
      href="http://74.125.153.132/search?q=cache:oeYpHokMeBAJ:www.korokithakis.net/tutorials/python+python+tuple&amp;cd=2&amp;hl=en&amp;ct=clnk&amp;client=firefox-a">
      Cached
    </a>
     - <button title="Comment" class="wci">
    </button>
    <button class="w4" title="Promote">
    </button>
    <button class="w5" title="Remove">
    </button>
  </span>
  </div>
  <div class="wce">
  </div>
  <!--n-->
  <!--m-->
</li>

FWIW, я думаю, одна из многих причин заключается в том, что <Va> в этом результате вообще нет. Я скопировал полный исходный код html из Firebug и попытался сопоставить его с вашим регулярным выражением - не получил никакого соответствия вообще.

Google может время от времени менять способ отображения результатов - в определенный момент времени он может варьироваться в зависимости от таких факторов, как ваш статус входа, история веб-поиска и т. Д. Для вас может подойти конкретное регулярное выражение на данный момент, но в долгосрочной перспективе его будет сложно поддерживать. Люди предлагают использовать html-анализатор вместо регулярных выражений, потому что они знают, что решение не будет стабильным.

1 голос
/ 23 января 2010

Оффтоп: вы можете попробовать Google AJAX Search API: http://code.google.com/apis/ajaxsearch/documentation/

0 голосов
/ 24 января 2010
class=r?>.+?href="(.+?)".*?>(.+?)<\/a>.+?class="?s"?>(.+?)<cite>.+?class="?gl"?>

сейчас работает.

0 голосов
/ 23 января 2010

Если вам нужно отладить регулярные выражения на любом языке, вам нужно взглянуть на RegExBuddy , это не бесплатно, но оно окупится за день.

...