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

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

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

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

Q&A

1回答

6090閲覧

url中の「&]が[&amp]になり、リンクを取得できません

hiroshi77

総合スコア12

Python

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

0グッド

0クリップ

投稿2021/05/30 22:35

編集2021/05/31 12:20

開発環境:jupyter lab

下記のurlを変数に代入すると「&」が「&amp」に変わってしまいます。
いくつか方法を試したのですが、上手くいかないので、ご教授いただけますと幸いです。

python

1url = "https://race.netkeiba.com/odds/index.html?type=b1&race_id=202105021201" 2print(url) 3# 結果 4#'https://race.netkeiba.com/odds/index.html?type=b1&race_id=202105021201'

試したこと➀ url を分割してつなげた

python

1url = "https://race.netkeiba.com/odds/index.html" + "?type=b1&race_id=202105021201" 2print(url) 3#結果 (変わらず) 4#"https://race.netkeiba.com/odds/index.html?type=b1&race_id=202105021201"

試したこと➁ &の前にバックスラッシュを付けた

python

1url = "h(ttps://race.netkeiba.com/odds/index.html?type=b1&race_id=202105021201" 2print(url) 3#結果(バックスラッシュが2つになった。ampの文字は消えなかった 4#'https://race.netkeiba.com/odds/index.html?type=b1\&race_id=202105021201'

試したこと➂ replace関数を使用して&ampを&に変換

x = "https://race.netkeiba.com/odds/index.html?type=b1&race_id=202105021201" print(x.replace("&amp","&")) #結果(;が2つになった) #'https://race.netkeiba.com/odds/index.html?type=b1&;race_id=202105021201'

イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/30 23:07 編集

x.replace("&amp","&") ⇒ x.replace("&","&") にすればいいのでは? もしくは、どこにどのように代入しているか不明ですが、可能であれば html エンコードされないようにできませんか? (& が html エンコードされると & になります)
quickquip

2021/05/30 23:38

「結果」と書いてあるものが、何をしてどうやって確認したものなのか? を想像するのが困難でした。
otn

2021/05/31 01:53

確認方法が間違っています。
hiroshi77

2021/05/31 12:22

皆様、ご回答ありがとうございます。確認方法を変えて、画像を添付いたしました。結果は変わらない状況です。
退会済みユーザー

退会済みユーザー

2021/05/31 12:55

print メソッドというのが何だか分かりませんが、追加で貼った画像を見る限り、引数の文字列内の & を & に html エンコードしているとしか思えないのですが。質問者さんの環境の特別仕様とか?
quickquip

2021/06/01 00:16

簡単には再現しそうにない、極めて環境に依存した問題に感じます。 OS,、Pythonのバージョン、可能ならインストールされている関連パッケージの全バージョン、使っているブラウザがなにか、あたりの情報が必要ではないかと思います。(それらを揃えてテストしても再現するかどうか? という微妙なラインかも) まずは、別のブラウザで試す、アドオンなどがない素に近いブラウザで試す、あたりもチャレンジしてはどうでしょうか。 ローカルで jupyter lab を動かしているのでなければ、別のマシンから接続を試すなどもありかと。
guest

回答1

0

Jupyterが文字列を表示するときに勝手に「これはURLだ」と判断してクリック可能なリンクを作成して表示することが原因のようですね。文字列urlの中の&は当然ながら&のままなので、Jupyterの表示を信じないことですね。私はJupyterを使っていないのでわかりませんが、print('x'+url)したらリンクへの変換は起こらないのではないかと思います。

投稿2021/05/31 12:36

itagagaki

総合スコア8402

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

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

hiroshi77

2021/06/01 14:13 編集

itagagakiさんの言われる通り、httpまたはhttpsでなくすることで、amp文字は消えました。 ただ、取得したいのはurlの状態なので、どうしたものかというところです。ちなみに、jupyter labではなく、jupyter notebookではampは表示されませんでした。 jupyter labとjupyter notebookにより違いが出るとは意外でした。
itagagaki

2021/06/01 14:51 編集

まだ飲み込めていないようですが、変数 url の文字列の内容は、あくまでも & は & です。 それを Jupyter が表示するときに「クリックできるリンクに変換して表示」しているだけです。 Jupyter が & とコンソールに表示してはいるけれども、変数 url の実際の中身は、あくまでも & は & のままです。つまり Jupyter は変数 url の内容をそのまま正しく表示しているのではなく、言ってしまえばウソを表示しているわけです。print('x'+url) を試してもらったのは、Jupyterがウソを表示するのをやめさせるためです。x に続いて、変数 url の本当の内容がそのまま表示されると思います。解決策として変数 url 自体に 'x' を付け足せということではありません。
itagagaki

2021/06/01 14:31

私はJupyterを使ったことが無いのでわかりませんが、jupyter labとjupyter notebookとで違うということは、もしかして「値を表示する際に、URL文字列ならクリック可能なリンクに変換して表示する」といったようなオプション設定があるのかもしれませんね。
hiroshi77

2021/06/05 00:29

ありがとうございます。 内容理解いたしました。ただ&に変わると正しいリンクではなく、逆にクリックすると該当ページに飛ばないので、何のための変換なのだろうと疑問を持ってしまいます。まずは設定ができる箇所がないか確認してみます。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問