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

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

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

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

Q&A

解決済

1回答

1838閲覧

PythonのBeautifulsoupにおいてのAttributeErrorの解決方法

magui

総合スコア2

Beautiful Soup

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Python

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

0グッド

1クリップ

投稿2020/06/08 14:01

前提・実現したいこと

PythonのBeautifulsoupモジュールを使ってTwitterのAuth Tokenを取得したいのですが上手くいきません。

発生している問題・エラーメッセージ

AttributeError: 'NoneType' object has no attribute 'get'

該当のソースコード

Python

1auth_token = soup.find(attrs={'name': 'authenticity_token'}).get('value')

試したこと

調べましたがよく分かりませんでした…

補足情報(FW/ツールのバージョンなど)

Ubuntu 20.04
Python3
Beautifulsoup4

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1auth_token = soup.find('input', {'name':'authenticity_token'})['value']

Python

1auth_token = soup.find('input', {'name': 'authenticity_token'}).get('value')

で試してみてください。

投稿2020/06/08 14:29

Mashiro

総合スコア654

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

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

magui

2020/06/09 13:56

ご指摘頂いた2つ目のコードの場合、同様のエラーが発生しました。 1つ目のコードに書き換えると Traceback (most recent call last): File "tweet2.py", line 94, in <module> TwiTweet.tweet() File "tweet2.py", line 49, in tweet auth_token = soup.find('input', {'name':'authenticity_token'})['value'] TypeError: 'NoneType' object is not subscriptable というエラーが出ました。 型のエラーの様ですが、何か解決方法はありますでしょうか?
Mashiro

2020/06/10 04:44

よくよくテストしてみたところ、 soup.find('input', {'name':'authenticity_token'})する段階でNone担っていて、authenticity_tokenがnameになっているinputが見つかってないです。 どうも、requestでTwitterのページをgetした段階でTwitter側で蹴られてるみたいですね。 おそらくsoupする前って以下のようなコードだと思うんですが、 s = requests.Session() r = s.get('https://twitter.com/?lang=ja') これのrをprint(r.text.encode('utf-8'))して、 結果をhtmlファイルに保存して開いてみるとわかります。 また、Twitterの規約を覗いてみると以下の事が書かれています。 "access or search or attempt to access or search the Services by any means (automated or otherwise) other than through our currently available, published interfaces " おそらく上記の規約に変更した際にsoupで抽出できなくなったのではないかと思います。
magui

2020/06/10 14:41

なるほど。5月下旬にauthenticity_token値のみを取得するプログラムを作成した際はちゃんと動作しており、今回ツイートまでできるよう作り変えたところ動かなくなった為不思議に思っておりました。 再度検証してみると、以前上手くいっていたプログラムでも同様のエラーを吐いたので仕様変更で間違い無さそうです。(かなり直近で行われた…?)また別の方法を検討したいと思います。 丁寧に回答して頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問