2017-10-28 10 views
-1

私はフラスコでWebスクレイピング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 コードの何が間違っていますか?私は通常の関数にlogin()を回すだけlezione()からそれを呼び出すことをお勧めし

+0

(ログイン '場合は)'そして 'lezione()'を実行することはありません何かを返します。 – gommb

+0

しかし、私はフラスコなしでコードをテストしたときにそれは働いた – andrea56

+0

フラスコなしで動作する場合でも、同じセットアップがフラスコで動作することを意味するわけではありません。 – gommb

答えて

0

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関数は応答を返しませんでした 'と表示されます。 – andrea56

+0

これを行うと、無限ループが作成されます。 – gommb

+0

私の悪い、def lezione()を修正するのを忘れてしまった – andrea56

関連する問題