ライバルサイトの調査、作成したブログのリンク状況など、張っているリンクの一覧がほしいと思うことがあると思います。それを実現するため、Pythonでリンク一覧を取得するサンプルプログラムを作成してみた。
実際のソースコードは、記事の後半で公開します。
Pythonでリンク一覧を取得するプログラム
プログラムの流れ
やっていることはざっくり以下の通りです。
(1)コマンドラインからURLを取得する
(2)入力したURLにアクセスしてhtmlデータをダウンロードする
(3)htmlデータを解析する
(4)(3)のデータから「href」部分を取得してリンク(URL)を作成(csv書き出し用にメモリー上に保存しておく)する
(5)(4)で作成したリストをcsvに書き出します。
プログラムを動かす上で必要になるもの
プログラムを動かすとき以下のものがインストールされている必要があります。
・Python3(環境設定も含む)
・BeautifulSoup
・urlparse
ソースコード
実際のソースコードを記載します。
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
from urllib.parse import urlparse
from datetime import datetime
import csv
import sys
import urllib.request as req
u"""
指定したWEBサイトのリンクリスト取得ツール
結果はCSVファイル(ファイル名:linkList_日時.csv」)に出力します。
第1引数 調べる階層 最小1より(現在は未実装)
第2引数 調べるサイトのURL(ダブルクフォーテーションで括る)
"""
LinkColumnName = ['no', 'リンク名','URL']
def get_link_lists(url):
linkLists = []
res = req.urlopen(url)
soup = BeautifulSoup(res, 'html.parser')
for s in soup.find_all("a"):
wordDict = {}
#リンク取得
link = s.get("href")
if(link[0] == '/'):
parsed_url = urlparse(url)
link = parsed_url.scheme + "://" +parsed_url.netloc + link
wordDict[LinkColumnName[0]] = 0
wordDict[LinkColumnName[1]] = s.text
wordDict[LinkColumnName[2]] = link
#追加
linkLists.append(wordDict)
#出力
print(s.text + " "+ link)
return linkLists;
if __name__ == '__main__':
#ネットからデータ取得
param = sys.argv
if (len(param) == 0):
print ("Usage: $ python " + param[0] + " number")
quit()
if(len(param) < 3):
print ("入力データが足りないです 第一引数:調べる階層 第2引数:URL")
quit()
#調べる深度depthを取得する
depth = param[1]
#url取得
url = param[2]
#リンクリスト取得
linkLists = get_link_lists(url)
#CSVファイル書き込み
filename = "linkList_" + datetime.now().strftime("%Y%m%d") + ".csv"
with open(filename, 'w') as csv_file:
fieldnames = LinkColumnName
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
#データ分出力する
index = 0
for data in linkLists:
writer.writerow({LinkColumnName[0]:index, LinkColumnName[1]: data[LinkColumnName[1]], LinkColumnName[2]: data[LinkColumnName[2]]})
index +=1
コードは、GitHubにも公開されています。
https://github.com/jshirius/web_tool/blob/master/analysis_link_lists.py
使い方
コマンドラインで以下のように入力します。
python analysis_link_lists.py 1(現時点ではダミー) [対象のURL]
成功すると実行したディレクトリにcsvファイルが出力されます。
リンク取得ができないケース
Googleの検索結果のように、サイトアクセス後、Javascriptによってデータを読み込むタイプのページには、使用することができません。理由は、サイトアクセスしたときは解析対象のデータがサーバーから読み込まれていないためです。
まとめ
いかがですか?リンク一覧は、意外に使う機会が多いと思います。
Pythonには、htmlの解析ライブラリーなど役立つものが多いので、今後も、Pythonを使う機会が増えそうです。