2016-04-07 13 views
0

私はカテゴリリストの最初のものを常に選んで、wikiページのメインカテゴリを取得するためにpythonを使用しています。しかし、私は再帰を行うためにPythonコードを書いたとき、私はメソッドでそれを変更しようとしても、私が解析する最初の引数を返し続けました。Pythonの再帰が機能しない

import csv 
from bs4 import BeautifulSoup 
import urllib.request 
string_set=[] 

def get_first_category(url): 
    k=urllib.request.urlopen(url) 
    soup=BeautifulSoup(k) 
    s=soup.find_all('a') 
    for i in s: 
     string_set.append(i.string) 
    for i in range(-len(string_set), 0): 
     if string_set[i] == ("Categories"): 
      return (string_set[i + 1]) 



def join_with(k): 
    return k.replace(" ","_") 


def get_category_page(k): 
    p=["https://en.wikipedia.org/wiki/Category:",k] 
    return "".join(p) 

def return_link(url): 
    return get_category_page(join_with(get_first_category(url))) 




file=open("Categories.csv") 
categories=csv.reader(file) 

categories=zip(*categories) 

def find_category(url): 
    k=get_first_category(url) 
    for i in categories: 
     if k in i: 
      return [True,i[0]] 
    return [False,k] 


def main(url): 
    if find_category(url)[0]: 
     return find_category(url)[1] 
    else: 
     print(find_category(url)[1]) 
     return main(return_link(url)) 

print (main('https://en.wikipedia.org/wiki/Category:International_charities')) 

カテゴリのcsvが共有されます。 Categories.csv

理想的には、主な方法は、それがcategories.csvである何かを満たしているが、それはちょうどに続けるまで、第1のカテゴリリンクに続ける必要がありますリンク私が解析された。ここで

答えて

0
def main(url): 
    if find_category(url)[0]: 
     return find_category(url)[1] 
    else: 
     print(find_category(url)[1]) 
     return main(return_link(url)) 

、あなたはそれを印刷した後、あなたは、元でmainを呼び出して、新しいURLを返すことになっているfind_category関数を呼び出します再びになります。戻り値find_categoryに基づいて、urlの値を変更しないでください。それで、それは繰り返し続けます。

+0

私はここで混乱しています。私はelse文で余分な行を追加しようとしましたが、どこにurl = return_link(url)を作成してから、新しいurlで解析しますが、まだ役に立ちません –

関連する問題