すべてのリンクタグのhref属性を絶対URLに変換して表示させてみましょう。

Python「すべてのリンクタグのhref属性を絶対URLで表示する方法」

前回はすべてのリンクタグのhref属性を取り出す方法を学びました。

そこでは下記のように、2つあったリンクタグの内、一つはそのままアクセスできるURLとしての「絶対URL」、もう一つは「このページから見てどこにあるか」という「相対URL」でした。

「絶対URL」はそのままURLとして使えますが、「相対URL」はそのままでは使えません。

そこで今回は「相対URL」を「絶対URL」に変換する方法を学びましょう。

Python_sample2.html HTML <!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Python すべてのタグを探して表示する</title>
</head>
<body>
<div id=”chapter1″>
<h2>ステップ1 プログラミング</h2>
<ol>
<li>HTML</li>
<li>CSS</li>
<li>Javascript</li>
</ol>
</div>
<div id=”chapter2″>
<h2>ステップ2 プログラミング</h2>
<ol>
<li>Vue.js</li>
<li>Jquery</li>
<li>Python</li>
</ol>
</div>
<a href=”http://www.roadtoupload.com”>チャレンジ プログラミング</a><br>
<a href=”../Python一年生/Python1年生_17.html”>画像ファイルから数字を予測するプログラムを作る</a>
<br>
<img src=”IMG_20201024_160706.jpg” width=”200px” height=”200px”>
<img src=”IMG_20201108_133625.jpg” width=”200px” height=”200px”>
<img src=”IMG_20201031_114146.jpg” width=”200px” height=”200px”>
</body>
</html>

完成はこんな感じです。


すべてのリンクタグのhref属性を絶対URLに変換して表示させてみましょう。

変換するには「urllibライブラリ」の「parse.urljoin(ベースURL, 調べるURL)」を使います。

ベースURLとは、どのページから見たURLなのかを意味します。

調べるURLが絶対URLなら「そのままのURL」を、相対URLなら「ベースURLと連結させた絶対URL」を返します。

では、早速urllibをimportして、URLの変換処理をしてみましょう。


import requests
from bs4 import BeautifulSoup
import urllib
load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample2.html”
html = requests.get(load_url)
soup = BeautifulSoup(html.content, “html.parser”)
for element in soup.find_all(“a”):
    print(element.text)
    url = element.get(“href”)
    link_url = urllib.parse.urljoin(load_url, url)
    print(link_url)

解説

import requests事前にコマンドプロンプトでインストールしたインターネットにアクセス命令する外部ライブラリ「requests」、これをimportします。
from bs4 import BeautifulSoup事前にコマンドプロンプトでインストールしたHTMLを解析する外部ライブラリ「BeautifulSoup」、これが入っているbs4というパッケージからBeautifulSoupをimport
import urllib相対URLを絶対URLに変換するurllibライブラリをimport
load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample2.html”変数load_urlに解析するWEBページアドレスを代入
html = requests.get(load_url)変数htmlにネット上のHTMLファイルを読み込む命令のrequests.get(load_url)を代入します。
soup = BeautifulSoup(html.content, “html.parser”)変数soupにBeautifulSoupを使ったHTML解析の命令を代入します。
for element in soup.find_all(“a”):リストから1つずつ取り出すためfor文を使用し、すべてのaタグを探しリストで返すfind_all(”a”)とします。
print(element.text)取得した文字列データを表示します。
url = element.get(“href”)href属性を取得し、それを変数urlとします。
link_url = urllib.parse.urljoin(load_url, url)相対URLを絶対URLに変換する命令をします。それを変数link_urlとします。
print(link_url)取得したデータを表示します。

実行結果

(../Python一年生/Python1年生_17.html)という相対リンクであったのが、絶対リンクに変換されて表示できました。



それでは、取り出したものでファイルを作成し、それに書き込むプログラムを作ってみましょう。

import requests
from bs4 import BeautifulSoup
import urllib

load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample2.html”
html = requests.get(load_url)
soup = BeautifulSoup(html.content, “html.parser”)

filename = “pickuplink.txt”
with open(filename, “w”)as f:

for element in soup.find_all(“a”):
    print(element.text)
    url = element.get(“href”)
    link_url = urllib.parse.urljoin(load_url, url)
    print(link_url)

f.write(element.text+”\n”)
f.write(link_url+”\n”)
f.write(“\n”)

実行結果

うまくファイルに書き込めました。

尚、改行コードがないと全部つながって見にくくなってしまうので、「+”\n”」を使用して改行しています。

*尚、ここではバージョン「Python 3.10.1」を使用しています。

この本から引用、参考に学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが2,000円程ならコスパよく、買っておいてよかったと満足してます。


わからないことはプロフェッショナルから学ぶのが一番

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。