Непонятная ситуация с BeautifulSoup
Пытаюсь найти теги, используя метод finaAll(), однако у меня возникают следующие ситуации:
- Я получаю список с названиями, при этом списки с ценами и датами пустой
- Я получаю список с ценами и датой, при этом названия пусты
Одно другое исключает, и неважно сколько раз я буду запускать программу - результат бывает разный. При этом я пробовал выводить в консоль html-код, искал все теги, и они на месте, а списки могут быть какими захотят
Что за бред, люди умные?)
import requests
from bs4 import BeautifulSoup
class Parse:
def __init__(self, url):
self.link = url
self.html = Parse.__get_html(self.link) # получаем html-страницу
def __get_html(link):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}
req = requests.get(link, headers = headers)
return req.text
# Следующие методы ищут в собранной html-странице теги, содержащие называния, цены и даты, а затем собирают
# их в список и возвращают этот список
def get_title(self):
html = self.html
soup = BeautifulSoup(html, 'html.parser')
titles_tags = soup.findAll('div', class_ = 'snippet-title-row')
titles = []
for i in titles_tags:
text = str(i)
get_title = text.split('>')[4].split('<')[0].split('\n')[1]
titles.append(get_title)
return titles
def get_price(self):
html = self.html
soup = BeautifulSoup(html, 'html.parser')
price_tags = soup.findAll('span', class_ = 'price-text-1HrJ_ text-text-1PdBw text-size-s-1PUdo')
prices = []
for i in price_tags:
text = str(i)
get_price = text.split('>')[1].split('<')[0]
prices.append(get_price)
return prices
def get_data(self):
html = self.html
soup = BeautifulSoup(html, 'html.parser')
data_tags = soup.findAll('div', class_ = 'date-text-2jSvU text-text-1PdBw text-size-s-1PUdo text-color-noaccent-bzEdI')
datas = []
for i in data_tags:
text = str(i)
get_data = text.split('>')[1].split('<')[0]
datas.append(get_data)
return datas
# Здесь мы реализовываем методы
class Interface(Parse):
def __init__(self, url):
parse = Parse(url) # Создаем экземпляр класса, даем ссылку на страницу и получаем html-страницу
self.title = parse.get_title() # Получаем список, содержащий название
self.prices = parse.get_price() # Получаем список, содержащий цены
self.data = parse.get_data() # Получаем список, содержащий даты
print(self.title)
print(self.prices)
print(self.data)
Interface('https://www.avito.ru/pskov/tovary_dlya_kompyutera?q=i+7+7700')
Вот я просто перезапускаю код 3 раза, ничего не менял