2016-06-28 16 views
0

私は、一連のURLから特定の要素を掻くために、治療を使用して非常に簡単なスクレーパーを構築しています。しかし、私はこれを行うためにウェブサイトにログインする必要があり、私はスクレーパーのログイン部分を動かすことができません。治療 - マニュアルログイン

ウェブサイトに手動でログインして、スクレーパーに掻き取り作業をさせてもらえますか?

+1

これまでに何を試しましたか? [ログインの実行に関する文書](http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-request-userlogin)を読んだことがありますか? –

+0

はい、もちろんあります。しかし、FormRequestクラスはすべての隠し入力フィールドをうまく処理できないと思います。残りの部分はかなりストレートなので、一度だけ実行する必要があるため、手動ログインが最も効率的な方法です。 – OutOfTheBox

+0

しかし、私はFormRequestクラスがすべての非表示の入力フィールドをうまく処理しないと思います。なぜあなたはそう思いますか?問題を示すサンプル入力とテストコードがありますか?あなたが期待どおりに動作しない何かの証拠がなければ、あなたを助けるのは難しいです。ドキュメントでは、可能であれば(そして私は時々それを使っています)、ユースケースについては何か特別な、あるいはわかりにくいものがなければなりません。 –

答えて

0

あなたが求めていることを理解していますが、あなたは単に手動でログインすることはできません。あなたはそれにクッキーを注入する必要があります。

私はこれを行うには見る最良の方法は、ログインして、それがscrapyを養うためにクッキーを作成できるようにセレンを使用して、ここで方法ですされています。コードはここにあるいくつかの調整が必要な場合がありますが、これは一般的である

def get_cookies(self): 
    driver = webdriver.Firefox() 
    base_url = "http://www.example.com/login" 
    driver.get(base_url) 
    #Code to login 
    driver.find_element_by_name("username").send_keys("my_username") 
    driver.find_element_by_name("password").send_keys("my_password") 
    driver.find_element_by_name("submit").click() 
    #get the cookies created 
    cookies = driver.get_cookies() 
    driver.close() 
    return cookies 

def parse(self, response): 
    return Request(url="http://my_domain.com/", 
    cookies=self.get_cookies(), 
    callback=self.login) 

def login(self, response): 
    #You'll have the cookies here 

アイディア

+0

私の質問にお答えいただき、ありがとうございます。 最終的には、FormRequest.from_response()を使用してログインを動作させることができました。私はクッキーで何もする必要はなかった。 しかし、私のユースケースでは、スクレーパーを一度実行するだけで手動ログインがより効率的でした。 – OutOfTheBox