Находим битые  ссылки с Selenium в Python

Здравствуйте! В сегодняшней статье мы поговорим про битые ссылки. Что же это такое. Итак, представим себе ситуацию при которой мы сняли гостиницу и при прибытии к месту, оказывается что это пустырь. Примерно также может почувствовать себя пользователь при встрече с битыми ссылками. Т.е. наличие подобных ошибок влияет на восприятие данного сайта и ухудшает UE — пользовательский опыт, а также сказывается на SEO. В связи с чем возникает необходимость проверки сайта на наличие подобных ошибок. Конечно, ничто не мешает сделать это вручную, но что если сайт многостраничный и ссылки на нем трудно подсчитать. Что часто встречается в интернет магазинах. Для решения подобных задач существуют готовые инструменты от Google и Yandex. При этом многие из них платны и имеют ограничения. Мы же попробуем решить данную задачу с помощью Selenium webdriver и Python. И как мы уже знаем, Selenium — это веб-инструмент автоматизации с открытым исходным кодом, позволяющий автоматизировать действия пользователя в браузере. Для решения задачи нахождения битых ссылок нам понадобится совершить ряд последовательных шагов.

Необходимые шаги: Найти все ссылки, присутствующие на веб-странице.Отправить HTTP-запрос на каждую ссылку и получите ее код состояния.На основе кода состояния мы решим, сломана ссылка или нет.

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# импорт модуля для отправки запросов по адресам ссылок
import requests

# укажим место хранения драйвера
PATH=r"C:/path_to/chromedriver.exe"

# создадим  экземпляр драйвера
my_driver = webdriver.Chrome(PATH)

# пропишем адрес сайта
my_driver.get("https://myrusakov.ru/python-tutorial.html")

# получим список ссылок из страницы сайта
all_links = my_driver.find_elements(By.CSS_SELECTOR,"a")

# проверим список на наличие битых ссылок
for link in all_links:
    # выделение url ссылки из аттрибута href
    url = link.get_attribute('href')

    # послаем запрос по указанному url  и получаем ответ
    result = requests.head(url)

    # если статус кода ответа не равен 200 выводим ссылку на экран (приспособьте условие под свои потребности)
    if result.status_code != 200:
      print(url, result.status_code)

Следует иметь ввиду, что подход основанный на статусе ответов может зависеть от текущего состояния соединения или сервера. Таким образом, при помощи Python и Selenium webdriver, мы попытались решить одну из задач оптимизации сайта в поисковике.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.