Pythonで日経新聞のサイトにログインしようとした場合にうまくいかないため質問させていただきます。
問題点
ステータスコードが200で正常になっているため、ログインが成功したかと思ったが、、
soupをprintすると「お探しのページは削除されたか、一時的にご利用できない可能性があります。」という
ページを取得する。
(正常にログインできた場合はログイン後のサイトのトップページにいきます。)
試したこと
https://qiita.com/fake_engineer_00/items/82c3f63ccb6416fd5fca
ことサイトを参考にcontrolParamKeyというnameのvalueをパラメータに追加して、cookiesを取得して
postしたが上手くいきませんでした。
Python
1import time, requests, urllib 2from bs4 import BeautifulSoup 3 4#日経のログインの情報を指定 5nikkei_url = 'https://www.nikkei.com/' 6#idとパス 7user_id, password = ('hoge', 'hogehoge') 8 9def main(): 10 #ページHTMLを取得 11 html = requests.get(nikkei_url).text 12 #解析してログイン画面を取得 13 login_url = login(html,'ログイン') 14 #ログインのためのcidを取得 15 cid_url = get_cid(login_url) 16 #ログイン 17 login_download(cid_url) 18 19def login(html, label): 20 #BSでHTMLを解析 21 soup = BeautifulSoup(html, 'html5lib') 22 #a要素を全部調べてラベルに一致するURLを返す 23 for a in soup.find_all('a'): 24 if label in a.text: #ラベルに含むか確認 25 url = urllib.parse.urljoin(nikkei_url, a['href']) 26 print('url=',url) 27 return url 28 #見つからなかった場合 29 print(label + 'が見つかりませんでした。') 30 quit() 31 32def get_cid(url): 33 #ページHTMLを取得 34 html = requests.get(url).text 35 #解析 36 bs = BeautifulSoup(html, 'html.parser') 37 #linkPwクラスを取得→その中のaタグを検索→hrefを取得→その中から最後の数字を取得 38 linkPw = bs.find('div', class_='linkPw') 39 a_tag = linkPw.find('a') 40 href = a_tag.get('href') 41 cid = href[-7:] 42 cid_url = 'https://id.nikkei.com/lounge/nl/connect/page/LA7010.seam?cid=' + str(cid) 43 return cid_url 44 45def login_download(cid_url): 46 #リクエストでセッション開始 47 session = requests.Session() 48 #ログインフォームを送信 49 res = session.post(cid_url, data=login_data) 50 content_type_encoding = res.encoding if res.encoding != 'ISO-8859-1' else None 51 soup = BeautifulSoup(res.content, 'html.parser', from_encoding=content_type_encoding) 52 print(res.status_code) 53 #待機 54 time.sleep(1) 55 print(soup) 56 57 58if __name__ == '__main__': 59 main()
あなたの回答
tips
プレビュー