Скрипт парсинга Яндекс ТОП 100 на Python актуально на 2024 г.

Скрипт парсинга Яндекс ТОП 100 на Python

watch 4 минут
calendar 18 апреля, 2024 г.
calendar Обновлено: 18 апреля, 2024 г.

Скрипт написан на Python и предназначен для парсинга результатов поиска Яндекса и сохранения их в базу данных MySQL.

Для работы нам потребуется Вот этот сервис

 

Вот краткий обзор скрипта:

  1. Импорт библиотек: Код импортирует необходимые библиотеки для работы с HTTP-запросами (requests), XML (xml.etree.ElementTree), и базами данных MySQL (mysql.connector).
  2. Определение исключенных доменов и регионов: Задаются списки исключенных доменов и регионов, которые необходимо обойти.
  3. Установление соединения с базой данных: Скрипт устанавливает соединение с базой данных MySQL, используя локальный сервер и учетные данные пользователя.
  4. Создание таблицы в базе данных: Создается таблица «search» в базе данных «ya», если она еще не существует. Эта таблица будет содержать информацию о результатах поиска.
  5. Чтение запросов из файла: Считываются запросы из файла «query.txt».
  6. Итерация по регионам и формирование URL-запроса: Для каждого запроса и региона формируется URL-запрос к API Яндекса.
  7. Выполнение запросов и обработка XML-ответа: Выполняются запросы к API Яндекса, полученные XML-ответы обрабатываются с использованием библиотеки ElementTree.
  8. Вставка данных в базу данных: Для каждого результата поиска данные вставляются в таблицу «search» базы данных «ya».
  9. Обработка ошибок при вставке данных: Ловятся и обрабатываются ошибки, возникающие при вставке данных в базу данных.
  10. Сохранение изменений и закрытие соединения: Изменения коммитятся в базу данных, и соединение закрывается.

Готовый результат

В таблице представлены следующие колонки

п/п

query = поисковый запрос

lr = регион

url = найденый ресурс

position = позиция сайта в пс

ну а остальное там уже по желанию, дело каждого кто как будет развивать данный скрипт.

P.S. Использование скрипта на свой страх и риск, создавался в ознакомительных целях для изучения сервиса XMLStok

Этот скрипт автоматизирует процесс парсинга результатов поиска с помощью API Яндекса и вставки их в базу данных для дальнейшего анализа или использования.

 


import requests
import xml.etree.ElementTree as ET
import mysql.connector

# Определение списка исключенных доменов
excluded_domains = [«Avito.ru», «2gis.ru», «dzen.ru»]

# Укажем регионы, которые нужно обойти (lr это регионы)
lr = [«1», «2», «65», «54», «43», «47», «62», «56», «51», «172», «39», «35», «66», «193», «50», «38», «194», «55»,
«240», «44», «197», «195», «63», «76», «16», «75», «67», «48», «64», «11», «37», «49», «9», «13»]

# Открываем соединение с базой данных
conn = mysql.connector.connect(
host=»localhost»,
user=»root»,
password=»root»,
database=»ya»
)
cursor = conn.cursor()

# Создаем таблицу, если она не существует
cursor.execute(»’
CREATE TABLE IF NOT EXISTS search (
id INT AUTO_INCREMENT PRIMARY KEY,
query TEXT,
lr VARCHAR(10),
url VARCHAR(1024),
position VARCHAR(10), — Добавлен новый столбец для хранения позиции
title TEXT,
phones JSON,
emails JSON,
social_links JSON
);

»’)

# Чтение запроса из файла query.txt
with open(«query.txt», «r», encoding=»utf-8″) as file:
for query_text in file:
# Удаляем лишние пробелы и символы новой строки
query_text = query_text.strip()

# Итерация по регионам
for region in lr:
# Формирование URL-запроса для каждого региона и каждого запроса
url = f»https://xmlstock.com/yandex/xml/?user=_ID_&key=_КЛЮЧ_&query={query_text}&lr={region}»

# Выполнение запроса и получение XML-ответа
response = requests.get(url)
xml_content = response.text

# Обработка XML-ответа
tree = ET.fromstring(xml_content)

# Итерация по результатам и вставка в базу данных
for i, group in enumerate(tree.iter(«group»), start=1):
url_element = group.find(«.//url»)
title_element = group.find(«.//title»)
domain_element = group.find(«.//domain»)

if url_element is not None and title_element is not None and domain_element is not None:
url = url_element.text
title = » «.join([elem.text or «» for elem in title_element.findall(«.//hlword»)])
domain = domain_element.text.lower()

# Проверка наличия поддомена и исключения доменов в стоп-листе
if «.» in domain and not any(excluded_domain.lower() in domain for excluded_domain in excluded_domains):
subdomain = domain.split(«.», 1)[0]

# Вставка данных в базу данных, включая запрос, регион и позицию
try:
cursor.execute(‘INSERT INTO search (url, title, query, lr, position) VALUES (%s, %s, %s, %s, %s)’,
(url, title, query_text, region, i))
except mysql.connector.Error as err:
print(f»Ошибка при вставке данных в базу данных: {err}»)
print(f»Данные, вызвавшие ошибку: url={url}, title={title}, query={query_text}, lr={region}, position={i}»)
else:
print(f»Данные успешно вставлены: url={url}, title={title}, query={query_text}, lr={region}, position={i}»)

# Сохраняем изменения и закрываем соединение
conn.commit()
conn.close()

Фото автора статьи

Автор статьи

Алексей Гаврилов

Мой WhatSapp