我想在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)
答案 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)