从python中的函数返回多个值

时间:2018-09-17 15:41:47

标签: python python-3.x web-scraping beautifulsoup

我想在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 :(得分:1)

您的代码首先显示if和else语句。

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

在for循环之前初始化一个列表,并在else语句中附加link_href。 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

答案 1 :(得分:0)

找到第一个链接后,您的循环退出。使用列表理解:

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

这将返回一个包含所需链接的列表。

答案 2 :(得分:0)

只需使用生成器功能 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)