2017-10-08 60 views
0

我不知道標題是否非常準確。
我有5個方法是網絡捕捉不同的網站。每個函數看起來像這樣:帶變量的Python調用方法

def getWebsiteData1(last_article): 
    ty = datetime.today() 
    ty_str = ty.strftime('%d.%m.%Y') 
    url = 'http://www.website.com/news' 
    r = requests.get(url) 
    html = r.text 
    soup = BeautifulSoup(html, 'html.parser') 
    articles = soup.findAll("div", {"class": "text"})[:15] 
    data = list() 
    for article in articles: 
     article_data = dict() 
     if article.find("a").get('href') == last_article: 
      return data 
     else: 
      article_data["link"] = article.find("a").get('href') 
      article_data["title"] = article.find("a").get_text() 
      data.append(article_data) 
    return data 

所以每個函數返回一個字典列表。
我有一個調用此功能的另一功能:

def CreateArticle(website_number, slug): 
    website = Website.objects.get(slug=slug) 
    last_article = website.last_article 
    data = getWebsiteData1(last_article) # here i want to do something like 
    data = website_number(last_article) # but ofcourse this doesnt work 
    if len(data) == 0: 
     return "No news" 
else: 
    for i in data: 
     article = Article(service=service) 
     article.title = i['title'] 
     article.url = i['link'] 
     article.code = i['link'] 
     article.save() 
    service.last_article = data[0]['link'] 
    service.save(update_fields=['last_article']) 
    return data[0]['link'] 

我希望能夠調用CreateArticle(website_number),並告訴該函數getWebsiteData功能應該調用,所以我只能有一個CreateArticle功能,而不是爲每個webscrapper函數另一個CreateArticle函數。 我希望我的問題很明確:D

回答

2

在python函數中是第一類,並且可以作爲參數傳遞給其他函數。

def a(): 
    print("x") 

def b(some_function): 
    some_function() 

然後如A是B內稱爲

b(a) 

將打印 「×」。

因此,您可以確定要使用的功能,然後將其傳入以供使用。