Парсинг Google – теория и практика. Какие данные можно получить
Этот парсер прост, как трусы по рубль двадцать. И это не только про его возможности (они кстати скромные, ни поддержки прокси, ни антикапчи), а и про интерфейс тоже.
Но на всякий случай расскажу что и куда клацать, чтобы было хорошо:)
1 - Запросы к ПС, построчно. Русские символы вводите как есть, программа сама сделает urlencode. Клик правой кнопкой мыши откроет меню с парой плюшек.
2 - Кликните, чтобы к каждому запросу добавить site:TLD, где список этих самых TLD находится в файле zones.txt.
Нафиг это нужно? Все очень просто, сравним запрос "google parser" с запросом "google parser site:ru"
В первом случае поисковая выдача будет содержать все найденные сайты, а во втором только сайты в зоне ru.
Это полезно, если требуется получить более 1000 результатов. В идеале, для каждой доменной зоны можно получить по 1000 ссылок.
Например
, по запросы "парсер google
" мы получили только 1000 ссылок.
А если кликнуть "site:TLD", то сможем получить до 11000 ссылок:
3 - Файл, в который будут сохранены найденные ссылки. Если указанный файл существует, то он будет просто дополнен, а не перезаписан.
4 - Файл, в который будут сохранены найденные домены . Если указанный файл существует, то он будет просто дополнен, а не перезаписан.
5 - Интервал задержек между запросами. Лучше не торопить события и выставив что-то между 20-30, пойти сделать себе чай, бутерброд с колбасой и почитать новости, пока программа будет работать:)
6 - Выпадающий список для управления парсингом - старт, стоп, пауза и продолжить. Содержание списка меняется в зависимости от выполняемой задачи, чтобы отображать только доступные задачи.
Ни для кого из вас не секрет, что для продвижения сайтов нужны ссылки и желательно много и бесплатно. Где же их взять? Существует сайты, которые получают контент благодаря пользователям. Например, каталоги сайтов, статей и компаний. Базой называется собрание адресов таких сайтов.
Вне зависимости от того, какую базу вы собираете, можно найти сайты по соответствующим запросам в поисковых системах. Этот процесс называется парсингом выдачи
. Обычно парсится Google
и на это есть три причины:
1.Хорошее качество поиска
2.Высокая скорость ответа
3.Наличие оператора inurl
:
Этот оператор имеет следующий вид inurl:«содержание url искомых страниц ». С помощью этого оператора можно искать конкретные движки сайтов. В Яндексе
нет аналогов этому оператору.
Например, чтобы найти большую часть каталогов Made-Cat нужно в поисковой строке Google ввести запрос: inurl:"ext/rules" или inurl:"add/1" .
Правда, с использованием этого оператора нужно знать несколько моментов. Первое
- для Google большинство спецсимволов - то же самое, что и пробел. Это плохо потому, что некоторые движки будут парситься с огромным количеством мусора. Например, в выдаче по запросу inurl:«xxx/yyy» можно встретить как страницы, содержащие «xxx?yyy», так и страницы, содержащие «xxx.yyy».
Второе
- для многих запросов поисковик при использовании этого оператора показывает не всю выдачу как раз для того, чтобы ограничить дорвейщиков.
Иногда я запрос с оператором inurl заменяю запросом в виде -intext:"XXX" -intitle:"XXX" "XXX". Другими словами, мы говорим Google искать XXX, но не в тексте и не в заголовке, а кроме этого есть только URL. Правда, такая замена не равнозначна: если искомый XXX есть в заголовке или в тексте и одновременно в URL, то такая страница показана не будет.
При парсинге есть обычно две задачи:
1. Напарсить как можно больше URL.
2. Захватив при этом как можно меньше мусора - страниц, которые нам не нужны.
Для решения первой задачи используется следующим метод. Например, по запросу «XXX» выдается только 1000 сайтов, а в Интернете их, скажем, полмиллиона. Чтобы увеличить выдачу, добавим в к основному запросу(ам) «бесполезные» уточнения:
«XXX» фирма
«XXX» компания
«XXX» найти
«XXX» сайт
«XXX» страница
«XXX» главная
В качестве уточнения берем общеупотребительные слова, которые могут встретиться на любом сайте. Хотя более полезно сайты разделять на непересекающиеся категории: только английский, только русский, только украинский. Либо добавлять поиск по зоне домена inurl:«.com», inurl:«.net»… Возьмем, например, запрос «каталог». Страниц в интернете с таким словом 209 000 000, но нам выдается не больше 1000. Используя шесть запросов
1.Каталог inurl:«.com»
2.Каталог inurl:«.net»
3.Каталог inurl:«.biz»
4.Каталог inurl:«.ru»
5.Каталог inurl:«.info»
6.Каталог inurl:«.org»
Мы получим не 1000, а 6000 каталогов. Применив находчивость, можно получить несколько десятков тысяч URL. Но большинство будет мусором.
Порой проблемы с мусором весьма существенные, потому приходится перед парсингом качество выдачи по каждому запросу проверять вручную, чтобы автомат не захватил много ненужных сайтов, а вы потом не мучились, проверяя их. Помогает нахождение «полезных» уточнений.
Например, при запросе inurl:"add/1" можно наблюдать много мусора, этому нужно добавить уточнение inurl:"add/1" "URL вашего сайта" . Можно пойти дальше и отфильтровать «серые» каталоги «inurl:"add/1" "URL вашего сайта" -"URL где стоит ссылка"»
Вручную собирать результаты парсинга долго, скучно и непродуктивно. Поэтому существуют соответствующие программы - парсеры, которые запоминают выдачу по запросам и сохраняют их. Большинство парсеров, либо платные сами по себе, либо входят в комплект других платных приложений.
Использование бесплатного десктопного парсера
Программа не требует установки и поэтому пользоваться ей можно сразу после закачки.Работает программа только с Google и обладает спартанским интерфейсом, но, как говорится, «дареному коню в зубы не смотрят».
1.Поле ввода запросов. Сюда нужно ввести список запросов к Google, например, inurl:«xxx» (обратите внимание на то, что оператор и запрос пишутся без пробела).
2.Поле ввода-вывода URL запросов к Google. В этом поле будет появляться, какие URL Google парсятся при выполнении запросов. При желании можно самому сюда ввести список urls Google, которые нужно отпарсить. К примеру: «http://www.google.com.ua/search?hl=ru&q=XXX&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&meta=»
3.Поле вывода результа – URL сайтов, которые нашлись.
4.Процент выполненения задачи
5.Фильтр на парсинг только русскоязычных сайтов
6.Задержка в тысячных долях секунды. От 0 до 60 000. Задержка нужна, чтобы гугл не понял, что его парсит программа и не заблокировал вам доступ к ресурсам.
7.Кнопка «Поехали» запускает парсинг.
8.Показывает страницу, которая парситься в данный момент. Пользы особой нет, скорее для развлечения.
Дополнительно над полем ввода запросов (1) есть кнопка «преобразовать», которая преобразует запросы inurl:«XXX» в -intext:"XXX" -intitle:"XXX" "XXX"
Как пользоваться программой? Ввести в левое поле ввода(1) список запросов, подождать и копировать из правого поля ввода(3) результат. Потом отчистить дубли доменов, например, с помощью http://bajron.od.ua/?p=67. Реузльтаты хранятся в формате списка URL найденных сайтов.
Программа избавляет от большей части рутинной работы и парсит намного быстрее человека.
- Количество результатов по запросу
- Ссылки, анкоры и сниппеты из выдачи
- Список связанных ключевых слов(Related keywords)
- Определяет посчитал ли Google запрос опечаткой или нет
- Парсит из рекламных блоков ссылку, анкор и сниппет. Следует обратить внимание, что в переменную $link будут попадать ссылки, которые имеют вид для получения ссылок которые мы видим при выдаче под анкорами, нужно использовать переменную $visiblelink. Это касается только блока рекламы.
Возможности(top)
- Поддержка всех поисковых операторов Гугла(site:, inurl: и т.д.)
- Парсит максимальное отдаваемое гуглом число результатов - 10 страниц по 100 элементов в выдачи
- Может автоматически парсить больше 1000 результатов на запрос - подставляет дополнительные символы(опция Parse all results)
- Возможность поиска связанных ключевых слов
- Поддерживает выбор страны поиска, города, региона, домена, языка результатов
- Поддерживает указание времени выдачи
- Возможность парсить по новостям и блогам
- Можно указать парсить ли выдачу если гугл сообщает о том что по указанному запросу ничего не найдено и предлагает результаты по схожему запросу
- Поддерживает отключение фильтра гугла по скрытию похожих результатов(filter=)
- Возможность выбора языка интерфейса Google, выдача результатов в парсере и в браузере, при идентичных настройках, максимально идентична
Варианты использования(top)
- Сбор баз ссылок - для A-Poster, XRumer, AllSubmitter и т.д.
- Оценка конкуренции для кейвордов
- Поиск беклинков(упоминаний) сайтов
- Проверка индексации сайтов
- Поиск уязвимых сайтов
- Любые другие варианты подразумевающие парсинг гугла в том или ином виде
Примеры(top)
Запросы(top)
- В качестве запросов необходимо указывать поисковые фразы, точно так же как если бы их вводили прямо в форму поиска Гугла, например:
окна Москва
site:http://lenta.ru
inurl:guestbookНажмите, чтобы раскрыть...
Результаты(top)
- В результате отображен список ссылок по запросам:
http://lenta.ru/
http://vesti.lenta.ru/
http://old.lenta.ru/
http://1991.lenta.ru/
http://vip.lenta.ru/
http://pda.lenta.ru/
http://3m.lenta.ru/
http://lm-3.lenta.ru/
http://aquarium.lenta.ru/magazine/
http://real.lenta.ru/
http://megafon.lenta.ru/
http://okna-rassvet.ru/
http://www.montblanc.ru/
http://www.probkiizokna.ru/
http://www.panorama-group.ru/
http://www.oknadoz.ru/
http://www.okna-darom.ru/
http://www.oknarosta.ru/
...Нажмите, чтобы раскрыть...
Возможные настройки(top)
Параметр | Значение по умолчанию | Описание |
---|---|---|
Links per page | 100 | Количество ссылок в выдачи на каждую страницу |
Pages count | 5 | Количество страниц для парсинга |
Google domain | www.google.com | Домен Гугла для парсинга, поддерживаются все домены |
Results language | Any language | Выбор языка результатов(параметр lr=) |
Search from country | Global | Выбор страны откуда осуществляется поиск(гео-зависимый поиск, параметр gl=) |
Location (city) | - | Поиск по городу, региону. Можно указывать города в виде novosibirsk, russia; полный список локаций можно найти по ссылке . Также необходимо выставлять корректный домен гугла |
Hide omitted results | ☑ | Определяет скрывать ли опущенные результаты(параметр filter=) |
Serp time | All time | Время серпа(временно-зависимый поиск, параметр tbs=) |
Serp type | Main | Определяет парсить с главной страницы, по новостям или блогам |
Parse not found | ☑ | Определяет парсить ли выдачу если Гугл сообщил что по указанному запросу ничего не найдено и предложил выдачу по другому запросу |
Use AntiGate | ☐ | Определяет использовать ли antigate для обхода каптч |
AntiGate preset | default | Пресет парсера Util:AntiGate. Необходимо предварительно настроить парсер Util::AntiGate - указать свой ключ доступа и другие параметры, после чего выбрать созданный пресет здесь |
Use digit captcha | ☐ | Включает принудительное использование цифровой каптчи |
Use sessions | ☐ | Cохраняет хорошие сессии что позволяет парсить еще быстрее, получая меньшее число ошибок. |
Interface language | English | Возможность выбора языка интерфейса Google, для максимальной идентичности результатов в парсере и в браузере |
Бывает нужно получить данные с какого-либо сайта в сжатом виде, чтобы не приходилось переходить со страницы на страницу, собирая информацию по крупицам. Собрать все нужные данные в таблицу, удобную для просмотра, поможет этот видеоурок.
Задачи сбора информации не так уж редки, как кажется. Бывает нужно получить какую-нибудь статистику по разделам/темам/рубрикам на сайте, доступа к админке которого у нас нет, либо собрать данные о фирмах в каталоге, где все эти данные разбросаны по страницам, и если делать это руками, то уйдет не один день. Для автоматизации такой задачи можно воспользоваться скриптами в Google таблицах.
Чтобы работать с таблицей, нужно использовать класс SpreadsheetApp , который позволяет довольно удобно обращаться с таблицей. Для работы с активным листом мы используем функцию getActiveSheet() , в данном интерфейсе.
Все оперирование внутри листа возможно только внутри диапазонов. Даже если вам нужно будет работать с какой-то конкретной ячейкой, для нее сначала нужно задать диапазон. В выбранном листе задать диапазон можно методом getRange("A1:B2") . Аргументом этого метода можно передать строку, содержащую диапазон ячеек в привычной нам из Excel виде. Внутри заданного диапазона выбор ячейки осуществляется методом getCell(row, col) , где row и col это номер строки и столбца ячейки внутри диапазона, соответственно.
Для получения веб страницы мы используем класс UrlFetchApp , у которого есть нужный для нас метод fetch(url) . Чтобы можно было работать с результатом работы этого метода, нужно привести его к виду текста, с помощью функции getContentText() . После выполнения этой функции в переменной будет сохранен исходный код страницы, с которым можно работать так, как вам хочется. В принципе, никто не запрещает построить по полученной странице DOM дерево и работать с ним, но, как мне кажется, работа со строкой в небольших задачах, где можно в тексте вычленить нужные данные будет проще и быстрее.
Код скрипта для Google Spreadsheet
JavaScript
function getConten(){ for(var j = 1; j < 19; j++){ getPageContent(1 + 10*(j-1), "https://сайт/cms/page/" + j + "/"); } } function getPageContent(startRow, url) { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("A1:B181"); var cell = range.getCell(startRow,1); var response = UrlFetchApp.fetch(url); var textResp = response.getContentText(); var start, end, name; var i; for(i = 0; i < 10; i++){ start = textResp.indexOf("
", end) + 15; start = textResp.indexOf(">", start) + 1; end = textResp.indexOf("", start); name = textResp.substring(start, end); cell.setValue(name); cell = cell.offset(1,0); } }
function getConten () { for (var j = 1 ; j < 19 ; j ++ ) { getPageContent (1 + 10 * (j - 1 ) , "https://сайт/cms/page/" + j + "/" ) ; function getPageContent (startRow , url ) { var sheet = SpreadsheetApp . getActiveSheet () ; var range = sheet . getRange ("A1:B181" ) ; var cell = range . getCell (startRow , 1 ) ; var response = UrlFetchApp . fetch (url ) ; var textResp = response . getContentText () ; var start , end , name ; var i ; for (i = 0 ; i < 10 ; i ++ ) { start = textResp . indexOf (" " , end ) + 15 ; |
Все сталкивались с ситуацией, когда нужно собрать и систематизировать большое количество информации. Для стандартных задач по SEO-оптимизации сайта есть готовые сервисы , например, Netpeak Checker — для сравнения показателей конкурирующих сайтов или Netpeak Spider — для парсинга внутренней информации по сайту. Но что, если задача нетривиальна и готовых решений нет? Есть два пути: делать все руками и долго, или загнать рутинный процесс в матрицу, автоматизировать его и получать результат в разы быстрее. О таком кейсе и пойдет речь.
Что такое парсинг сайтов и зачем он нужен
Kimono — мощный и быстрый в настройке скрейпер с интуитивно понятным интерфейсом. Позволяет парсить данные с других сайтов и позже обновлять их. Бесплатный.
Познакомиться поближе и получить краткий мануал об использовании можно (на русском) или на moz.com (на английском). Давайте попробуем спарсить что-нибудь хорошее с помощью Kimono. Например, дополним созданную нами таблицу с городами списком курортов в стране Города 2. Как это можно реализовать при помощи Kimono Labs. Нам понадобятся:
- приложение для Google Chrome — Kimono;
- таблица Google Docs.
1. Находим сайт с необходимой нам информацией — то есть перечнем стран и их курортов. Открываем страницу, откуда необходимо получить данные.
2. Кликаем на иконку Kimono в правом верхнем углу Chrome.
3. Выделяем те части страницы, данные из которых нам необходимо спарсить. Если нужно выделить новый тип данных на той же странице, кликаем на «+» справа от «property 1 » — так указываем Kimono, что эти данные нужно разместить в новом столбце.
4. Кликнув на фигурные скобки <> и выбрав «CSV », можно увидеть, как выбранные данные будут располагаться в таблице.
5. Когда все данные отмечены:
- кликаем «Done » (в правом верхнем углу);
- логинимся в Kimono, чтобы привязать API к своему аккаунту;
- вводим название будущего АРI;
- кликаем «Create API ».
6. Когда API создано, переходим в таблицу Google, куда хотим загрузить выбранные данные. Выбираем «Connect to Kimono » и кликаем на название нашего API — «Resorts ». Список стран и ссылок на страницы с курортными городами выгружается на отдельный лист.
7. Переходим снова на сайт, берем для примера Ирландию, и снова выбираем через Kimono города, которые необходимо спарсить. Создаем API, называем его «Resorts in countries
».
9. В «Crawl Strategy
» выбираем «URLs from source API
». Появляется поле с выпадающим списком всех API. Выбираем созданное нами ранее API «Resorts
» и из него автоматически загружается список URL для парсинга. Кликаем синюю кнопку «Start Crawl
» (начать обход) и следим за статусом парсинга. Kimono обходит страницы, парсит данные по заданному ранее шаблону и добавляет их в таблицу — то есть делает все то же самое, что и для Ирландии, но уже для всех других стран, что ввели автоматически и без нашего участия.
10. Когда таблица сформирована, синхронизируем Kimono Labs с таблицей Google — точно так же, как делали это в шестом пункте. В результате, в таблице появляется второй лист с данными.
Предположим, хотим, чтобы в таблице отображались все курортные города в стране города прибытия. Данные на листах Kimono обрабатываем с помощью формул для таблиц Google, и выводим в строку список городов, где еще можно отдохнуть в Австралии, кроме Сиднея.
Например, это можно сделать так . Разметить массив данных (список городов), используя логические функции и возвращая значение ячейке, равное TRUE или FALSE. На примере ниже выделили для себя города, которые находятся именно в Австралии:
- TRUE = город находится в Австралии;
- FALSE = город находится в другой стране.
По меткам TRUE определяем начало и конец обрабатываемого диапазона, и выводим в строку соответствующие этому диапазону города.
По аналогии можем вывести курортные города и для других стран.
Мы специально привели здесь достаточно простой и пошаговый пример — формулу можно усложнить, например, сделать так, чтобы достаточно было ввести страну в колонку С, а все остальные вычисления и вывод городов в строку происходили автоматически.
Результаты автоматизации
Как говорилось вначале, нам регулярно нужно составлять по 20 однотипных таблиц. Это рутинный процесс, съедающий по 40-50 минут на одну таблицу, и по 16 часов времени на каждые 20 шт. Согласитесь, 2 рабочих дня на одинаковые таблички — необоснованная трата времени. После автоматизации на одну таблицу уходит 5-10 минут, а на 20 — около 2 часов. Таблица имеет 17 ячеек, парсинг производится из 5 источников. Заполнение таблицы происходит автоматически при заполнении всего 2 ячеек с исходными данными.
Настройка и автоматизация парсинга суммарно заняла 30 часов времени, то есть потраченное время «окупится» уже на этапе генерации второй 20-ки таблиц.