🐹
PythonでHTMLからURLを抜き出す
HTMLコードからURLだけ抜き出したい
URLだけ抜き出したい時には正規表現を使いました。
URLの形を把握する
URLの形は、主に以下のようなものが多い。
・http://....
・https://...
別の形式が決まっていればそちらも検討する。
使用した正規表現
url_pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
解説
http --> httpがある(から始まる)
s? --> sは0回か1回繰り返す
:// --> ://がある
[] --> 次の文字集合
\w --> 任意の半角英数字か_アンダースコア
/:%#$&?()~.=+- --> \はエスケープ。/:%#$&?()~.=+-が含まれるということ
+ --> 直前(今回は[])を1回以上繰り返す
ざっくりコード
HTMLコードが1列に入ったデータを想定。
import pandas as pd
df = pd.read_csv('test.csv')
df['URL'] = '' # 抜き出したURLを入れる列を作成しておく
# 行数分ループする
for i in range(df.shape[0]):
pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
text = df.iloc[i,2]
url_list = re.findall(pattern, text)
df.iloc[i,3] = ', '.join(url_list) # 先ほど作成した「URL」列にカンマ区切りで格納
df = df.drop(['html_code'], axis=1) # コードの表示が要らない場合削除
df.to_csv('result.csv')
参考サイト
Discussion