見出し画像

pythonで自分の記事一覧を取得してみる

import pathlib
import time
import datetime
from bs4 import BeautifulSoup
import subprocess as subp

def fw(fnw,fcont):
f=open(fnw,'w',encoding='utf-8');f.write(fcont);f.close()

def pr_joinn(text,ln='\n'):
text_=ln.join(text)
print(text_)

url0=pathlib.Path('~/Downloads/note記事/記事note.html').expanduser().read_text()
rt=BeautifulSoup(url0,'lxml')
d_=rt.find('ul',class_='o-noteListNotes__body').find_all('li',attrs={'data-v-5e727166':''})
a_=[x.find('a').get('aria-label')+'\t'+'https://note.com'+x.find('a').get('href')+'\t'+datetime.datetime.strptime((x.time).text,'%Y年%m月%d日 %H:%M').strftime('%Y%m%d%H%M') for x in d_][::-1]
pr_joinn(a_)

結果です。

pythonで謎を解く https://note.com/coding_kiwi/n/n4037a9884fb8 202505201612
モニタリング in 香港 https://note.com/coding_kiwi/n/n96e1388e3265 202505211040
原理原則を念頭に https://note.com/coding_kiwi/n/nb08b694774ae 202505221515
ある日突然できる、ということ https://note.com/coding_kiwi/n/n10c2cfb80f5e 202506011105
電子署名や電帳法について無料でなければ始まらない https://note.com/coding_kiwi/n/nf07982741239 202506092055
原点。すべてはここから始まった。 https://note.com/coding_kiwi/n/n862431bdc9f7 202506101547
なにがうれしいかって。 https://note.com/coding_kiwi/n/n0287a7b914b3 202506121611
プログラムは「こんな風に役に立つ」 https://note.com/coding_kiwi/n/nd03a050021d5 202506162156
ごちゃごちゃ、だけどちゃんと見つかるメモ https://note.com/coding_kiwi/n/naf820ceef399 202506171125
昼食でストレス https://note.com/coding_kiwi/n/n0316c8ddd2f1 202506191256
プログラミング、自修する https://note.com/coding_kiwi/n/nce022e7f6774 202506191640
究極、スケルトンライナー https://note.com/coding_kiwi/n/n24ce7e40b54b 202506201838
キーボード入力速度を上げる練習 https://note.com/coding_kiwi/n/n54e936c6baa8 202506231053
ムダとはなにか。 https://note.com/coding_kiwi/n/nfc25af052805 202506240941
コマンド組み合わせの妙は、組織論につながって行く。。。。。。。。。。のかも https://note.com/coding_kiwi/n/nb607a2081ac9 202506250943
まずは、これだけ覚えて始めよう。Vim編 https://note.com/coding_kiwi/n/n8f89fab8e209 202506261629
まずは、これだけ覚えて始めよう。Tmux編 https://note.com/coding_kiwi/n/neccf3a33d1f1 202506261709
あたははどっち派 https://note.com/coding_kiwi/n/n628c13f688ab 202506282041
よくつかうキーボード操作 https://note.com/coding_kiwi/n/n44da785ce11b 202506291443
vimのチートシート https://note.com/coding_kiwi/n/ne70ec6342889 202506301756
tmuxのチートシート https://note.com/coding_kiwi/n/nd8e508fb8de3 202507011429
こうしたから、作業効率があがった https://note.com/coding_kiwi/n/ndff902e29bd8 202507020950
プログラミング学習って https://note.com/coding_kiwi/n/n6c30cb746fca 202507031024
PCに使われないようにしましょう。 https://note.com/coding_kiwi/n/nd12bf51b24f4 202507061121
ちょっとやってみよ、がいい https://note.com/coding_kiwi/n/n4a660849bb16 202507061127

改行を「;」に置換すれば、1行プログラムのスケルトンライナーになります。ついでに記事一覧のURLをひとつひとつWebページを読み込んでスクレイピングして記事内容を取得して、記事ごとにテキストファイルに保存するようにしてみました。(内容の取得は、シェルコマンドの「w3m」を使っています)

ファイル名は、「notecom_記事タイトル_公開時刻.txt」です。

url0=pathlib.Path('~/Downloads/note記事/記事note.html').expanduser().read_text();rt=BeautifulSoup(url0,'lxml');d_=rt.find('ul',class_='o-noteListNotes__body').find_all('li',attrs={'data-v-5e727166':''});a_=[x.find('a').get('aria-label')+'\t'+'https://note.com'+x.find('a').get('href')+'\t'+datetime.datetime.strptime((x.time).text,'%Y年%m月%d日 %H:%M').strftime('%Y%m%d%H%M') for x in d_][::-1];z_=[subp.run(['w3m','-s','-dump','-cols','2000',x.split('\t')[1]],capture_output=True,encoding='utf-8').stdout for x in a_];ans_=[x+'\t'+y for x,y in zip(a_,z_)];pr_joinn(a_);pr_joinn(ans_)

zz_=[fw(str(pathlib.Path('~/Downloads/note記事').expanduser())+'/notecom'+'_'+x.split('\t')[0]+'_'+x.split('\t')[2]+'.txt',x.split('\t')[-1]) for x in ans_]
これで記事ごとにテキストファイルとして保存されるのですが、「リスト内包表記」を使用したら速度が早すぎてファイル更新時刻が秒単位で同じになってしまい、公開時刻順になりませんでした。

そこで、普通に「for」を使って、処理ごとに休み時間を3秒に設定したら、思惑通りに公開時刻順になりました。

for x in ans_:fw(str(pathlib.Path('~/Downloads/note記事').expanduser())+'/notecom'+''+x.split('\t')[0]+''+x.split('\t')[2]+'.txt',x.split('\t')[-1]);time.sleep(3)

いつもは、リスト内包表記を駆使していますが、時と場合によっては、臨機応変に対応することの大切さを感じました。

いいなと思ったら応援しよう!