Подскажите по сабжу, что не пробовал рано или поздно вылетает капча. Может с антикапчей есть софт, может софт обходит капчу. Поделитесь кто чем пользуется
Google URL Grabber Граббинг по дорку: php grabber.php index.php?id= Продолжить граббинг со страницы 5: php grabber.php index.php?id= 5 Граббинг по стране US со страницы 10: php grabber.php index.php?id= .uk 10 Собранные ссылки будут в links.txt Если надо могу выложить класс по работе с socks, прикрутить его к грабберу будет просто. Code: <?php class googleURLGrabber { public $argv = array(); public $google_dork = ''; public $links_filename = 'links.txt'; public $google = 'www.google.com'; public $grabbed_links = array (); public $timeout = 15; public $page = 0; public function showInfo() { echo '***************************' . "\r\n"; echo '* *' . "\r\n"; echo '* Google URL Grabber v0.2 *' . "\r\n"; echo '* *' . "\r\n"; echo '********* [coded by _xtc] *' . "\r\n\r\n"; } public function getParameters() { $this->showInfo(); if (count($this->argv) < 2) { echo 'Options: ' . $this->argv[0] . ' ?id=' . " .com 15\r\n"; die; } $site = ''; if (count($this->argv) == 3) { if (is_numeric($this->argv[2])) { $this->page = $this->argv[2]; } else { $site = 'site:' . $this->argv[2]; } } elseif (count($this->argv) == 4) { $site = 'site:' . $this->argv[2]; $this->page = $this->argv[3]; } $this->google_dork = 'allinurl:' . $this->argv[1] . ' filetype:php ' . $site; } public function getLinks() { if (file_exists($this->links_filename)) { $handle = fopen($this->links_filename, 'r'); $content = fread($handle, filesize($this->links_filename)); fclose($handle); if (preg_match_all('/(.*?)\r\n/s', $content, $match)) { foreach ($match[1] as $link) { $this->grabbed_links[] = $link; } } echo 'Grabbed links: ' . count($this->grabbed_links) . "\r\n\r\n"; } } public function writeToFile($str = '', $option) { $handle = fopen($this->links_filename, $option); fwrite($handle, $str); fclose($handle); } public function getContent($query) { $content = ''; $fp = fsockopen($this->google, 80, $errno, $errstr, 30); if ($fp != false) { $header = "GET " . $query . " HTTP/1.0\r\n"; $header .= "User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.50\r\n"; $header .= "Host: " . $this->google . "\r\n"; $header .= "Connection: Close\r\n\r\n"; fwrite($fp, $header); $start = microtime(true); while (!feof($fp) && (microtime(true) - $start) < $this->timeout) { $content .= fgets($fp); } fclose($fp); return $content; } return false; } public function grabbing() { $nextPageExist = true; $next_page_regexp = '/<span style="display:block;margin-left:53px;text-decoration:underline">/s'; $url_regexp = '/<h3 class="r"><a href="(.*?)"/s'; //$query = '/search?sclient=psy&hl=en&source=hp&q=' . urlencode($this->google_dork) . '&btnG=Search&num=100&start='; $query = '/search?hl=en&as_q=' . urlencode($this->google_dork) . '&as_qdr=all&num=100&start='; $page = $this->page; $grabbed_links = $this->grabbed_links; while ($nextPageExist) { $_query = $query . $page . '00'; $content = $this->getContent($_query); $page++; if (empty($content)) { echo "\r\n" . 'Stopped by socket error!' . "\r\n"; echo 'On page: ' . --$page . "\r\n"; } if (preg_match_all($url_regexp, $content, $match)) { foreach ($match[1] as $_url) { $linkExist = false; $url = html_entity_decode(urldecode($_url)) . "\r\n"; if (!strstr($url, '=')) continue; preg_match('/(?P<domain>.*?\..*?)\//s', $url, $match); foreach ($grabbed_links as $links) { if (strstr($links, $match['domain']) !== false) { $linkExist = true; break; } } if (!$linkExist) { $grabbed_links[] = $url; } else { continue; } echo $url; $this->writeTofile($url, 'a'); } } if (preg_match('/' . $this->google . '\/sorry\//s', $content)) { echo "\r\n" . 'Stopped by AntiBot System!' . "\r\n"; echo 'On page: ' . --$page . "\r\n"; break; } if (!preg_match($next_page_regexp, $content)) $nextPageExist = false; } } public function __construct($argv) { $this->argv = $argv; $this->getParameters(); $this->getLinks(); $this->grabbing(); } } $googleURLGrabber = new googleURLGrabber($argv);
Парсер гугла. Переделывал когда-то для себя чей-то пример. Для чего-то простого думаю сойдет. PHP: <?php echo "========== Google Parser ==========<br>"; set_time_limit(0); if( isset( $_GET[dork] ) ) $key = urlencode( $_GET[dork] ); // Запрос else die( 'Usage: .php?dork=YOUR_DORK_HERE' ); $total = 20; // страниц printf( "Total pages to process: %d <br><br>", $total ); for( $i = 0; $i <= $total*10; $i+=10 ) // по 10 ссылок на странице { $google = file_get_contents( "http://www.google.com/search?q=$key&start=$i" ); preg_match_all( '#<h3 class="r"><a href="(.*?)".*?</a></h3>#', $google, $links ); foreach( $links[1] as $link ) { $currentPage[] = $link; } $links = implode( "\n", $currentPage ); $fp = fopen( 'links.txt', 'ab' ); //links.txt файл со сылками fwrite( $fp, $links ); fclose( $fp ); unset( $links ); unset( $currentPage ); printf( "Total links: %d <br>", $i+10 ); $rnd = rand( 7, 13); // Задержка 7-13 секунд printf( "Waiting for %d seconds...\n", $rnd ); flush(); ob_flush(); sleep( $rnd ); } ?>
есть рабочий jQuery парсер гугла, у меня был заточен под парсинг всех доменов в зоне DK если интересно дам, в бан не уходит! правдо 1 поток (php)
Был бы парсер,парсящий бесконечнои выдавал бы окно каптчи,останавливая парсинг,а то лажня какая-то - или вообще не работает,или работает,но жутко криво.