Разница между двумя версиями одного кода

первый вариант:

import requests
from bs4 import BeautifulSoup as BS


def get_html(_):
    r = requests.get(_)
    return r.text


def get_data(html_code):
    soup = BS(html_code, 'lxml')
    spans = soup.find('span').text
    return spans


def main():
    url = 'https://yandex.ru/pogoda/213'
    print(get_data(get_html(url)))


if __name__ == '__main__':
    main()

второй вариант:

import requests
from bs4 import BeautifulSoup as BS


def get_data(html_code):
    soup = BS(html_code, 'lxml')
    spans = soup.find('span').text
    return spans


def main():
    url = 'https://yandex.ru/pogoda/213'
    r = requests.get(url)
    return r.text # вернули html-код сайта
    print(get_data(r.text))


if __name__ == '__main__':
    main()

не могу понять почему не работает второй вариант, ведь аргумент для функции get_data аналогичный получается.


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

Автор решения: CrazyElf

Вы хотите, чтобы print что-то напечатал уже после того, как вы вернули управление из функции? Так не получится. Надо сначала напечатать, а потом выходить:

print(get_data(r.text)) # сначала напечатали
return r.text # потом вернули html-код сайта

И если вы хотите как-то использовать то, что вернула функция, надо что-то с результатом сделать - присвоить куда-то или напечатать:

if __name__ == '__main__':
    print(main()) # печатаем то, что вернула функция
→ Ссылка
Автор решения: danilshik

У вас все в куче, разделите эту кучу на составные части:

def get_html(r):
    return BeautifulSoup(r, "lxml")

def request(url, params):
    while True:
        try:
            r = requests.get(url, params=params, headers=header)
            if(r.status_code == 200):
                return r.text
            else:
                print("Ожидание 1 секунда")
                time.sleep(1)
        except Exception as e:
            print("Ожидание 1 секунда", e)
            time.sleep(1)

def get_data(html):
    spans = html.find('span').text
    return spans

def parse():
    url = ""
    r = request(url, None)
    html = get_html(r)
    spans = get_data(html)

Примерно так, метод request можно менять в зависимости от функционала и требуемой обработки ошибки

→ Ссылка