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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4494閲覧

正規表現を使って文字抽出をしたもののエラーが発生しました。

chokokorone333

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

0クリップ

投稿2019/05/27 14:17

編集2019/05/29 08:33

やっていることとエラーメッセージ

PythonでrequestsとBeautifulSoup4を使ってwebスクレイピングをしています。
requestsのレスポンス内容をBS4で処理をしHTMLの中にある3つのcmn_cd=6cbedb4661fcd9876cfdaac86cf28f31を抽出するために正規表現を使って抽出しているのですがエラーがでます。

抽出しているHTMLスクレイプしたhtmlには以下のものが3つ含まれている。

html

1<button type="button" class="btn style1" name="yoyaku" onclick="location.href='./select_block.php?cmn_cd=6cbedb4661fcd9876cfdaac86cf28f31&ninzu=1&kamoku=1&doctor=1&mod=0'">文字</button>

メインプログラム

python

1def main(): 2 session = requests.Session() 3 4 res = session.post(url, data = payload , headers = headers , timeout = 3) 5 soup = BeautifulSoup(res.text , "lxml") 6 7 for button in soup.find_all('button', onclick=True): 8 match = re.search('cmn_cd=(\w+)', button['onclick']) 9 10 print(match.group(1))

エラーメッセージ

File

1print(match.group(1)) 2AttributeError: 'NoneType' object has no attribute 'group' 3

試したこと

python

1def main(): 2 soup = BeautifulSoup(url , "lxml") 3 for button in soup.find_all('button', onclick=True): 4 match = re.search('cmn_cd=(\w+)', button['onclick']) 5 print(match.group(1))

for文の中にprint(match.group(1))を入れると、抽出文字が3つ表示はされるもののエラーメッセージは変わりませんでした。

HK2030👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

検索対象文字を含まないbutton要素があるのではないでしょうか?
その場合は以下のようにif match:でチェックするとエラー回避できます。

Python

1from bs4 import BeautifulSoup 2import re 3 4text = """ 5<button type="button" class="btn style1" name="yoyaku" onclick="location.href='./select_block.php?cmn_cd=6cbedb4661fcd9876cfdaac86cf28f31&ninzu=1&kamoku=1&doctor=1&mod=0'">文字</button> 6<button type="button" class="btn style1" name="yoyaku" onclick="">文字</button> 7""" 8 9soup = BeautifulSoup(text , "lxml") 10 11for button in soup.find_all('button', onclick=True): 12 match = re.search('cmn_cd=(\w+)', button['onclick']) 13 if match: 14 print(match.group(1))

投稿2019/05/27 21:26

can110

総合スコア38262

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

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

chokokorone333

2019/05/28 03:55

対象文字を含まないbutton要素も幾つかあったため、re.searchで探し出そうとしていました。 cmn_cdが返ってくるhtmlに含まれていないことは無いため抽出できると考えていたのですが、対象文字を含んでない要素が含まれているとエラーが出るのでしょうか?
can110

2019/05/28 04:00

> 対象文字を含んでない要素が含まれているとエラーが出るのでしょうか? はい。具体的にはre.search(~)の結果としてNoneが返ります。
chokokorone333

2019/05/29 08:32

soupの中身を確認してみると4つの要素のうち確かに1つだけ対象文字を含んでいないbutton要素が確認できました。 どうにかその必要な文字1つだけを工夫して抽出できるように努力してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問