ループ終了後に、結果を最後にまとめて取得したい
質問内容が分かりづらかったので、コードや欲しい結果を具体的に書きます
・再帰と勘違いしていたので、タイトルも変更しました
最終的にやりたいこと
・このリンク先にあるコード結果を、Bottleを使用してWeb画面上に表示したい
試したこと
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
from bottle import route, view
random.seed(datetime.datetime.now())
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html, "html.parser")
return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
@route('/')
@view("test_template")
def test():
links = getLinks("/wiki/Kevin_Bacon")
results = []
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
results.append(newArticle)
links = getLinks(newArticle)
dict(results=results)
・画面表示結果例
['/wiki/Randy_Quaid']
・上記はループ時にテンプレートへ渡しているので、ループ終了後に結果をまとめてテンプレートへ渡したいと思い、下記へ変更したら無限ループに陥ったのですがナゼでしょうか?
while len(links) > 0:
newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
results.append(newArticle)
links = getLinks(newArticle)
dict(results=results)
・最終的に欲しい結果のイメージ(あくまでも想定の範囲です)
['/wiki/Richard_Chamberlain','/wiki/Richard_Chamberlain']
以下当初質問した内容
・下記コードで、ループ最中に随時出力するわけではなく、ループ終了後にまとめて取得したい場合はどうすれば良いでしょうか?
def getHoge(p):
return 処理
res = getHoge("文字列")
def hoge():
while len(res) > 0:
str = 処理
print(str)
links = getHoge(str)
hoge()
・文字列で構成されたオブジェクトで取得?
※そもそも「どういう形式で取得できるか」自体、良く分かっていません
・試したけれどもうまく動作しない(無限ループ?)コード
def getHoge(p):
return 処理
res = getHoge("文字列")
result = ['1'] #変数定義。代入しないと定義できないと書いてあったので取り敢えず適当に'1'を代入しました
def hoge():
global result
while len(res) > 0:
str = 処理
print(str)
result.append(str)
links = getHoge(str)
retuen result #ここで取得したい
hoge()