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

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

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

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

HTML

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

Q&A

1回答

5332閲覧

htmlの が付いた行からPython3でデータを取得したい

nsmt

総合スコア17

Python 3.x

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

HTML

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

0グッド

0クリップ

投稿2019/03/28 04:39

編集2019/03/28 15:43

前提・実現したいこと

Pythonで次の画像のhtmlのページからデータを取得しようとしております。
html
この画像の
" kristofff"
という部分の「kristofff」の部分を取得したいのですが、「 」が邪魔して上手く取得できません。


この「kristofff」という部分は文字列が変わる部分なので、例えば
" bob"
のようになっていたら「bob」をそのまま取得するようにプログラムを組みたいです。

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

Python3

1import requests, re 2 3url = "http://www.boiteajeux.net/jeux/agr/historique.php?id=3041220" 4 5history_res = requests.get(url) 6history_res.raise_for_status() 7 8player_regex = re.compile(r''' 9 <tr>.*? # 表の一番上のプレイヤー名の行から遡って直近の<tr> 10 (<th.*?>.*?</th>.*?){1} # 上記<tr>と下記プレイヤー名の間の<td></td>数 11 "&nbsp;kristofff" # プレイヤー名抽出 12 ''', re.VERBOSE | re.DOTALL) 13 14player_name = player_regex.search(history_res.text) 15print(player_name)

最後の
print(player_name)

Noneではなく、何か値を取得したことが分かるような結果を望んでいるのですが、
Noneをかえされてしまいます。

試したこと

Python3

1history_res.text.replace("&nbsp;", "")

replace()メソッドを用いて「 」を削除してから

Python3

1player_regex = re.compile(r''' 2 <tr>.*? # 表の一番上のプレイヤー名の行から遡って直近の<tr> 3 (<th.*?>.*?</th>.*?){1} # 上記<tr>と下記プレイヤー名の間の<td></td>数 4 "kristofff" # プレイヤー名抽出(上記の元のコードから&nbsp;をここで消してる) 5 ''', re.VERBOSE | re.DOTALL)

データの取得を試みましたが、
これもうまくいきませんでした。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

tiitoi

2019/03/28 04:47

正規表現の中にコメントが含まれてしまっていますが、転記した際のミスですか? ``` で囲まれた here ドキュメントの場合、そこに含まれる記号や文字はすべて含まれてしまいますが。
otn

2019/03/28 05:02

> 「&nbsp;」が邪魔して上手く取得できません。 どういう邪魔でしょうか? > 上手く取得できません。 どうなるのでしょうか? > player_regex = re.compile この正規表現は何の目的ですか?
nsmt

2019/03/28 15:41

>>tiitoi様 re.compile() 関数の第2引数に re.IGNORECASE を渡していますが、ここが間違っておりました。 正しくは re.IGNORECASE の代わりに re.VERBOSE を渡してコメントを入れております。 間違えてしまい申し訳ございません。 ※ re.VERBOSE の場合でも思い通りには動いてくれておりません。
guest

回答1

0

まえもって をスペースに置換しておけばよろしいかと。

投稿2019/03/28 04:49

y_waiwai

総合スコア87784

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

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

nsmt

2019/03/28 16:28

画像のhtmlのコードのResponseオブジェクトを url = "http://www.boiteajeux.net/jeux/agr/historique.php?id=3041220" history_res = requests.get(url) で取得し、更に history_res.text でResponseオブジェクトをテキスト形式で取得。 そして、 replaced_text = history_res.text.replace("&nbsp;", " ") player_regex = re.compile(r''' <tr>.*? (<th.*?>.*?</th>.*?){1} "\skristofff" ''', re.VERBOSE | re.DOTALL) player_name = player_regex.search(replaced_text) としましたが、望んでいるデータの取得はできませんでした。 .replace()メソッド以外に何か&nbsp;をスペースに置換する方法があるのでしょうか?
y_waiwai

2019/03/28 21:13

スペースに置換した結果どうなってるのか見てみたらどうですか? 望んでるデータ取得できないのはあなたのコードが原因なんでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問