Beautifulsoupでアメリカ国立医学図書館検索サイトから論文タイトルと概要を抽出してみる。

この記事ではWindows10にインストールしたAnacondaでPython3.6、Beautifulsoup を使用しています。
Ubuntuでも同様の環境を作って実行済みですのでPython3.6さえあれば同様のことができると思います。


#本記事でやったこと
PubmedのホームページをAPIを使用してスクレイピングし、論文タイトル、アブストラクトを取得する。
・取得したタイトルをファイル名にし、テキストに概要を書き込み保存する。

#PubmedAPIを使用しスクレイピングより論文IDを取得
まずは以下のコードでスクレイピング用ライブラリのBeautifulsoupとWebサイトにアクセスするためのUrllibをインポートします。

```python:PubMed.py
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import urllib.request
```

PubmedAPIの仕組みはまず検索キーワードを下記ID検索用URL(以降baseURL)にセットすると論文IDが返ってきます。(呼び出す論文IDの最大数はデフォルトで20件です。パラメータを変えればもっと取ってこれます。)例えばcancerを検索すると下記のような結果が返ってきます。
URL:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=cancer

IDを論文検索用URL(以降serchURL)にセットすると論文の内容を取得できます。(形式はXML)例えば下記のように結果が返ってきます。
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=30172246

APIの仕様については下記をご参照ください。
https://www.ncbi.nlm.nih.gov/books/NBK25499/

ID検索用URL:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=

論文検索用URL:https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=

```python:PubMed.py
keyword = "cancer"#検索キーワードとして今回はcancerを設定してみます。
baseURL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term="
serchURL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id="

```

ID検索用URLをセットしてIDをまとめて取ってくる処理と論文検索用URLをセットして論文を取ってくる処理を作成します。

```python:PubMed.py
#論文IDを取得する
def get_id(url):
result = urllib.request.urlopen(url)
return result

def get_summary(url):
result = urllib.request.urlopen(url)
return result"
```

メインの処理で、上記で定義したkeywordとbaseURLを足してIDを取ってきて取得したIDの分だけserchURLをインスタンス作成したBeautifulSopeにセットして論文を取得します。
取得した論文をBeautifulSoupで文字列指定で論文内容を取得し、テキスト形式で保存します。
今回指定する文字列は、title、abstractです。

```python:PubMed.py
def main():
#ID取得用のURLを作成
url_id = baseURL + keyword
#ID取得用検索処理を実行
result = get_id(url_id)
#Beautifulsopeで検索された結果を取り込む
soup = BeautifulSoup(result, 'html.parser')
#idのタグで囲われているIDをすべて取得する。
ids = soup.find_all("id")
#取得したIDの個数分繰り返して論文を取得する。
for id in ids:
#検索用URLにIDをセットして論文を取得する。
serch_url_id=serchURL + id.text + "&retmode=xml"
sumresult = get_summary(serch_url_id)
#Beautifulsopeで論文検索結果を取得
summury_soup = BeautifulSoup(sumresult, 'html.parser')
#titleとabstractの部分だけ取り出す。
title = summury_soup.find("title")
abstract = summury_soup.find("abstract")
#たまにabstractがない奴がいるのでなくてもそのまま続ける。(多分論文の書き方が他と異なるもの)
if abstract is None: continue
#検索されて保存された内容を画面に出して確認する。
print("ID:"+id.text,"タイトル:",title.text)
hedder = "ID:"+id.text+"タイトル:"+title.text
print("概要"+abstract.text)
#UTF-8形式でテキストを保存する。
f = open(title.text + '.txt','w',encoding='UTF-8')
f.write(hedder)
f.write(abstract.text)
f.close()
if __name__ == "__main__":
main()
```

実行結果はうまく取得できました。



#終わりに
本記事では論文サイトからAPIを使用して論文を取得し、Beautifulsoupを用いてほしい情報だけ取り出してテキストで自端末に保存しました。
データは取得できるようになりましたので、保存した論文から単語を抽出して人工知能に学習させてみたいと思います。

 

一日13時間座りっぱなしのSEがキックボクシングを始めました。

社会人になってそろそろ5年になりました。

この5年間何をしていたかというと、ずーーっと座りっぱなしでした。

どのくらい座っていたかというと、月から金まで平日は1日13時間くらい、、、

入社当時65kgだった体重も70kgくらいになっており、10段くらいの階段をのぼっただけでもかなり息が上がる状態に。。。

 

完全に運動不足

 

そこで友人に何かいい運動ないかと聞いて見たところ、こんな誘いが

「キックボクシングジム行こうぜ!!!」

 

今までの人生で一度も格闘技と言うものをやったことがなく、人をぶつこともぶたれることもなかった私ですが、ものは試しに行ってみました。

行ってみたのは

横浜のエクササイズ&キックボクシングジム|Grow up横浜ジム

 

選んだ理由は体験の料金が他と比べて安かったのと、調べた中で一番近かったからです。

持っていくものはこれだけです。

・Tシャツ

・短パン

・軍手

・水

今までやった運動で一番簡単に始められるなと思いました。

(箇条書にするとバーベキュー連想しちゃいますね)

軍手はミットとグロープを使用するときにつけるもので、くつしたみたいな役割です。

 

「クラスが始まる15分前くらいには来て着替えててくださいねー」

と先生に言われたので着替えて準備運動しながら待機。

床はマットで裸足でやります。

 まわりの人を見て思ったことは、”女性が多い半分位女性がクラスに参加しておりました。 

最近流行ってると聞いていましたがほんとだったんですね。

 

「じゃあ基本キッククラスを始めまーす。」と先生が現れクラス開始

まずはストレッチ 

二人一組で開脚します。   まったく開きません。

端から見るとただ足伸ばして座っているだけの状態だったので先生から思いっきり足

開かされました。

悶絶死するかと思うほどの衝撃で変な声出ました。

 

「じゃあ立ち上がって準備運動始めまーす。」と軽い口調で続ける先生

”既に体中の筋が痛いのですが今までは準備運動ですらなかったんですか先生。。。”

 

がしかしその準備運動が

”めっちゃくちゃキツい”

 

 ジャンプ→駆け足→ジャンプ→膝上げ走り→ジャンプ→パンチしながら走り→ジャンプ

→駆け足→ジャンプ→床に手をついてジャンプ→ジャンプ を5セットくらい?

 

開始15分で過呼吸になるかと思いました。。。ジャンプ中何度も足つりそうになるし、汗で過ぎて床に漏らしたあとくらいの滲みになるし。。。息つく暇もないとはこのこと

 

「大丈夫ですか?無理しないで水分補給してくださいね~まだ準備運動ですからね~」と先生

開始15分で500mlの水が半分以上消え去りました。。。。

 

「それでは基本の型を教えていきまーす。」と先生に言われ

ファイティングポーズの取り方と移動、ジャブ、ストレート、ミドルキックの打ち方を習いました。

なかなか最初はカッコが様にならないのでジムの鏡に映る自分のカッコがちょっと恥ずかしい。。。

でもまわりの人はおばさんもおっさんもお姉さんもお兄さんも真剣なのでまったく気にならなくなりました。己れの姿だけをみて黙々とジャブ、ストレートの練習をしていきます。

 

「ではミットとグローブはめて練習していきます。」と先生に言われ軍手をはめて片方の人はミット、もう一人はグローブをはめてミット打ち開始。

 

これが

”超気持ちいいっ!!!”

 

力いっぱいミットにパンチを打ち込んだときの衝撃と、爽快感は一発一発打つ度にSE生活で積もりに積もったストレスが吐き出される感覚!!!

体中の膿が拳の先からミットの向こう側に飛び出て行く感じでした!!

 

なかでも一番気持ちよかったのは

ミドルキックです!!!

ミットで受ける相手が友達だったので全く手加減せずにフルパワーでミドルキックを蹴り込みました!!

(後で聞きましたが、友人も「お前の上半身を吹っ飛ばす気持ちで蹴った。」などと供述しておりました。)

 

最後は

「1分間パンチとキックのラッシュ」

終わった後立てなくなるほど連続でパンチとキックをやっている最中、疲労がピークに達して顔がわらけてきました。

 

これにて60分間の基本キッククラス終了。

最初は”体験だけ受けたら帰ろうかな”と考えていた私ですが、

クラスが終わったあと即入会しました。

毎週1日参加可能のプランで、一日であればすべてのクラスに参加できるということで料金もそこまで高くない印象です。

グローブはレンタルできますが、そこまで高くないので少ししたら買おうかなと思います。

大体平均相場4000円くらいで、それ以下の値段だとちょっと質が落ちるようです。

 

先生おすすめが

WINDYのパンチンググローブで、今回私が借りたグローブでした。

小ぶりで軽くて持ち運びやすそうなので始めるには最適かなと思います。

 

 

そして、SE生活の疲れとストレスで、2ヶ月ほど不眠が続き毎日4時間以下の睡眠しかとれなかった私ですが、その日は19時就寝6時起床。

11時間寝ました。

 

普段動かずに仕事するので脳みそばかり疲れて体がつかれていなかったことが不眠の原因となっていたみたいです。

 

キックボクシングはぜい肉とストレスを同時に落とすいい手段だなと思います。