質問: soup.find_all('table', class_='tbl-data-01 print-page-break') print(tables) ``` 出力すると、1件目のリンク先で下記のように「ログインをすると表示される」と出てしまいます ``` 電話番号 ログインをすると表示されます FAX番号 ログインをすると表示されます ``` リンク先に移動する時に`requests`をしているのが、ログインのセッションと別のものになってしまう(?)のが原因なんじゃないかと思っています。 ただ、対処の方法がわかりません。 参考になるサイトも調べてみましたが見つけることができませんでした。 よろしくお願いします。 ■バージョン等 python 3.8.1 vscode 1.48.2
回答: ログイン時のURLとパラメータが間違えている様です。 また慣例としてはページのレスポンスに対しresやrと変数を付ける事がよく見られますが セッションに対しては[ログイン情報を保った状態でアクセスしている]と言う事がわかりやすい様に 変数名はresではなくsesと定義してあげる事をおすすめします。 以下のコードでログインした状態でのページの取得ができているかと思います。 print(soup)としてログイン後の情報が表示されているかお確かめください。 マイページやログアウトといった項目が表示されていれば正常にログインができている証拠です。 ``` login_url = 'https://ja.nc-net.or.jp/login/' login_data = { 'txtAccount': login_user, 'txtPassword': pwd } ses = requests.Session() login = ses.post(login_url, data=login_data) page_url = 'https://ja.nc-net.or.jp/search/equipment/?cl[]=1' soup = BeautifulSoup(ses.get(page_url).content, 'lxml') print(soup) ``` あとはsk-sora--ypiさんが回答している様に ログイン情報を保持した状態でスクレイピングを行いたいならば for文内でのリクエストを行う際にもsesとしてスクレイピングを行うと良いでしょう。 sesを使用せず普通にrequests.getとしてしまうとログイン情報が切れてしまいます。