ログインが必要なページとなっている様ですが
ログイン処理を行っているといった前提であれば以下でそれぞれが取得可能だと思います。
python
1 import requests
2 from bs4 import BeautifulSoup
3 import time
4
5 url = "https://input.medilink-study.com/detail.php?index={}"
6 for i in range ( 1 , 58 ) :
7 res = requests . get ( url . format ( i ) )
8 soup = BeautifulSoup ( res . content , 'html.parser' )
9 # お題と回答の取得
10 elements = soup . select ( '.heading' )
11 title = elements [ 0 ] . string
12 answer = elements [ 1 ] . text
13
14 # 解説の取得
15 elements2 = soup . select ( "#detail > div.bg.bg-theme.border.type-detail > div > div > article > div:nth-child(5) > ul" )
16 commentaries = [ cmt . text for cmt in elements2 ]
17 time . sleep ( 1 )
追記
上記ではログインしている事を前提で~と回答を致しましたが
恐らくは質問者様はスクレイピングの際にログイン処理は行っていないでしょう。
ログイン処理については恐らくはseleniumを使用した方が簡易的でしょう。
となると、各項の取得もrequestsを使用するのではなくselenium上で取得を行い
driver.page_source
でソースを取得しBSで各要素を出力するというのがベストな方法だと思います。
python
1 from selenium import webdriver
2 from selenium . webdriver . chrome . options import Options
3 from bs4 import BeautifulSoup
4 import time
5
6 idpw = ( 'ID' , 'PASSWORD' )
7 url = 'https://input.medilink-study.com/index.php'
8 target = "https://input.medilink-study.com/detail.php?index={}"
9
10
11 options = Options ( )
12 options . add_argument ( '--headless' ) # ←コメントアウトでヘッドレスモード解除
13 driver = webdriver . Chrome ( chrome_options = options )
14 driver . implicitly_wait ( 10 )
15 driver . get ( url )
16
17 # ログイン処理
18 login_button = driver . find_element_by_class_name ( 'icon-login' ) . click ( )
19 driver . find_element_by_class_name ( 'cmn-form-userid' ) . send_keys ( idpw [ 0 ] )
20 driver . find_element_by_class_name ( 'cmn-form-password' ) . send_keys ( idpw [ 1 ] )
21 driver . find_element_by_class_name ( 'cmn-form-login-button' ) . click ( )
22 time . sleep ( 5 )
23
24
25 for i in range ( 1 , 58 ) :
26 driver . get ( target . format ( i ) )
27 html = driver . page_source
28 soup = BeautifulSoup ( html , 'html.parser' )
29
30 # お題と回答の取得
31 elements = soup . select ( '.heading' )
32 title = elements [ 0 ] . string
33 answer = elements [ 1 ] . text
34
35 # 解説の取得
36 elements2 = soup . select ( "#detail > div.bg.bg-theme.border.type-detail > div > div > article > div:nth-child(5) > ul > li" )
37 commentaries = { }
38 if len ( elements2 ) != 0 :
39 for cmt in elements2 :
40 key , value = cmt . select ( 'div' )
41 key , value = key . text , value . text
42 commentaries [ key ] = value
43 # 解説要素がなかった場合
44 else :
45 commentaries = 'comment was none'
46
47 print ( title , answer )
48 print ( commentaries )
49 print ( '=' * 50 )
50 time . sleep ( 1 )