Preg_match (_all) не может собрать некоторые данные из Google - PullRequest
0 голосов
/ 12 апреля 2011

Я создаю инструмент для своих веб-сайтов, чтобы увидеть, какую позицию они занимают в Google по разным ключевым словам.

Теперь я хочу собрать эту часть их исходного кода:

<a href="http://www.test.com/" class=l onmousedown="return clk(this.href,'','','','1','','0CBoQFjAA')">Linktitle in Google!</a>

Проблема в том, что функция preg_match ИЛИ preg_match_all не соответствует «onmousedown», «this.href» или части ссылки «1».И это именно та часть, в которой я нуждаюсь ...

У кого-нибудь есть идеи, почему это так важно? Как это решить ???

Код, который я использую, очевиден.. я даже пытался использовать "/ onmousedown /" или "/ \ '1 \' /", но это не помогло.

Большое спасибо !!!!

Ответы [ 4 ]

2 голосов
/ 12 апреля 2011

Помимо этических и возможных юридических последствий использования Google, вы не должны использовать регулярные выражения для извлечения фрагментов HTML. Регулярные выражения не предназначены для анализа HTML и не предназначены для конкретной грамматики.

Попробуйте использовать анализатор HTML, например DOMDocument . Он был разработан для анализа HTML / XML.

0 голосов
/ 17 августа 2011

Используйте PHP класс: позиция ключевого слова Google для этого

http://www.phpclasses.org/package/5554-PHP-Determine-the-position-of-a-keyword-in-Google.html

EX:

Файл: google_position.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <title>Google Keyword Position</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body >
  <form name="url_kw" action="search.php" method="get">
      <label for="url">URL:</label>
      <input type="text" name="url" id="url" size="55" value="<?= isset($_GET['url']) ? $_GET['url'] : 'http://' ?>" />
      <br />
      <label for="keyword">Keyword:</label>
      <input type="text" name="keyword" id="keyword" size="35" value="<?= isset($_GET['keyword']) ? $_GET['keyword'] : null ?>" />
      <br />
      <input type="submit" name="submit_button" value="SEARCH" onclick="this.value='Searching...';" />
      <input type="button" value="CANCEL" onclick="javascript: window.location='<?= $_SERVER['HTTP_REFERER'] ?>';" />
      <br />
  </form>
</body>

file search.php

<?
include('KeywordPosition.php');
$position=new KeywordPosition($_GET['url'],$_GET['keyword'],10); // you can change the 10 to 100 to get more results :)
$index=$position->GetPosition();
if($index==-1)
echo 'Not in search results';
else
echo 'You are at '.$index;
?> 

Живой пример @ http://x.co/Z493

0 голосов
/ 12 апреля 2011

Используйте этот код для анализа тега привязки результатов поиска Google

function parseAnchor($strAnchor)
{
//$strAnchor = "<a onmousedown=\"return clk(this.href,'','','','2','','0CBwQFjAB')\" class=\"l\" href=\"http://php.net/manual/en/function.strpos.php\"><em>PHP</em>: strpos - Manual</a>";

$str_parts = explode(" ",$strAnchor);
$start_index = stripos($str_parts[4],"\"");
$length = strrpos($str_parts[4],"\"") - $start_index;
$link = substr($str_parts[4],$start_index+1,$length-1); //will print the link
print $link;

//Now get postion
$onmousedown_parts = explode(",",$str_parts[2]);

$position = trim($onmousedown_parts[4],"\'");
print "<br>$position"; //will print position
}

Попробуйте выполнить анализ страницы HTML

http://simplehtmldom.sourceforge.net/
0 голосов
/ 12 апреля 2011

Согласно Google, вам не разрешено ломать их сайт.

Их robot.txt находится здесь: http://www.google.com/robots.txt.

Тем не менее, это немного лицемерно исходит от компании, чья целая бизнес-модель заключается в очистке сайтов других людей.

Считай себя предупрежденным.

Регулярное выражение простое:

<a [^<]*class=l.*?</a>

Теперь, для людей, которые утверждают, что HTML не может быть проанализирован с помощью регулярных выражений ... да, вы правы, вы не можете анализировать html в регулярных выражениях. Но давайте не будем смешить здесь.

Извлечение определенного блока текста из HTML-страницы в известном формате определенно возможно (и легко) сделать в регулярном выражении. Вот для чего нужно регулярное выражение.

Это не «синтаксический анализ HTML», и в таком случае, как этот, где формат известен, а приложение некритично, regex прекрасно работает.


Я только что проверил, и есть API от Google, который позволяет вам сделать до 100 запросов бесплатно в пользовательской поисковой системе. http://www.google.com/cse/ https://code.google.com/apis/console/?api=customsearch&pli=1#welcome

Требуется учетная запись Google и ключ API, которые вы можете получить по ссылкам выше.

Внимание, пробираться через легального будет гораздо сложнее, чем писать свой скребок

...