Повышение эффективности скрипта

Скрипт сравнивает title двух страниц в каждой строке. Сначала исправьте перенос состояния titles между строками, разбор URL и обработку ошибок, затем добавляйте ограниченную конкурентность.

Короткий ответ

Что ответить на собеседовании

Скрипт сравнивает title двух страниц в каждой строке. Сначала исправьте перенос состояния titles между строками, разбор URL и обработку ошибок, затем добавляйте ограниченную конкурентность.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо понять, что делает представленный фрагмент и предложить пути его ускорения.

import requests as req
from bs4 import BeautifulSoup

input_file = open('links.txt', 'r')
titles = []
line_idx = 0

for line in input_file:
    line_idx += 1
    urls_list = line.split(" ")
    urls_list[1] = urls_list[1].replace('\n', '')

    for link in urls_list:
        response = req.get(link)

        if response.status_code != 200:
            print("error status code get request on ", link, " is ", response.status_code)
            continue

        html = response.text
        parser = BeautifulSoup(html, 'lxml')
        page_title = parser.title.string
        titles.append(page_title)

    if len(titles) == 2:
        if titles[0] != titles[1]:
            print("In the line under the number ", line_idx, " two mismatched titles")
        else:
            print("In the line under the number ", line_idx, " OK")
        titles.clear()
    else:
        print("In the line under the number ", line_idx, " one or both links are not working")

input_file.close()

Ответ

Скрипт сравнивает title двух страниц в каждой строке. Сначала исправьте перенос состояния titles между строками, разбор URL и обработку ошибок, затем добавляйте ограниченную конкурентность.

titles очищается только при двух успешных результатах. Если одна загрузка не удалась, её соседний title попадёт в сравнение следующей строки. Создавайте список заново для каждой пары.

Используйте line.split() и проверяйте ровно два URL; urls_list[1] иначе может вызвать IndexError. У страницы может не быть title, а .string может быть None. Добавьте timeout, обработку сетевых ошибок и with для файлов.

Повторяющиеся URL можно кешировать в пределах ограниченного запуска. Для ускорения I/O загружайте несколько пар конкурентно с лимитом запросов и сохранением привязки к номеру строки. Не запускайте неограниченное число соединений; сначала измерьте сетевое время и стоимость парсинга.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее