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

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

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

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

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

HTML

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

Q&A

1回答

1421閲覧

urlwatch で HTML からリンクとタイトルのみ抽出したい

退会済みユーザー

退会済みユーザー

総合スコア0

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Python

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

HTML

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

0グッド

0クリップ

投稿2021/07/03 13:17

編集2021/07/03 14:07

urlwatch について

特定サイトの Web ページを監視し、前回の取得した情報との差分を抽出できる Python 製のツールです。
https://github.com/thp/urlwatch
https://urlwatch.readthedocs.io/en/latest/index.html

やりたいこと

Yahoo の速報ニュースにおいて、タイトルと URL リンクが更新した際に検知・表示させたいと考えています。

試したこと

設定ファイル(urls.yaml)を次のように設定しました。

urlwatch

1kind: url 2name: Yahoo 3url: https://news.yahoo.co.jp/flash 4filter: 5 - xpath: //*[@id="contentsWrap"]/div[1]/div[2]/div/a

すると結果は以下のように HTML タグも表示されてしまいます。

-<a href="https://news.yahoo.co.jp/articles/eb49343e3993ba181b1f9d79dd8605a5bce89569" data-ylk="rsec:f_card1;slk:title;pos:1;" class="sc-evWYkj jcqJoz"><p class="sc-kbGplQ gtktrM">最年少防衛・九段昇段の藤井聡太棋聖「一人前になったという意識はないです」「完璧に指せたものは一局もない」</p> -<div class="sc-exdmVY feOeGK"> -<span class="sc-idjmjb igXEah">ABEMA TIMES</span><time class="sc-fHlXLc bpPQMq">9分前</time> +<a href=https://news.yahoo.co.jp/articles/eb49343e3993ba181b1f9d79dd8605a5bce89569 data-ylk=rsec:f_card1;slk:title;pos:1; class=sc-evWYkj jcqJoz><p class=sc-kbGplQ gtktrM>最年少防衛・九段昇段の藤井聡太棋聖「一人前になったという意識はないです」「完璧に指せたものは一局もない」</p> +<div class=sc-exdmVY feOeGK> +<span class=sc-idjmjb igXEah>ABEMA TIMES</span><time class=sc-fHlXLc bpPQMq>13分前</time> </div></a>

調査したこと

ドキュメントを確認したところ、Filter コマンドを使用することで、必要な情報のみ抽出できそうに見えます。
re.sub を使用して、正規表現で実現できるのでは考えておりますが、どのように書けばよいかわからない状況です。

ご教示頂きたいこと

理想としては、以下のようにタイトルとリンクのみ抽出できればと考えております。
最年少防衛・九段昇段の藤井聡太棋聖「一人前になったという意識はないです」「完璧に指せたものは一局もない
https://news.yahoo.co.jp/articles/eb49343e3993ba181b1f9d79dd8605a5bce89569

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

re.subだけという条件で、この文字列だけを処理すれば良いのであれば以下です。

python

1>>> txt ='<a href="https://news.yahoo.co.jp/articles/6dffae9dc386171cefa28f3cf5945d75a1e6550d" data-ylk="rsec:f_card1;slk:title;pos:1;" class="sc-evWYkj jcqJoz" data-rapid_p="26"><p class="sc-kbGplQ gtktrM">【第92期ヒューリック杯棋聖戦】 「カリスマ性感じる」 藤井棋聖の師匠杉本八段</p><div class="sc-exdmVY feOeGK"><span class="sc-idjmjb igXEah">産経新聞</span><time class="sc-fHlXLc bpPQMq">14分前</time></div></a>' 2>>> import re 3>>> print(re.sub(r'<span.*$|<[^>]*>', '', txt)) 4【第92期ヒューリック杯棋聖戦】「カリスマ性感じる」 藤井棋聖の師匠杉本八段 5>>> print(re.sub('.*href="|".*$', '',txt)) 6https://news.yahoo.co.jp/articles/6dffae9dc386171cefa28f3cf5945d75a1e6550d

これでは汎用性がないので、普通はBeautifulSoupを使って以下のようにするでしょう。

python

1>>> from bs4 import BeautifulSoup 2>>> soup = BeautifulSoup(txt) 3>>> print(soup.find('p').text) 4【第92期ヒューリック杯棋聖戦】「カリスマ性感じる」 藤井棋聖の師匠杉本八段 5>>> print(soup.find('a').get('href')) 6https://news.yahoo.co.jp/articles/6dffae9dc386171cefa28f3cf5945d75a1e6550d

投稿2021/07/03 14:01

編集2021/07/03 14:05
ppaul

総合スコア24670

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

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

退会済みユーザー

退会済みユーザー

2021/07/03 14:05

ご回答頂き誠にありがとうございます。 申し訳ございません。 説明が不十分でしたので、加筆修正させて頂きました。 ご回答頂いた内容を参考に試してみます。
退会済みユーザー

退会済みユーザー

2021/07/03 14:25 編集

頂いたご回答を参考に Filter を次のとおり設定しました。 ''' kind: url name: Yahoo url: https://news.yahoo.co.jp/flash filter: - xpath: //*[@id="contentsWrap"]/div[1]/div[2]/div/a - re.sub: (r'<span.*$|<[^>]*>', '', txt) filter: - xpath: //*[@id="contentsWrap"]/div[1]/div[2]/div/a - re.sub: ('.*href="|".*$', '',txt) ''' 結果は以下のような状況でした。 -<a href="https://news.yahoo.co.jp/articles/9b0747f8a07adea3425885bc17fd8fc9db4105d0" data-ylk="rsec:f_card1;slk:title;pos:1;" class="sc-evWYkj jcqJoz"><p class="sc-kbGplQ gtktrM">「約4分で最高高度約100キロの宇宙空間へ到達」IST社のロケット打ち上げ成功 大樹町 </p> +<a href="https://news.yahoo.co.jp/articles/d4fc7be09baee6e8a2dfb909266e81f6e6a28f70" data-ylk="rsec:f_card1;slk:title;pos:1;" class="sc-evWYkj jcqJoz"><p class="sc-kbGplQ gtktrM">堀江貴文氏「正直、機体の動作はパーフェクト」 インターステラテクノロジズ「ねじのロケット」が同社2度目の「宇宙空間到達」</p> <div class="sc-exdmVY feOeGK"> -<span class="sc-idjmjb igXEah">HTB北海道ニュース</span><time class="sc-fHlXLc bpPQMq">20分前</time> +<span class="sc-idjmjb igXEah">ITmedia ビジネスオンライン</span><time class="sc-fHlXLc bpPQMq">たった今</time> </div></a> もし、他によい案があればご教示いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問