Python
スクレイピング

Twitter ログインのウェブサイトをスクレイピングする

Twitter などの OAuth 認証でログインするウェブサイトのスクレイピングをするときってどうすればいいんだっけと思ったのでメモ。

  1. まず該当ウェブサイトの Twitter 認証用ページへ行く
  2. Twitter にリダイレクト
  3. 認証後, Callback URL に遷移

この流れの通り実装してあげればよい。

# initialize
import requests
from bs4 import BeautifulSoup
session = requests.Session()
# login with twitter
redirect_from = "https://*****.***/auth/twitter"
res = session.get(redirect_from)
soup = BeautifulSoup(res.text.encode(res.encoding), 'lxml')
oauth_token = soup.find(attrs={'id':'oauth_token'}).get('value')
authenticity_token = soup.find(attrs={'name':'authenticity_token'}).get('value')
redirect_after_login = soup.find(attrs={'name':'redirect_after_login'}).get('value')

twitter_id = "********"
twitter_password = "********"
dataset = {
               'authenticity_token': authenticity_token,
               'redirect_after_login': redirect_after_login,
               'oauth_token': oauth_token,
               'session[username_or_email]': twitter_id,
               'session[password]': twitter_password
          }

twitter_oauth_url = "https://twitter.com/oauth/authorize"
login_res = session.post(twitter_oauth_url, data=dataset)
login_soup = BeautifulSoup(login_res.text.encode(login_res.encoding), 'lxml')
redirect_to = login_soup.select('.maintain-context')[0]['href']
session.get(redirect_to)

これで認証された状態が得られます。あとはよしなに。

References