Как сделать так, чтобы ссылка на сайт вводилась вне класса?

Проблема в том, что я не знаю как присвоить переменной Html строку извне

from bs4 import BeautifulSoup
import requests
class parse():
        def __init__(self):
            self.Html = requests.get('https://www.avito.ru/voronezhskaya_oblast/avtomobili?cd=1')
            self.Html = self.Html.text
            self.Html = BeautifulSoup(self.Html, "html.parser")
            self.len_of_list = self.Html.find_all('a', rel='noopener', target='_blank',class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')
            self.Url = self.Html.find_all('a', rel='noopener', target='_blank',class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')
        def get_url(self,html_doc,index):
            self.Url = html_doc.find_all('a', rel='noopener', target='_blank',class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')
            self.Url = str(self.Url[index])
            self.Url = self.Url.split()
            self.Url = self.Url[8]
            self.Url='https://www.avito.ru/' + self.Url.replace('href=', '')[1:-1]
            return self.Url
        def get_price(self,html_doc,index):
            self.price = html_doc.find_all('span', class_='price-text-E1Y7h text-text-LurtD text-size-s-BxGpL')
            self.price = str(self.price[index])
            self.price = self.price.split('<')
            self.price = self.price[1]
            self.price = self.price.split('>')
            self.price = self.price[1]
            return self.price
        def get_name(self,html_doc,index):
            self.Name = html_doc.find_all('h3', class_='title-root-j7cja iva-item-title-_qCwt tit''le-listRedesign-XHq38 title-root_maxHeight-SXHes text-text-LurtD text-size-s-BxGpL text-bold-SinUO')
            self.Name = self.Name[index]
            self.Name =str(self.Name)
            self.Name =self.Name.split('>')
            self.Name=self.Name[1]
            self.Name =self.Name.split('<')
            self.Name =self.Name[0]
            return self.Name
        def price_list(self):
            for self.index in range(0,len(self.len_of_list)):
                print(f'Имя : {self.get_name(self.Html,self.index)} Цена: {self.get_price(self.Html,self.index)} Ссылка: {self.get_url(self.Html,self.index)}')

parsed =parse()
parsed.price_list()

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

Автор решения: S. Nick

Попробуйте так:

from bs4 import BeautifulSoup
import requests


class Parse():
    def __init__(self, url):                                         # +++ url
        super().__init__()                                           # +++ 

        self.new_url(url)                                            # +++        

    def new_url(self, url):                                          # +++       
    
#        self.Html = requests.get('https://www.avito.ru/voronezhskaya_oblast/avtomobili?cd=1')
        self.Html = requests.get(url)                                # +++ url
        
        self.Html = self.Html.text
        self.Html = BeautifulSoup(self.Html, "html.parser")
        self.len_of_list = self.Html.find_all(
            'a', rel='noopener', target='_blank',
            class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')
        self.Url = self.Html.find_all(
            'a', rel='noopener', target='_blank',
            class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')

    def get_url(self,html_doc,index):
        self.Url = html_doc.find_all('a', rel='noopener', target='_blank',class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja iva-item-title-_qCwt title-listRedesign-XHq38 title-root_maxHeight-SXHes')
        self.Url = str(self.Url[index])
        self.Url = self.Url.split()
        self.Url = self.Url[8]
        self.Url='https://www.avito.ru/' + self.Url.replace('href=', '')[1:-1]
        return self.Url
        
    def get_price(self,html_doc,index):
        self.price = html_doc.find_all('span', class_='price-text-E1Y7h text-text-LurtD text-size-s-BxGpL')
        self.price = str(self.price[index])
        self.price = self.price.split('<')
        self.price = self.price[1]
        self.price = self.price.split('>')
        self.price = self.price[1]
        return self.price
        
    def get_name(self,html_doc,index):
        self.Name = html_doc.find_all('h3', class_='title-root-j7cja iva-item-title-_qCwt tit''le-listRedesign-XHq38 title-root_maxHeight-SXHes text-text-LurtD text-size-s-BxGpL text-bold-SinUO')
        self.Name = self.Name[index]
        self.Name =str(self.Name)
        self.Name =self.Name.split('>')
        self.Name=self.Name[1]
        self.Name =self.Name.split('<')
        self.Name =self.Name[0]
        return self.Name
            
    def price_list(self, url=None):                                 # +++ url=None
        if url:                                                     # +++ 
            self.new_url(url)                                       # +++ 
        
#        for self.index in range(0, len(self.len_of_list)):
        for index in range(0, len(self.len_of_list)):
            print(f'Имя : {self.get_name(self.Html, index)} '
                  f'Цена: {self.get_price(self.Html, index)} '
                  f'Ссылка: {self.get_url(self.Html, index)}')
                      
            
url = 'https://www.avito.ru/voronezhskaya_oblast/avtomobili?cd=1'   # !!! cd=1
parsed = Parse(url)
print(f'\ncd=1\n\n') 
parsed.price_list()

print(f'\ncd=2') 
url = 'https://www.avito.ru/voronezhskaya_oblast/avtomobili?cd=2'   # !!! cd=2
parsed.price_list(url)                                              # +++ 

# ...
→ Ссылка