Скрипт написан на Python и предназначен для парсинга результатов поиска Яндекса и сохранения их в базу данных MySQL.
Для работы нам потребуется Вот этот сервис
Вот краткий обзор скрипта:
requests
xml.etree.ElementTree
mysql.connector
Готовый результат
В таблице представлены следующие колонки
п/п
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()
Автор статьи
Алексей Гаврилов