Как Python'у приказать не удалять переменную

Здраствуйте, у меня происходит такая ситуация:

У меня есть код:

CONTENT = {"title": [], "publisher": [], "id": [], "price": []} 
      htmler = BS(self.parsing_html(), "lxml")
      row_NineCol_search = htmler.find(
          "div",
          attrs={"class": "col-9 search-results"}
        )

Вроде row_NineCol_search имеет постоянно значение None
из-за этого возникает вторая понятная для меня ошибка

AttributeError: 'NoneType' object has no attribute 'find_all'

Почему же я взял что переменная удаляется Python'ом?
Потому-что когда я сразу вывожу переменную htmler то всё работает.
Тогда возникает вопрос: "Почему же Python удаляет переменную если на её есть ссылки"
Как я понял и как знаю Python только удаляет переменные на которых нет ссылок,
а точнее когда они заканчиваются. Так тогда почему Python не видит этих ссылок?

UPDATE Вот полностью код:

import requests
from bs4 import BeautifulSoup as BS


class Parsing_Logic():
    """Сама логика."""

    __slots__ = ("url", "totalPages", "details",)
    
    def __init__(self, url):
        """Конструктор."""
        self.url = url

    def parsing_html(self) -> str:
        """Отвечает за запрос html кода страници."""
        r = requests.get(self.url)
        return r.text


    def parsing_content(self) -> list:
        """Парсинг основных данных со страници."""
        CONTENT = {"title": [], "publisher": [], "id": [], "price": []} 
        htmler = BS(self.parsing_html(), "lxml")
        row_NineCol_search = htmler.find(
            "div",
            attrs={"class": "col-9 search-results"}
        )

        blocks_info = row_NineCol_search.find_all(
            "div",
            class_="search-registry-entry-block"
        )
        for block_info in blocks_info:
            block_title = block_info.find(
                "div",
                attrs={"class": "registry-entry__body-value"}
            ).text.strip()
            CONTENT["title"].append(block_title)

            block_publisher = block_info.find(
                "div",
                attrs={"class": "registry-entry__body-href"}
            ).text.strip()
            CONTENT["publisher"].append(block_publisher)

            block_Number = block_info.find(
                "div",
                attrs={"class": "registry-entry__header-mid__number"}
            ).text.strip()
            CONTENT["id"].append(block_Number)

            block_price = block_info.find(
                "div",
                attrs={"class": "price-block__value"}
            ).text.strip()
            CONTENT["price"].append(block_price)

        print(CONTENT["title"], "\n\n\n\n\n", CONTENT["publisher"], "\n\n\n\n\n", CONTENT["id"], "\n\n\n\n\n", CONTENT["price"])

info = Parsing_Logic("")

info.parsing_content()

Ссылку убрал потому что слишком большая но вот она:

https://zakupki.gov.ru/epz/order/extendedsearch/results.html?searchString=&morphology=on&search-filter=%D0%94%D0%B0%D1%82%D0%B5+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F&pageNumber=1&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&savedSearchSettingsIdHidden=&sortBy=UPDATE_DATE&fz44=on&fz223=on&af=on&ca=on&pc=on&pa=on&placingWayList=&selectedLaws=&priceFromGeneral=&priceFromGWS=&priceFromUnitGWS=&priceToGeneral=&priceToGWS=&priceToUnitGWS=&currencyIdGeneral=-1&publishDateFrom=&publishDateTo=&applSubmissionCloseDateFrom=&applSubmissionCloseDateTo=&customerIdOrg=&customerFz94id=&customerTitle=&okpd2Ids=&okpd2IdsCodes=

Если нельзя указать чтобы python не удалял определённую переменную то тогда подскажите как по другому это исправить


Ответы (1 шт):

Автор решения: Іван Шнір

Нашёл способ. Проблема в том что BeatifulSoup4 имеет несколько режимов:

  1. html.parser - он смешивает в себе качество и скорость
  2. lxml - он очень быстрый но из за этого информация может бить не правильно передана или потеряна.
  3. xml или же xml-lxml - такой же как lxml но поддерживает анализатор XML
  4. html5lib - самый медленный но с ним у вас будет приходить весь исходный код

Так вот из-за того что я использовал lxml данные чаще всего плохо передавались и из-за этого были все проблемы. Для тех у кого такая же проблема предлагаю перейти на html.parser или же html5lib. Если же вы не хотите то скачайте весь код который передает вам BeatifulSoup4 и уже тогда правильно обращайтесь к объектам.

Изменено: Ставьте USER-AGENT ещё, потому что все сайты будут думать что это бот и заблокируют вас на сайте или же не будут передавать вам весь HTML код.

→ Ссылка