2017-10-28 35 views
-1

我想寫與瓶網絡刮API,這是代碼:「會話」對象不是可調用瓶

app = Flask(__name__) 


@app.before_request 
def login(): 
    session = requests.Session() 

    url = "someurl" 

    params = {'uid': 'username', 
      'pwd': 'password'} 

    session.post(url, data=params) 

    return session 

@app.route('/scrape') 
def lezione(session): 

    req = session.get("urlscraped") 

    soup = BeautifulSoup(req.content, "lxml") 
    table = soup.find_all(
     'table', attrs={'class': 'griglia_tab', 'id': 'data_table'})[2] 
    if not table: 
     print("List is empty") 
    print(re.sub(r'\n\s*\n', '\n', table.text.strip())) 


if __name__ == "__main__": 
    app.run(debug=True, host='localhost', port=5000) 

本質上講,這代碼登錄到一個網站和擦傷的一些數據。我想要做的是在抓取任何東西之前運行login()函數,但是當我運行代碼時出現錯誤:TypeError: 'Session' object is not callable 代碼中出現了什麼問題?

+0

如果'登錄()'返回什麼,然後'lezione()'將永遠不會運行。 – gommb

+0

但是,當我測試代碼分開沒有燒瓶,它的工作 – andrea56

+0

即使它沒有燒瓶,並不意味着相同的設置將與燒瓶一起工作。 – gommb

回答

0

我會建議轉向login()爲常規功能和lezione()只是調用它:

def login(): 
    session = requests.Session() 

    url = "someurl" 

    params = {'uid': 'username', 
      'pwd': 'password'} 

    session.post(url, data=params) 

    return session 

@app.route('/scrape') 
def lezione(): 

    req = login().get("urlscraped") 

    soup = BeautifulSoup(req.content, "lxml") 
    table = soup.find_all(
     'table', attrs={'class': 'griglia_tab', 'id': 'data_table'})[2] 
    if not table: 
     print("List is empty") 
    print(re.sub(r'\n\s*\n', '\n', table.text.strip())) 
+0

我認爲'return session'應該用'return login()'來改變,否則你會得到錯誤'View function did not return a response' – andrea56

+0

如果你這樣做會造成無限循環。 – gommb

+0

我的壞,忘了修復def lezione() – andrea56