почему не добавляется элементы в переменную через .append
есть функция pars которая должна была собирать данные с сайта и класть их в переменную
def pars():
get_all_attribute = soup.find_all(class_="iva-item-sliderLink-bJ9Pv")
get_all_price = soup.find_all('span', class_="price-text-E1Y7h")
for item in get_all_attribute :
gl_text = (item['title'])
prod_name.append(gl_text)
соответственно у меня выше есть переменная prod_name = [] , так вот проблема внутри функции выводя в консоль всё нормально выводится и аппендится
а если вызвать принт вне функции то выводится пустой список , я предполагал что дела в скопе но что то не вышло, ниже хочу сложить все элементы в словарь но при вызове кода прилетают пустые списки
class Product():
def __init__(self, prod_name , price):
self.prod_name = prod_name
self.price = price
def print_product_and_price(self):
print(f'Товар{self.prod_name} \n цена{self.price}')
print(price)
list_product.append(Product(
price = price,
prod_name = prod_name
))
Ответы (1 шт):
Автор решения: Garry Galler
→ Ссылка
Переделанный на скорую руку код. Никогда не используй глобальных переменных. Глобальными должны быть только константы.
import requests
import json
import string
import re
import lxml
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
ua = UserAgent()
domen = 'https://www.avito.ru/'
def pars(soup):
price = []
prod_name = []
get_all_attribute = soup.find_all(class_="iva-item-sliderLink-bJ9Pv")
get_all_price = soup.find_all('span', class_="price-text-E1Y7h")
# get name
for item in get_all_attribute :
gl_text = (item['title'])
prod_name.append(gl_text)
# get price
for i in get_all_price:
gl_price= i.text
price_done = re.sub(r'[^\d,.]', '', gl_price)
if price_done == '':
del()
else:
price.append(price_done)
return prod_name, price
class Product():
def __init__(self, prod_name , price):
self.prod_name = prod_name
self.price = price
def print_product_and_price(self):
print(f'Товар{self.prod_name} \n цена{self.price}')
def main():
with open (r'index.html', encoding='utf-8') as file:
src = file.read()
soup = BeautifulSoup(src, 'lxml')
list_product = []
prod_name, price = pars(soup)
list_product.append(Product(
price = price,
prod_name = prod_name
))
for tovar in list_product:
tovar.print_product_and_price()
if __name__ =='__main__':
main()