質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1210閲覧

スクレイピングでURLパラメータが変更される場合のログイン

nobu0000

総合スコア0

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/12/26 06:40

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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問