YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

aタグのリンクを新規タブで開くようにするPythonスクリプト

htmlのaタグのリンクを外部リンクで開くようにaタグを更新するpythonスクリプトを紹介します。

テキスト形式でhtmlを用意して、pythonスクリプトを実行すると自動でaタグの属性を更新してくれます。

aタグの属性の変更内容

次のようなデフォルト設定のaタグに属性を追加して、新規タブで開くように設定変更します。

<a href="リンクURL">リンク文字列<a>

下記のようにtarget属性rel属性を追加します。

<a href="リンクURL" target="_blank" rel="noopener noreferrer">リンク文字列</a>

aタグの内容は次のような記事を参考にしています。

aタグの属性変更pythonコード

次の処理を行うようなpythonコードを作成しています。

  1. <a href="リンクURL">を検索
  2. <a href="リンクURL" target="_blank" rel="noopener noreferrer">に置換

正規表現を使えば、1.と2.を同時に行うことができますね。

次のサンプルhtmlを例に置換用スクリプトを作成していきます。

sample_html = '''
<p>Google検索へのリンク</p>
<p><a href="https://www.google.com/">Google</a></p>
<p>Yahooへのリンク</p>
<p><a href="https://www.yahoo.co.jp/">Yahoo!</a></p>'''.replace("\n","")

まずは、<a href="リンクURL">にマッチする正規表現パターンを作成します。

import re
from pprint import pprint #結果の出力用
# 正規表現パターン
p = re.compile('''
                <a.+?    # <a にマッチ
                href="(https?.*?)" # href=URLにマッチ⇒URLはグループ(\1)として抽出
                .*?> # >にマッチ
                ''', re.VERBOSE)

# マッチの確認
p.search(sample_html)
# <re.Match object; span=(23, 57), match='<a href="https://www.google.com/">'>

p.findall(sample_html)
# ['https://www.google.com/', 'https://www.yahoo.co.jp/']

このとき、(https?.*?)の部分は、\1で置換時に参照できる点がポイントです。

続いて、このパターンを使用して、aタグに属性を追加するように置換しましょう。

  • sub("置換後の文字列", 置換される文字列全体)

これで、'置換される文字列全体'からパターンを検索して、'置換後の文字列'に置き換えできます。

res = p.sub('<a href="\\1" target="_blank" rel="noopener noreferrer">', sample_html)
pprint(res)
# ('<p>Google検索へのリンク(外部リンク)</p><p><a href="https://www.google.com/" '
#  'target="_blank" rel="noopener noreferrer">Google</a></p><p>内部リンク</p><p><a '
#  'href="https://www.yutaka-note.com/entry/data_analysis">内部リンク!</a></p>')

ここまでのコードをまとめると次のようになります。

import re
src_html = """
           ここにhtmlを入力
           """

p = re.compile(r'''
                <a.+?    # <a にマッチ
                href="(https?.*?)" # href=URLにマッチ⇒URLはグループ(\1)として抽出
                .*?>' # >にマッチ
                , re.VERBOSE''')

res = p.sub('<a href="\\1" target="_blank" rel="noopener noreferrer">', src_html)
res

【応用編】外部リンクのみaタグ変更

内部リンクの場合は、既存タブで開くようにすることも可能です。

正規表現のマッチ条件を変更して、内部リンクの場合は置換しないようにします。

次のように、URLのマッチ部分に否定先読みを埋め込みます。

  • 'href=("?!内部リンクのドメイン.*")"(https?.*?)"

次のサンプルhtmlで挙動を確認してみましょう。

sample_html = '''
<p>Google検索へのリンク(外部リンク)</p>
<p><a href="https://www.google.com/">Google</a></p>
<p>内部リンク</p>
<p><a href="https://www.yutaka-note.com/entry/data_analysis">内部リンク!</a></p>
'''.replace("\n","")

内部リンクのドメインは、このブログのhttps://www.yutaka-note.com/を指定します。

import re
p = re.compile('''
                <a.+?    # <a にマッチ
                href=
                (?!"https://www.yutaka-note.com/.*") # 否定先読みで内部リンク回避
                "(https?.*?)" # href=URLにマッチ⇒URLはグループ(\1)として抽出
                .*?> # >にマッチ
                ''', re.VERBOSE)

res = p.sub('<a href="\\1" target="_blank" rel="noopener noreferrer">', sample_html)
pprint(res)
# ('<p>Google検索へのリンク(外部リンク)</p><p><a href="https://www.google.com/" '
#  'target="_blank" rel="noopener noreferrer">Google</a></p><p>内部リンク</p><p><a '
#  'href="https://www.yutaka-note.com/entry/data_analysis">内部リンク!</a></p>')

内部リンクの方は、属性が追加されていないので既存タグで開かれます。

Pythonで作業を効率化する方法

今回はaタグに属性を追加して、リンクを新規タブで開くようにするPythonスクリプトを紹介しました。

pythonを使えば、簡単なスクリプトで作業を劇的に効率化することも可能です!

pythonの効率化関係で言えば、次の記事で紹介しているような本が自動化の本がおススメです。

≫【レビュー】退屈なことはPythonにやらせよう | 単純作業は自動化
名著「退屈なことはPythonにやらせよう 」をレビュー!単純作業を自動化して、自分が本当にしたいことのために時間を確保していこう!所要時間やできるようになったことを紹介!この本を参考にして作成した、自作自動化スクリプトも紹介しています!
www.yutaka-note.com/entry/python_jido
 
≫【レビュー】Python自動処理 全部入り。 | 即効性重視!Pythonによる自動化事例集!
今回は、Pythonの作業自動処理の解説本『Python自動処理全部入り』をレビュー!この本は、特定の作業に特化した即効性の重視の自動化解説本です。よくある作業から自動化しやすい作業を抽出して、それらの自動化を集中的に解説した本という印象です。本の中に自分のニーズに合った自動化処理が見つかれば、その日からすぐ使える事例集のような印象です。
www.yutaka-note.com/entry/python_jido_zenbu