Как сделать так, чтобы ссылка на сайт вводилась вне класса?
Проблема в том, что я не знаю как присвоить переменной 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) # +++
# ...