Как спарсить метатеги и заголовки с любого сайта с минимальными усилиями
Парсинг — это автоматизированный сбор информации из открытых источников в интернете по заданным условиям. Он экономит время при работе с большим объемом данных и приводит их в структурированный вид для дальнейшего использования.
SEO-специалисты используют парсинг для сбора метатегов и заголовков с сайтов, описаний товаров и цен в интернет-магазинах, мониторинга ошибок оптимизации и других задач. В этой статье расскажем о разных способах сбора метаданных с сайтов.
Зачем собирать и анализировать метатеги и заголовки
Работа над содержимым тегов title и description, заголовков h2 — важнейшая часть внутренней поисковой оптимизации сайта. Вхождение ключевых слов в тег title и заголовок первого уровня — одни из важных факторов ранжирования как в Яндексе, так и в Google.
Содержимое title и description формирует сниппет, кликабельность которого (CTR) тоже влияет на рейтинг документа в выдаче. Для привлекательного сниппета важно также не выходить за рамки рекомендуемого поисковиками количества символов в title и description. В противном случае они отобразятся на странице результатов в урезанном виде:
Чтобы проанализировать метаданные на своем или клиентском проекте, сайтах конкурентов, SEO-специалисту нужно получить их в удобном для работы виде.
Как собрать метатеги вручную
Собрать метатеги и заголовки с сайта можно вручную при помощи копирования и вставки в Excel или Google Таблицу. Для этого в режиме просмотра кода находим теги Title и Description и копируем их содержимое:
Title и description находятся в начале кода страницы после тега .
Найти заголовок h2 можно при помощи поиска в режиме просмотра кода:
Чаще всего заголовок первого уровня — это название раздела, товара, услуги. Чтобы проверить это, выделите заголовок на странице и правой кнопкой выберите функцию «просмотреть код»:
Справа или внизу (в зависимости от настроек браузера) откроется консоль, где будет показан код выделенного фрагмента:
На примере наша гипотеза подтвердилась — название категории является заголовком h2.
Копировать теги и заголовки вручную очень трудозатратно. Посмотрим, как можно автоматизировать процесс.
Парсинг метатегов при помощи Google Таблиц
Парсить метатеги и заголовки сайта можно при помощи функции IMPORTXML Google Таблиц. Она импортирует данные из источников формата XML, HTML, CSV, TSV, RSS, ATOM XML в ячейки таблицы при помощи запросов Xpath.
Синтаксис функции выглядит так:
IMPORTXML(«https://site.com/»; «Xpath-запрос»)
В первой части формулы содержится заключенный в кавычки url (обязательно с указанием протокола), во второй — запрос Xpath.
Сложно? Совсем нет. Знать язык запросов Xpath для использования этой функции не обязательно. Просто воспользуйтесь опцией браузера «копировать Xpath». Как это сделать:
- выделяете нужный элемент на странице, кликаете правой кнопкой и выбираете «просмотреть код»;
- в выделенном фрагменте кода при помощи правой кнопки выбираете опцию «Copy Xpath»:
Xpath-запрос скопирован, теперь остается вставить его в функцию IMPORTXML на нужном листе Google Таблицы.
Для title функция будет выглядеть так: =IMPORTXML(«https://site.com/»;»//title»)
Аналогично для h2:
=IMPORTXML(«https://site.com/»;»//h2″)
А вот в случае description синтаксис посложнее. Дело в том, что нам нужно не содержимое тега, а содержимое атрибута content. То есть сначала нужно найти тег meta, затем атрибут name=’description’ и наконец второй атрибут content. Xpath-запрос будет выглядеть так:
//meta[@name=’description’]/@content
Соответственно полный вид функции IMPORTXML для парсинга description такой:
=IMPORTXML(«https://site.com/»;»//meta[@name=’description’]/@content»)
Но каждый раз копировать нужную ссылку долго. Проще поступить так. Выгрузите в Google Таблицу список нужных url и на место ссылки в функции подставьте номер ячейки, например:
=IMPORTXML(A2;»//title»)
На выходе получим такой результат:
Формулу можно протянуть на все адреса и быстро получить нужные данные.
Парсинг при помощи расширений для браузера
Парсить данные сайтов можно при помощи бесплатных браузерных расширений. Примеры расширений для Chrome: Parsers, Scraper, Data Scraper, kimono.
Покажем, как работает расширение Scraper. После установки значок расширения появится на панели браузера:
Откройте страницу, с которой вы хотите собрать данные, нажмите на значок и выберите опцию «Scrape similar…»:
В выпадающем окне в блоке Selector выберите XPath, введите нужный запрос – //title, //h2 или //meta[@name=’description’]/@content и нажмите на кнопку «Scrape»:
Обратите внимание, что значения в блоке Columns во всех случаях должны быть такими же, как в нашем примере. Результат парсинга можно экспортировать в Google Docs. Минус работы с расширением — трудоемкость процесса. Потребуется открывать все нужные страницы для сбора данных.
Программы для парсинга сайтов
Упростить задачу парсинга метаданных могут специальные программы – SEO-парсеры. Они показывают наличие, длину и содержимое метатегов и заголовков на всех страницах сайта.
Примеры таких парсеров: Screaming Frog SEO Spider, Netpeak Spider, ComparseR.
Это платные программы с большим функционалом. Он требуется SEO-специалисту для комплексного анализа сайта: внутренней, внешней, технической оптимизации. Покупать такие инструменты для узкой задачи парсинга метатегов и заголовков нецелесообразно.
Парсинг метатегов онлайн инструментом PromoPult
Собрать метаданные и заголовки с любого сайта онлайн можно при помощи Парсера метатегов и заголовков PromoPult. Это профессиональный инструмент, который в несколько кликов соберет с любого сайта следующие данные:
- содержимое метатегов title, description, keywords;
- заголовки h2-h6.
Результаты можно хранить в облаке или выгружать в формате XLSX. Ограничений на количество анализируемых url в сутки нет.
Для каких задач подходит парсер
- Анализ внутренней оптимизации своего проекта: инструмент покажет страницы с отсутствующими метаданными и заголовками, укажет на дубли и нерелевантные данные.
- Сбор метатегов и заголовков клиентских сайтов: парсер выполнит перечисленные выше задачи по всем проектам и сэкономит время SEO-специалиста.
- Парсинг данных сайтов конкурентов. Сравнение с другими проектами в нише станет источником идей для оптимизации своих или клиентских сайтов.
- Как составная часть SEO-аудита. На этапе приемки проекта в работу или формирования коммерческого предложения требуется быстро оценить качество оптимизации сайта и объем работ. Инструмент поможет быстро выявить проблемы оптимизации тегов и заголовков.
Как работать с парсером метатегов и заголовков PromoPult
1. Загрузите список страниц (url), с которых необходимо собрать данные, одним из трех способов — ссылкой на xml-карту сайта, XLSX-файлом или списком url:
1. Выберите данные, которые нужно собрать, и запустите парсинг:
На стоимость парсинга не повлияет, все чекбоксы вы отметите или только некоторые. Исключать что-то из задачи имеет смысл, только чтобы сэкономить время при обработке данных с большого ресурса (более 1000 url).
2. Готовый отчет появится в списке задач, его можно просмотреть прямо на странице инструмента по клику на название или скачать в формате XLSX:
Парсинг происходит в фоновом режиме, можно закрыть вкладку или браузер, а уведомление о завершении придет на почту. Все отчеты хранятся на сервере PromoPult неограниченное время.
Для того чтобы оценить инструмент, доступен бесплатный парсинг 500 запросов. Нужно только зарегистрироваться в системе и добавить задачу.
парсер — как правильно сделать код парсера для python
Вот ещё вариант:
import requests from bs4 import BeautifulSoup from time import sleep headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)" " Chrome/101.0.4951.67 Safari/537.36"} page = int( input('сколько страниц нужно спарсить: ')) def card_film(): for page_num in range(0, page): URL = f'https://lordserial.live/anime-serialy/page/{page_num}/' response = requests.get(URL, headers=headers).text soup = BeautifulSoup(response, 'lxml') card = soup.find_all('div', class_='th-item') for data in card: name = data.find('div', class_='th-title').text card_url = data.find('a', class_='th-in with-mask'). get('href') yield name, card_url items = [] for title, url in card_film(): sleep(1) items.append({'title': title, 'url': url,})
Это, если нужно оставить запрос на количество страниц. И не просто циклами прогонять а в функцию-генератор обернуть. Если большой объём данных будет, то при таком подходе не нужно всё это в памяти держать. Будет выдёргивать по одной паре и потом записывать. Ну и интервалы между запросами лучше ставить, так, как минимум,нагрузка на сайт меньше.
Вот результат, с одной страницы:
items = [ {'title': 'Семья шпиона', 'url': 'https://lordserial.live/anime-serialy/6114-semya-shpiona.html'}, {'title': 'Клинок, рассекающий демонов', 'url': 'https://lordserial.live/anime-serialy/1483-klinok-rassekayuwij-demonov.html'}, {'title': 'Реинкарнация безработного', 'url': 'https://lordserial.live/anime-serialy/5585-reinkarnaciya-bezrabotnogo.html'}, {'title': 'Суперзлодеи', 'url': 'https://lordserial.live/anime-serialy/5981-superzlodei.html'}, {'title': 'Звёздные войны: Видение', 'url': 'https://lordserial.live/anime-serialy/5903-zvezdnye-voyny-videnie.html'}, {'title': 'Повесть о конце света', 'url': 'https://lordserial.live/anime-serialy/5877-povest-o-konce-sveta.html'}, {'title': 'Клеймор', 'url': 'https://lordserial.live/anime-serialy/5874-kleymor.html'}, {'title': 'Убить или быть убитым', 'url': 'https://lordserial.live/anime-serialy/5873-ubit-ili-byt-ubitym.html'}, {'title': 'Да, я паук, и что с того?', 'url': 'https://lordserial.live/anime-serialy/5858-da-ya-pauk-i-chto-s-togo.html'}, {'title': 'Избранный богами', 'url': 'https://lordserial.live/anime-serialy/5857-izbrannyy-bogami.html'}, {'title': 'Властелины вселенной: Откровение', 'url': 'https://lordserial.live/anime-serialy/5852-vlasteliny-vselennoy-otkrovenie.html'}, {'title': 'Инцидент Кэмоно', 'url': 'https://lordserial.live/anime-serialy/5828-incident-kemono.html'}, {'title': 'Тресе: Защитница города', 'url': 'https://lordserial.live/anime-serialy/5794-trese-zashchitnica-goroda. html'}, {'title': 'Эдем', 'url': 'https://lordserial.live/anime-serialy/5787-edem.html'}, {'title': 'Путь домохозяина', 'url': 'https://lordserial.live/anime-serialy/5783-put-domohozyaina.html'}, {'title': 'Темный дворецкий 2', 'url': 'https://lordserial.live/anime-serialy/5781-temnyy-dvoreckiy-2.html'}, {'title': 'Темный дворецкий', 'url': 'https://lordserial.live/anime-serialy/5782-temnyy-dvoreckiy.html'}, {'title': 'Ясукэ', 'url': 'https://lordserial.live/anime-serialy/5733-yasuke.html'} ]
API парсера имен
Наш молниеносно быстрый RESTful API возвращает объекты JSON, которые легко интегрируются в любой новый или существующий проект. Для каждой конечной точки, указанной ниже, у нас есть обширная документация и примеры кода для PHP, Python, Javascript и C#.
Все конечные точки, перечисленные ниже, доступны через веб-приложение и API. Чтобы использовать наше веб-приложение или API, вам необходимо создать учетную запись. После активации учетной записи станут доступны следующие конечные точки:
Примеры проектов на Github
В таблице ниже вы можете найти список доступных примеров проектов для нашего API и несколько примеров кодирования для разных языков. Не стесняйтесь использовать все предоставленные примеры в ваших новых или существующих проектах.
Язык | Проект | Описание |
---|---|---|
PHP | имя-парсер-php | Полный проект, написанный на PHP 7. 1, с примерами использования всех конечных точек, доступных в API-интерфейсе Name Parser. |
Питон | имя-парсер-python | Полный проект, написанный на Python, с примерами использования всех конечных точек, доступных в API анализатора имен. |
Нам нужна помощь, чтобы добавить больше примеров проектов, поэтому не стесняйтесь обращаться к нам и обсуждать возможности.
Конечные точки
Конечная точка | Описание |
---|---|
Счет | Используйте эту конечную точку, если вы хотите программно получить доступ к сведениям об учетной записи, ограничениям использования и скорости. Эта конечная точка используется по умолчанию , если вы не укажете конечную точку и скорость не ограничена. |
Анализ | Эта конечная точка анализирует полное имя или адрес электронной почты и возвращает имя, отчество и фамилию. Кроме того, он также вернет пол человека, национальность, титул, приветствие и информацию о поставщике электронной почты, если адрес электронной почты использовался. |
Создать | Эта конечная точка генерирует случайное вымышленное полное имя, комбинируя случайное имя и случайную фамилию. |
Экстракт | Эта конечная точка извлекает полные имена людей из любого текста. Используя миллионы имен и фамилий, мы можем извлекать имена с чрезвычайно высокой точностью. Каждому результату будет присвоена оценка достоверности. |
Объекты запроса
Каждая конечная точка, перечисленная выше, имеет разные параметры. Есть три параметра, которые используются глобально. Это ваш ключ API, тип ответа и тип пола.
Имя | Требуется | Описание | Пример |
---|---|---|---|
API_key | требуется | Ваш ключ API требуется для каждого вызова API. Зарегистрируйтесь, чтобы получить бесплатный ключ API. | 93d471ea85d1937e713e8aafffb32090 |
ответ_тип | опционально | По умолчанию API возвращает объекты JSON, записанные в виде пар ключ/значение. При необходимости вы также можете получить ответ в виде массива JSON. | объект , массив |
гендер_тип | опционально | Различные типы могут использоваться в качестве значения для gender_formatted. По умолчанию поле «пол» возвращает «мужской» или «женский». Вы можете изменить форматирование с пола (по умолчанию) на пол, брак, рождение и сленг. | пол , пол , семейный , рождение , сленг |
Объекты ответа
По умолчанию API возвращает объекты JSON , записанные в виде пар ключ/значение. (массивы JSON необязательны) . Ключ всегда является строкой, а значения — типами данных, такими как: строка, целое число, логическое значение, массив или нуль. Если логическое значение, целое число или строка пусты, значение содержит null. Если массив пуст, мы вернем пустой массив. Каждый объект ответа будет иметь такую структуру:
{ результаты: 1, ошибка: ноль, данные: [] }
Ключ «результаты» — это целое число, которое говорит вам, сколько объектов результатов вы можете ожидать в массиве «данных». Ключ «ошибка» (надеюсь) всегда будет null , но если произойдет ошибка, он будет содержать описание в виде строки, а массив данных будет пустым. Кроме того, будет возвращен соответствующий код состояния.
Пределы скорости
Чтобы убедиться, что наши API работают максимально эффективно, у нас есть ограничения скорости. В зависимости от вашей подписки вы можете отправлять ограниченное количество запросов в час. Платные подписки имеют более высокий предел скорости. Ограничение скорости в день и в час является «скользящим временным окном». Для каждого запроса мы оглядываемся назад во времени и подсчитываем, сколько запросов было сделано в течение этого временного окна. Ограничение тарифа в месяц (для платных подписок) — «фиксированное окно».
Ограничение скорости применимо ко всем конечным точкам, кроме конечной точки с информацией об учетной записи. Если вы превысите лимит скорости, ответ будет содержать ошибку и код состояния 429. Запросы, которые приводят к ошибочным ответам, будут исключены из расчетов ограничения скорости.
Версии
К сожалению, REST не предоставляет каких-либо конкретных рекомендаций по управлению версиями. Наш API использует настраиваемые заголовки HTTP для управления версиями (X-API-Version и X-Database-Version). Номер версии нашего API использует формат 9.0047 мажор.минор . Таким образом, если версия API — 1.3 , то основная версия — 1 , а дополнительная версия — 3 . Изменения в второстепенных версиях имеют некритические изменения, такие как добавление новых конечных точек или новых параметров ответа. Изменения в основных версиях могут иметь критические изменения. Вы можете указать номер версии, который мы возвращаем в заголовке, для программного обнаружения обновлений, включив версию в свои скрипты.
Если вы внедряете наш API и текущая версия 1.3, вы можете жестко закодировать это в своем скрипте. Если версия больше не 1.3, вы можете пропустить свою логику и создать исключение. Таким образом, вы можете уведомить себя, если произойдут какие-либо изменения.
Имя Цены на программное обеспечение Parser
Бесплатно для разработчиков, варианты, если вы коммерческий.
Разработчик
Бесплатно
Бесплатно для частных или находящихся в разработке коммерческих проектов.
Включает:
- 250 запросов в день
- 250 запросов в час
- Нет множественных запросов
- Базовая поддержка
Регистрация
Профессиональный
$9 /месяц
Для малых и средних живых проектов
и коммерческого использования.
Включает:
- 50.000 запросов в месяц
- 1.000 запросов в час
- нет множественных запросов
- Поддержка по электронной почте
Подписка
Бизнес
29 долларов /месяц
Для более крупных коммерческих проектов
, требующих больше ресурсов.
Включает:
- 200.000 запросов в месяц
- 1.500 запросов в час
- 5 множественных запросов
- Поддержка по электронной почте
Подписка
Предприятие
$59 /месяц
Для БОЛЬШИХ проектов
, требующих исключительных ресурсов.
Включает:
- 500.000 запросов в месяц
- 3.000 запросов в час
- 10 множественных запросов
- Поддержка по электронной почте
Подписаться
Name Parser предлагает различные ежемесячные подписки. Мы принимаем кредитные карты Visa, MasterCard и American Express. Мы используем Stripe для обработки регулярных платежей по нашим ежемесячным подпискам.
Что такое запрос?
Запрос — это любой HTTPS-запрос, который вы отправляете с помощью своего ключа API на любую из наших конечных точек. Предоставляемые вами параметры или количество возвращаемых результатов не влияют на количество запросов. Некоторые конечные точки предлагают возможность выполнения нескольких запросов в одном запросе.
Что произойдет, если я превышу квоту запросов?
В ответ вы получите сообщение об ошибке с соответствующим кодом состояния HTTP. Тогда вы сможете решить, что делать. Обновите подписку или приостановите использование до следующего платежного цикла.
Какой план выбрать для анализа большого списка имен?
Выберите план «Предприятие», если вы хотите запустить большой пакетный процесс.