Оболочка+парсер гугла
Опубликовано 3 мая, 2009 в PHPОт нечего делать, в промежутки между заказами, написал безделушку – парсер выдачи гугла, может поможет кому в нелегком деле написания парсеров выдачи.
<html>
<head>
<title>Поиск <?php echo htmlspecialchars($_POST['query']); ?></title>
<style type="text/css">
input {
width: 100%;
font: 25px;
border: 1px solid #1E1E1E;
}
select {
width: 100%;
font: 25px;
border: 1px solid #1E1E1E;
}
iframe {
width: 100%;
height: 100%;
}
</style>
</head>
<body style="font: 12px tahoma; background-color: #F4F4F4;">
<form action="" method="post">
<input type="text" name="query" value="<?php echo htmlspecialchars($_POST['query']); ?>" onclick="this.value=''" />
<input type="submit" name="submit" value="Искать" />
</form>
<?php
if(isset($_POST['query'])) {
echo '<select onchange="document.getElementById(\'result\').src=this.value;">';
function browser($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.63 (Windows NT 5.1; U; ru) Presto/2.1.1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
return iconv('utf-8', 'windows-1251', $html);
}
$start = browser('http://www.google.ru/search?client=opera&rls=ru&q='.urlencode($_POST['query']));
$start .= browser('http://www.google.ru/search?client=opera&start=10&rls=ru&q='.urlencode($_POST['query']));
preg_match_all('/<h3\sclass=\w+><a\shref=\"(.*)\".*>(.*)<\/a><\/h3>/Usi', $start, $google);
$i = 0;
if(count($google[1][1]) != 0) {
foreach($google[1] as $key => $link) {
if($i == 0) { $first = $google[1][0]; $i++; }
echo '<option value="'.$link.'">'.strip_tags($google[2][$key]).'</option>';
}
}
else
echo '<option value="#">Ничего не найдено</option>';
echo "</select><iframe id=\"result\" src=\"$first\"></iframe>";
}
?>
</body>
</html>
Как это всё работает можно посмотреть вот тут.
Комментариев: 4. Обязательно оставьте свой!
Привет. Подскажи, как переделать паттерн на чтобы парсил только сайты, которые выдает adwords.
(
Голову уже несколько часов ломаю, не получается
Сами домены нужны?
$serp = 'Выдача'; preg_match_all('/(.*)< \/cite>/Usi', $serp, $sites); print_r($sites[1]);не парсится у меня ни к какую, пустая выдача…
разобрался, большое спасибо.