Следующий PHP-код работает нормально, но когда он используется для сканирования 1000 результатов Google для указанного ключевого слова, он возвращает только 100 результатов. У Google есть ограничение на возвращаемые результаты или есть другая проблема?
<?php require_once ("header.php"); $data2 = getContent("http://www.google.de/search?q=auch&hl=de&num=100&gl=de&ix=nh&sourceid=chrome&ie=UTF-8"); $dom = new DOMDocument(); @$dom->loadHtml($data2); $xpath = new DOMXPath($dom); $hrefs = $xpath->evaluate("//div[@id='ires']//li/h3/a/@href"); $j = 0; foreach ($hrefs as $href) { $url = "http://www.google.de/" . $href->value . ""; echo "<b>"; echo "$j "; echo $url = get_string_between($url, "http://www.google.de//url?q=", "&sa="); echo "<br/>"; $j++; } ?>
Вы уже приняли ответ, так или иначе, если вы все еще находитесь в своем проекте:
Как отмечают люди, Google не любит, чтобы его царапали. Это не разрешено их условиями, поэтому, если вы согласились с ними, вы нарушите их, автоматически получив доступ к сайту. Тем не менее, Google сам не заботился о разрешении на доступ к веб-сайтам, когда они начали. Даже Bing был основан на Google и получил это, я думаю, большинство других поисковых систем также занимают у Google.
Если вы должны очистить Google, сохраните скорость ниже их коэффициента обнаружения. Не забивайте их, так как это только приведет к тому, что ваш проект будет заземлен, а Google будет больше озабочен автоматическим доступом, который может усложнить для нас в целом.
По моему опыту вы можете получить доступ к Google со скоростью от 15 до 20 запросов в час (с одним IP) в долгосрочной перспективе без блокировки. Конечно, ваш код должен имитировать браузер и вести себя правильно. Более высокие ставки будут заблокированы, сначала (обычно) с помощью временной переписки. Решение captcha создает файл cookie, который позволяет продолжить. Я видел многолетние капли, и я видел постоянные блоки одного IP и больших подсетей. Итак, правило №1: не обнаруживайте, если вы обнаружите, а затем автоматически остановите свой скребок.
Так что это немного сложно, но если вы полагаетесь на получение данных таким образом, взгляните на PHP-проект с открытым исходным кодом на http://scraping.compunect.com/. Это код PHP, который может очистить несколько ключевых слов и несколько страниц и управляет IP-адресами, чтобы они не блокировались. Я использую этот код для проектов, он работает до сих пор.
Если вам просто нужно собрать небольшой объем данных от Google, а реальный рейтинг не важен, ознакомьтесь с их API. Если рейтинг имеет значение, или если вам нужно много данных, вам нужен скребок Google, как тот, с которым я связан.
Btw, PHP вполне подходит для задачи, но вы должны запускать ее как локальный скрипт, а не через Apache.
Сколько результатов дает Google запрос на очистку?
Ноль . Вы можете очистить нулевые страницы.
Please refer to clause 5.3 of the Google Terms of Service: "You specifically agree not to access (or attempt to access) any of the Services through any automated means (including use of scripts or web crawlers)..."
Вы можете попытаться уклониться от своих механизмов обнаружения; googling «scrape google search» включает несколько предложенных методов. Но это не то, что поддерживает Google.
Поскольку вы анализируете HTML-код фактического веб-сайта, не ожидайте, что он вернет произвольное количество результатов только в результате изменения одного параметра.
Как вы можете видеть на странице настроек поиска, максимальное количество элементов: https://www.google.com/preferences?hl=ru
Если вам нужно 1000 результатов, вам придется анализировать первые 10 страниц результатов отдельно.
… Невозможно очистить результаты Google …
Google предлагает бесплатный и чистый API поиска !
Пример кода (REST):
GET https://www.googleapis.com/customsearch/v1?parameters