Вернуть несколько значений из функции в Python - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу вернуть несколько ссылок в Python, но не могу понять, как.Если я печатаю link_href, я получаю все ссылки, но когда я возвращаюсь, я получаю только первую ссылку, и приложение закрывается.Кто-нибудь может мне помочь, пожалуйста?

def main():
def get_links():
    offset = 0     
    while int(offset) < 990:
        url = f"https://krmeni.cz/kniha?offset={str(offset)}"
        page_content = requests.get(url)
        soup = BeautifulSoup(page_content.text, "html.parser")
        file_path = "chatbot_data.csv"
        offset += 10
        for link in soup.find_all('a', {'class': 'white-btn'}):
            title = link.string
            link_href = link.get("href")
            if link.string == "přidat odpověď":
                continue
            else:
                return link_href


for link_href in get_links():
    answer_url = f"https://krmeni.cz{get_links()}"
    print(answer_url)

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Ваш цикл завершается после нахождения первой ссылки.Используйте понимание списка:

return [link.get('href')
        for link in soup.find_all('a', {'class': 'white-btn'})
        if link.string == 'pridat odpoved']

Возвращает список, содержащий ссылки, которые вам нужны.

0 голосов
/ 18 сентября 2018

просто используйте функцию генератора yield вместо return

def main():
def get_links():
    offset = 0     
    while int(offset) < 990:
        url = f"https://krmeni.cz/kniha?offset={str(offset)}"
        page_content = requests.get(url)
        soup = BeautifulSoup(page_content.text, "html.parser")
        file_path = "chatbot_data.csv"
        offset += 10
        for link in soup.find_all('a', {'class': 'white-btn'}):
            title = link.string
            link_href = link.get("href")
            if link.string == "přidat odpověď":
                continue
            else:
                yield link_href


for link_href in get_links():
    answer_url = f"https://krmeni.cz{get_links()}"
    print(answer_url)
0 голосов
/ 17 сентября 2018

Ваш код выходит на первый оператор if и else.

  if link.string == "přidat odpověď":
      continue
  else:
      return link_href

Инициализируйте список перед циклом for и добавьте link_href в оператор else. После завершения выполнения цикла for верните список. Как это.

    link_list = []
    for link in soup.find_all('a', {'class': 'white-btn'}):
        title = link.string
        link_href = link.get("href")
        if link.string == "přidat odpověď":
            continue
        else:
            link_list.append(link_href)
    return link_list

Или сделать генератор,

  for link in soup.find_all('a', {'class': 'white-btn'}):
        title = link.string
        link_href = link.get("href")
        if link.string == "přidat odpověď":
            continue
        else:
            yield link_href
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...