1
私はyelpを使ってログインしてウェブサイトを削り取ろうとしています。理解を深めるための最初の質問:アイデアを得るためにいくつかのチュートリアルをたどり、CSRFトークンで辞書を作成することに気付きましたが、yelpログインサイトを擦ったときに6つのトークンが見つかりました。私は辞書に重複キーを持つことができないことを知っています。このチュートリアルでは、最後のトークンで終わるので、この重複/間違った辞書を使用していますか?CSRFトークンを複数のトークンで転記しますか?
第2に、複数のトークンがある場合はどちらを使用しますか?または、それらのすべてをどのように使用していますか?私はログインが正常に動作するように思えず、BeautifulSoupとRequestsのドキュメントを読んで、最後の夜にStackを洗った。以下のコード。 ありがとうございます。
s = requests.session()
login = s.get('https://www.yelp.com/login')
soup = BeautifulSoup(login.text, 'html.parser')
tokenList = soup.find_all(type = 'hidden', attrs={"name": "csrftok"})
c = login.cookies #Just peeked into cookies to see if there is a token
print(c)
keys = [x.attrs["name"] for x in tokenList]
values = [x.attrs["value"] for x in tokenList]
#If I print these two lists, I get 6 keys of the "csrftok" String, and 6
#different keys.
email = "my email"
password = "my password"
#I tried creating a dictionary with zip of all the tokens, etc. This
#is an attempt just using the first key and value I find.
d = {'email': email, 'password': password, keys[0]: values[0]}
response = s.post('https://www.yelp.com/login', data = d)
print(response.url)
「ヘッダー」を追加するのを忘れました。すでに修正済み。それを確認する方法はありません。しかし、私に教えてください。 – SIM
これで、有効なステータス応答が得られるようになりましたが、response.urlを印刷すると、ログイン後に新しいURLが返されるはずです。私はそれがログインしているとは思わない、さもなければ私はテキストで私の名前を検索し、ブール値を返すことができるはずですか?また、私はnewajaxがあなたの場所であると仮定しているので、自分のコードから削除する必要がありますか? –
応答がjsonにあると想定されるので、 'response.text'または' response.json() 'を表示するときに何を確認しましたか?私はチェックアウトできません。 Btw、私は 'chrome/firefox developer tools'から派生したリクエストパラメータを設定すると仮定します。私が推測したやり方を正確に行なわなければ、上記のパラメータは正しいはずです。 – SIM