私は、一連のURLから特定の要素を掻くために、治療を使用して非常に簡単なスクレーパーを構築しています。しかし、私はこれを行うためにウェブサイトにログインする必要があり、私はスクレーパーのログイン部分を動かすことができません。治療 - マニュアルログイン
ウェブサイトに手動でログインして、スクレーパーに掻き取り作業をさせてもらえますか?
私は、一連のURLから特定の要素を掻くために、治療を使用して非常に簡単なスクレーパーを構築しています。しかし、私はこれを行うためにウェブサイトにログインする必要があり、私はスクレーパーのログイン部分を動かすことができません。治療 - マニュアルログイン
ウェブサイトに手動でログインして、スクレーパーに掻き取り作業をさせてもらえますか?
あなたが求めていることを理解していますが、あなたは単に手動でログインすることはできません。あなたはそれにクッキーを注入する必要があります。
私はこれを行うには見る最良の方法は、ログインして、それが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
アイディア
私の質問にお答えいただき、ありがとうございます。 最終的には、FormRequest.from_response()を使用してログインを動作させることができました。私はクッキーで何もする必要はなかった。 しかし、私のユースケースでは、スクレーパーを一度実行するだけで手動ログインがより効率的でした。 – OutOfTheBox
これまでに何を試しましたか? [ログインの実行に関する文書](http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-request-userlogin)を読んだことがありますか? –
はい、もちろんあります。しかし、FormRequestクラスはすべての隠し入力フィールドをうまく処理できないと思います。残りの部分はかなりストレートなので、一度だけ実行する必要があるため、手動ログインが最も効率的な方法です。 – OutOfTheBox
しかし、私はFormRequestクラスがすべての非表示の入力フィールドをうまく処理しないと思います。なぜあなたはそう思いますか?問題を示すサンプル入力とテストコードがありますか?あなたが期待どおりに動作しない何かの証拠がなければ、あなたを助けるのは難しいです。ドキュメントでは、可能であれば(そして私は時々それを使っています)、ユースケースについては何か特別な、あるいはわかりにくいものがなければなりません。 –