Pythonを使ってウェブサイトにログインし、コンテンツを取得する方法

今日、ChatGPTにいろいろ教わりながら作ったpythonコードを記事にします。
せっかくだしね。実物とはちょっと変えています。機密保持のために。

Pythonを使ってウェブサイトにログインし、指定したページのコンテンツを取得するコードです。requestsライブラリとBeautifulSoupを使用して、セッション管理とHTML解析を行います。

必要なライブラリのインストール

まずは、必要なライブラリをインストール

pip install requests beautifulsoup4

コードの説明

コードの中身はこんな感じです

import requests
from bs4 import BeautifulSoup

def login_and_fetch_content(login_url, target_url, credentials):
    # セッションを開始して、リクエストを管理
    with requests.Session() as session:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        
        # ログインページにGETリクエストを送信してクッキーを取得
        session.get(login_url, headers=headers)
        
        # ログインページにPOSTリクエストを送信してログイン
        login_response = session.post(login_url, data=credentials, headers=headers)
        
        # ログインが成功したか確認
        if login_response.status_code == 200:
            print("Login response preview:", login_response.text[:500])  # 最初の500文字のみ表示
            
            # ログイン成功の確認
            if "Logout" in login_response.text or "Dashboard" in login_response.text:
                print("Login successful")
                
                # ターゲットページからコンテンツを取得
                response = session.get(target_url, headers=headers)
                if response.status_code == 200:
                    print(f"Successfully fetched the content from {target_url}")
                    return response.text
                else:
                    print(f"Failed to fetch the content. Status code: {response.status_code}")
                    return None
            else:
                print("Login failed: No expected text found in response")
                return None
        else:
            print(f"Failed to log in. Status code: {login_response.status_code}")
            return None

def main():
    # ログインページとターゲットページのURL
    login_url = 'http://sample.database.com/index.php'
    target_url = 'http://sample.database.com/index.php?s=idx&prod=PPAP'
    
    # ログインに必要な認証情報
    credentials = {
        'user_name': 'user_name',
        'password': 'password',
    }

    # ログインしてコンテンツを取得
    html_content = login_and_fetch_content(login_url, target_url, credentials)
    if html_content:
        # 取得したHTMLコンテンツを解析
        soup = BeautifulSoup(html_content, 'html.parser')
        print(soup.prettify()[:500])  # 取得したコンテンツの最初の部分を表示

if __name__ == '__main__':
    main()

コードの詳細説明

ライブラリのインポート

requests: HTTPリクエストを送信するためのライブラリ
BeautifulSoup: HTMLやXMLファイルを解析するためのライブラリ

login_and_fetch_content関数

login_url: ログインページのURL
target_url: ログイン後にアクセスするターゲットページのURL
credentials: ログインに必要な認証情報(ユーザー名とパスワード)

セッション管理

requests.Session(): セッションを開始して、同じセッション内でのリクエストを管理
session.get(login_url): ログインページにGETリクエストを送信してクッキーを取得
session.post(login_url, data=credentials): 認証情報を送信してログイン

ログイン確認

ログイン後のレスポンスに「Logout」または「Dashboard」が含まれているか確認
成功した場合、ターゲットページにアクセスしてコンテンツを取得

HTML解析

BeautifulSoupを使用して取得したHTMLコンテンツを解析し、見やすい形式で表示

こんなところでしょうかね

コメント

タイトルとURLをコピーしました