アキタの雑記

博士後期課程の雑記ブログ。 読んだ本、コンピューター系のメモ、愛猫の写真、勉強のこととか。

タグ:ブログ

なんとかブログを楽に書きたいのでマークダウンでかいてみた

なんとかブログを楽に書きたいのでマークダウンでかいてみた

なんだかんだ、半年くらいブログを放置していたわけなんですが、この新型コロナウイルスの流行により、少し時間ができたということもあり、ぼちぼちブログでも書くかと思い腰をあげたわけです。

ありがたいことに、毎月800 viewくらいはあるようで猫のやつとかlinuxのやつとかがよく見られているみたいですね。

今日は如何にブログを書くのがめんどくさいかという話を少しかこうかなと思います。

ブログ書くまでの流れ

  • ネタを仕入れる
  • 本文を書く
  • htmlをいじって見やすいように整形する
  • ブログのページに飛んで、それを貼ったりなんだりする

ざっとこんな流れで書かれているわけなんですが、ネタはないわけではないのでここはOK

問題はhtmlを書くというところが非常にだるいというわけです。そもそもそんなに覚えていないし、覚えたものも忘れていくという有様で、うん。はい。

プラグインが入ったEditorで書けばいいという話もあるのですが、htmlから書くのはだるい。(慣れの問題なのかもしれませんが)

マークダウンで書いてみた

ということで、マークダウンで書いてみたところ非常にシンプルで書きやすく、僕のブログ程度のhtmlいじるくらいなら十分に事足りることがわかったのでこれからはマークダウンで書いていこうと思います。

マークダウンとhtmlで書くことの違い

正直、いじるところはhタグとか、pタグとかdivくらいなのですが、これが結構めんどくさくて、htmlだと

<h1>タイトル</h1>

とか囲む形なのですが、これをマークダウン で書くと

# htmlのh1に相当

とこれでいいので非常に書きやすいですね。

コードを表示したい時も楽に書ける

コードを書く時は、本文とは区別して表示したいのでこれが楽に書けるのは嬉しいですね。

コードを区別したい時は行の最初に```を書いて、終わりにも```を書く

終わりに

マークダウンで書くことでブログを書くことの億劫さが少し減少したような気がする。コンスタントに書いていけたらいいなと思います。

自分のブログの記事一覧をPythonでスクレイピングしてみた2.実際のコード

全体のスクレイピングコード
前回の記事(自分のブログの記事一覧をPythonでスクレイピングしてみた1.Pythonのライブラリと文法の確認)の続きです。

今回の対象範囲の確認

527
CSVファイル
今回見ていくのは上の画像に示されてあるコードです。また最終的に出力されるCSVファイルも上に示されてある通りです。name列の下には、タイトルなどの文字列が、url列の下には各URLがまとめられていることを確認してください。

urlという名前にこのブログのURLを代入

url
「url = "http://www.g36cmsky.com/"」
とすることで、これから自分のブログのURLを使いたいときに毎回入力する手間を、urlという三文字で置き換えました。楽になりますね。

responseにこのブログ内のtextを代入

response
「response = requests.get(url).text」
とすることで、「url」内のtextを取得することができます。
復習ですが、「requestsはWebからデータをダウンロードできるライブラリです。」

「.get()」

Webからデータを取得する際に、どこのWebsiteにアクセスするかを決めるときに「.get()」を使います。「.get」の後に取得したいWebのURLを入力します。僕のブログにアクセスしたいので、僕のブログのURLを入力します。この前に「url = "http://www.g36cmsky.com/"」としたことが役に立ちます。urlという文字が僕のブログのURLと同じ意味になっているので、「.get(url)」でいいのです。
「url = "http://www.g36cmsky.com/"」としていなかった場合は、「.get("http://www.g36cmsky.com/")」としなければなりません。

BeautifulSoupの初期化

soup
「soup = BeautifulSoup(response, 'html.parser')」
とすることで、BeautifulSoupの初期化を行います。
ここではHTMLを扱っているので、BeautifulSoupが使われています。

tagsに("div", {"class":"sidebody"})とhtmlで紐づけられている全ての要素を代入

tags
「tags = soup.find_all("div", {"class":"sidebody"})」
ここでは、tagsに僕のブログの横にずらーっと並んでいる要素を取り込んでいます。(「取り込んでいる」という表現が適切かは怪しいところですが。。。)
ここでも、扱っているのはHTMLなのでBeautifulSoupを使っています(soupって書いてあるところね。)。soupの後ろにある「.fund_all」はざっくり言うと「全部出せ」といったところでしょうか。何を全部出すかというと、さらにその後ろにある("div", {"class":"sidebody"})です。
つまり、ここで書いたコードは
「HTML内にある("div", {"class":"sidebody"})という要素を全部出して。」という意味になります。

csvファイルの行と列を指定

dataflame
columns = ["name", "url"] df2 = pd.DataFrame(columns=columns)
columnsにデータフレーム(目的であるCSVファイルの中の列)を作ります。その名前がnameとurlになります。このnameの下には記事のタイトルがずらーっと並び、urlの下には各URLがずらーっと並ぶ予定です。

df

dfとされていてこれ何か意味があるのかなと思いましたが、たぶんなんでもいいです。ただ、 pandasでググるとほとんどdfの中にしまわれていました。これはたぶん、 data frameの略でdfになっているんだろうなあと勝手に納得しています。違っていたら教えてもらえれば幸いです。

pd(pandas)

最初にpandasをインポートした時に、pandas as pdとしました。よってこのpdはpandasの意味です。

.DataFrame

.DataFrameはpandasのコマンドで、データフレームを作成するときに使います。今回は列を作るので、DataFrame(columns=columns)とします。最初のcolumnsが列を指定して、次のcolumnsは自分が前に作成した「columns = ["name", "url"]」のことです。

記事名と記事URLをデータフレームに追加

for sentense all
ここでは、たくさんある記事名と記事URLをそれぞれのデータフレームの中に格納していきます。主にループ処理に使われるfor文を使います。

for文について

for文はループ(繰り返し)処理を行う時に使われる文です。for文はPythonだけでなく他の様々なプログラミング言語でも使われています。for文を使って、僕のブログの複数ある記事タイトル、URLを取得しようというわけです。

in演算子

for文で使われているin演算子は、一つずつ取り出すときに使われるようです。

実際に書いたfor文

for sentense all
ここでは、実際に書いたfor文(上の画像)について一つ一つ確認していきます。

tagsの中からtagの中に繰り返し、一つずつ要素を取り出す

for tag in tags
最初の
「for tag in tags:」
は、tagsの中からtagの中に繰り返し、一つずつ要素を取り出す。という意味です。この文の下には、取り出した要素を格納します。具体的に言うと、前に作成したCSVの列名name、urlにtagsの中の各タイトル、URLを格納していきます。

nameにtag内にあるaタグ要素の文字列のみを取り出す

name=
name = tag.a.string はnameにtag内にあるaタグ要素の文字列のみを取り出します。という意味です。 このnameは後でCSVファイルにぶち込まれるやつです。

urlにtag内にあるa要素のhref要素を取りだす

urla
「 url = tag.a.get("href")」
urlにtag内にあるa要素のhref要素(URLが書かれているところ)のみを取り出します。という意味です。

seにpandasを使いSeriesという型にデータを収納

se
「se = pd.Series([name, url], columns)」
seにpandasを使って、Seriesという型にデータを収納します。ここで収納するデータは、[name, url]というデータと前に作成したcolumnsのデータです。

seの表示

printse
「 print(se)」 でseを表示します。

以前に作成したdf2に今回作成したseを追加

df2
「df2 = df2.append(se, columns)」 前に作成したdf2に今回作成したseを追加します。

.appendで要素を追加

df2
「.append(追加するもの)」で配列に要素を追加することができます。「.」の前には追加対象の配列(list)を書きます。今回の対象は以前作成したdf2という配列ですね。

result.csvという名前でCSVに出力

csv export
最後の段階です。ここでは、今まで集めてきたデータをCSVファイルを作成するまでを見ていきます。

作成するファイルの名前を作成

filename
「filename = "result.csv"」でファイルの名前を決めました。CSVファイルを作りたいので拡張子は「.csv」としています。

データが格納されているdf2をCSVファイルに変換

tocsv
「df2.to_csv(filename, encoding = 'utf-8-sig')」と書くことでCSVファイルに変換できます。encoding指定しないと、エラーが起こるそうです。

作成したCSVファイルをPCにダウンロードする

dw
「files.download(filename)」で作成した「result.csv」というファイルをダウンロードします。.downloadの後ろの()のfilenameには「result.csv」が格納されています。

あとがき

前回(自分のブログの記事一覧をPythonでスクレイピングしてみた1.Pythonのライブラリと文法の確認)の続きで、自分なりにまとめておりました。楽しかったです。最後にここで行ったスクレイピングはDaiさんのPythonによるスクレイピング①入門編 ブログの記事をCSVにエクスポートするをもとに行いました。ありがとうございました。

ブログやってみてわかったこと

このブログをだらだら書いて1年ほど経つので、やってみてわかったことを書いていきます。

ブログを始めたきっかけ

このブログはもともとは自分の大学の講義のメモといいますか、テスト勉強用に勉強したことをまとめていたものでした。私はテスト期間になるとペンを持ちたくなくなるので大体Twitterにいました。Twitter新テスト勉強の内容をツイートして勉強したふりをしていた日々でした。同じことを何回も繰り返すのはあまり楽しくなかったのです。こうすると同じ学科の友達とかがツイートを見てくれて助かっていたよーなどと言われることもありました。その延長でブログにまとめるようになりました。最初の頃はただテキストを打ち込んでいただけでしたので今思えば、なんとも見づらいものでした。

ブログをやって広がった世界

ブログをTwitterよりもやることが多いです。Twitterを示増つぶやきたいことを入力してツイートするだけです。一方ブログは文章書くこと、それをレイアウトすること、また画像を挿入することなどやることがTwitterよりは多いです。それをめんどくさいと取るか楽しいと取るかは人次第ですが、最近は楽しいですね。ブログを始めたことで、自分が知らなかったことを知る機会が増えたのでそこはすごく良かったなあと思っています。

広告収入

それで、最初のテスト勉強のメモを書いていた時期から色々とブログのことをちょっとずつ勉強していきました。するとブログで広告収入を得ている人がいることを知りました。なるほどこんな世界があるのかと自分もやってみたいと思うようになりました。広告収入ってなんとなく胡散臭い話だなあと思っていたのですが、調べてみると別に不思議な話でもないことがわかりました。 広告収入を得る方法はアフィリエイトやGoogleアドセンスなどがありますが、ここでは詳しく書きません。 ちなみに今ではGoogleアドセンスの申請も通っているので頑張り次第では広告収入を得ることができるかもしれません。

ブログのデザインやマーケティング

こうした広告収入を得ている人たちはSEOやウェブデザインまたどのような記事がよく読まれるのかなどを計算してブログを作成しているようです。閲覧数が広告収入と密接に関係しているからです。広告収入を得ることが目的ならば、どのような記事を書けば、自分のブログを見てもらえるのかを考えて読まれる記事を書かなければなりません。また、その中でどのように広告を貼れば効果的に広告収入が得られるのかを研究しなければならないでしょう。どのようなブログが読まれるのかまたはどこに広告を貼るかなどとても奥が深いものだなと感じています。 このような、マーケティングの考え方を勉強できるのもブログをやって知れたことの一つです。

プログラミング

ブログから広がったことにプログラミングがあります。これはまだ勉強中で大したことできないですが、楽しく地道に勉強してます。 ブログの文章やデザインなどをいじるのにはHTMLやCSSなどのウェブ系のプログラミング言語を使わなければなりません。こうしたちょっとしたプログラミング言語を知るきっかけにもなりました。 今はちょっとググれば無料で勉強できるサイトや情報ソースがたくさんあるので自学もそんなに難しくないと思います。が、プログラミングの勉強のあるあるかもしれませんが、目的なく勉強しているとただHello World!を表示して終わりになりがちです。基本的な文法を勉強してもそれがどういう風に使われるかをイメージできないとテンション上がらないし、楽しくありません。ブログで遊んでいたら、この目的が出てきました。 今勉強しているのは自分のブログの全記事タイトルとURLを取得する方法です。内部リンクなどを使おうとする際に記事タイトルとURLが必要です。この記事タイトルとURLをまとめたリストを作りたくなりました。これが目的です。 これを全記事回ってコピーアンドペーストを繰り返すのはあまり頭の良い方法ではありません。まあ途中5記事くらいやってたんですけどね。こーゆー単純な作業はコンピューターが得意とする作業です。と言うことで何とかコンピューターにこのような単純作業をやってもらおうと今プログラミングを少し勉強しています。具体的な目標があると勉強も楽しくすることができます。

言語化すること

文章書くことってどんな仕事でも必須のスキルですよね。いくら大層なことを考えていたとしても、それを他人に分かるように伝えられないと他人から協力してもらうなり、説得するなりすることができないでしょう。 私は文章書くの苦手で得意になりたいので、とりあえず数をこなしていこうというスタンスで書いてます。 あと、何かを好きとか嫌いとかで終わるのではなくて、それの何が好きなのか、何が嫌いなのかと深掘りしていきたいんですよね。例えば、サッカーが好き。で終わりじゃなくて、サッカーでゴールを決めるのが好きなのか、相手を一対一でかわすのが好きなのか、綺麗にパスを通して崩すのが好きなのかとかね。この深掘りしていく作業って、自分がしたい事とかしたくない事とかを考える時にすごく大事なことかなあと思っているので、そういう練習ですね。

↑このページのトップヘ