@Shiken_minoyashiki

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python3を使用したログインが必要なサイトでのスクレイピングについて

解決したいこと

Python3のrequestsを使用してログインが必要なサイトのスクレイピングを行いたい。

発生している問題・エラー

ログインが必要なサイトからのスクレイピングについて、
色々なサイトでやり方が記載されているのですが、
ajaxを使用したログイン方法についてpythonにどのように落とし込めば良いのかわからないため、質問させていただきます。

スクレイピングを行いたいサイトの検証画面を確認すると、
ログインボタンの押下時に「ajaxLogin()」を呼び出しており、
その中で下記の処理を行っています。

  function ajaxLogin() {
    var _loginUser = document.ajaxLoginForm.loginUser.value;
    var _loginPass = document.ajaxLoginForm.loginPass.value;
    var _site = document.ajaxLoginForm.site.value;
    var _webCookie = document.ajaxLoginForm.webCookie.value;
    var _errMsgFlg = document.ajaxLoginForm.errMsgFlg.value;
    var _data = {site:_site, loginUser:_loginUser, loginPass:_loginPass, webCookie:_webCookie, errMsgFlg:_errMsgFlg};

    $.ajax({
      url: "https://site.com/mob/form/ajaxLogin.php",
      type: "POST",
      cache: false,
      async: false,
      dataType: "script",
      data: _data,
      error: function() {
        $(".p-signin__alert").html("<span style='color: #ff0000;'>通信に失敗しました。</span>");
      },
      success: function() {
          location.href="/mob/index.php?site=RIE&ima=0150&time=" + Math.round(new Date().getTime() / 1000);
      }
    });

自分で試したこと

やり方が分からなかったため、ネットの情報を参考に
以下のような記述を行いました。

tes_url = "https://site.com/mob/form/ajaxLogin.php"

data = {"site":site, "loginUser":user, "loginPass":password, "webCookie":"", "errMsgFlg":"ON"}

ses = requests.session()

res = ses.post(tes_url,data)

print(res.text)

上記で実行を行うと、ユーザー情報が返ってくるのですが、ログイン後のサイトをスクレイピングするためには、どのようにすればよいか教えていただけないでしょうか。

0 likes

1Answer

requestsじゃない方が良いです。ブラウザに限りなく近い動きをするseleniumやpuppeteerなどを使うと良いと思います。それでもIP情報やランダムの処理など人間に近い動きを作り込まないとプラットフォームからスパム認定されますのでお気をつけて。

0Like

Your answer might help someone💌