🐍

python: テキストファイルからURLを読み込みタイトルと合わせて出力する

2022/01/19に公開

chromeで調べ物をした後に開かれたリンクとタイトルをまとめる作業を自動化するためにCreate Linkという拡張機能を使おうと思ったのですが、なぜかコピーがうまくいかなかったのでpythonで自動化しました。

実行イメージ

入力ファイル

input.txt
https://qiita.com/ika020202/items/5bb39e5bb1645b38d4b8
https://qiita.com/coka__01/items/30716f42e4a909334c9f

出力ファイル

output.txt
FlutterのRiverpodのProvider種類のメモ - Qiita|https://qiita.com/ika020202/items/5bb39e5bb1645b38d4b8
[Flutter]コピペで使える!ボタンのデザイン16種類をまとめました - Qiita|https://qiita.com/coka__01/items/30716f42e4a909334c9f

Create Linkであればブラウザで開かれているリンクを勝手に取得しタイトルを出力してくれるのですが、今回はそこまでの実装は行っていません。
chromeで開かれている全てのリンクをコピーするにはCopy All Urlsを使うと楽ですので、こちらからリンクをコピーし入力ファイルを作成してみてください。

ソースコード

import requests
from bs4 import BeautifulSoup

input_path = 'input.txt'
output_text_list = []

with open(input_path, 'r') as f:
	file_data = f.readlines()
	for link in file_data:
		link = link.rstrip()
		r = requests.get(link)
		soup = BeautifulSoup(r.text)
		output_text_list.append(soup.find("title").text + '|' + link)

with open('output.txt', 'w') as f:
	f.write('\n'.join(output_text_list))

解説

使用するrequestsとBeautifulSoupをimportします。

import requests
from bs4 import BeautifulSoup

input_pahtを開き記述されているリンクを読み込んでいき、タイトルと合わせて出力テキストを格納するリストに入れていきます。

with open(input_path, 'r') as f:
	file_data = f.readlines()
	for link in file_data:
		link = link.rstrip()
		r = requests.get(link)
		soup = BeautifulSoup(r.text)
		output_text_list.append(soup.find("title").text + '|' + link)

テキストファイルから読み込んだ行データの末尾には改行コードが含まれているので、rstrip関数を使用して削除します。

link = link.rstrip()

今回はどういう形式でまとめていくか決めていないので、一旦'ページタイトル|URL'の形でまとめていきます。
区切り文字はURLに含まれない文字列である'|'を使用しています。

output_text_list.append(soup.find("title").text + '|' + link)

最後にまとめたものをテキストファイルに出力します。

with open('output.txt', 'w') as f:
	f.write('\n'.join(output_text_list))
GitHubで編集を提案

Discussion