最近、記事の更新がめっきり遅くなってしまいました。
4, 5 月は、Review を書いたり、普通の投稿論文を書いたり、申請書の締め切りがあったりで全く時間が取れませんでした。
特に、Review 執筆時は、多数の文献を検索・精読する必要があり非常に大変でした。そんな中、非常に役立ったのが Webスクレイピングでした!
そこで、今回の記事では Python スクリプトを用いて文献検索を効率化する方法について紹介したいと思います。
スクリプトを利用すると、terminal から直接文献検索が出来るので、毎回Webブラウザにキーワードを入力する煩わしさから解放され、作業時間の短縮に繋がります!
参考:Webスクレイピング 論文 PDF のダウンロードを効率化!第2回【PDF ダウンロード】
事前準備
まずは、お手持ちのパソコンに Python 3 をインストールしてください。そして、webbrowser, sys, pyperclip を以下のコマンドを用いてインストールしてください。
pip3 install webbrowser sys pyperclip
ちなみに、管理人は MacBook Pro (15-inch, 2017) を用いて作業しています。
文献検索スクリプトの説明
JACS での文献検索を例としてスクリプトを書いてみます。
まずは、Webブラウザで検索する場合を考えてみましょう。JACS のウェブサイトに行き文献検索をしてみてください。下画像のような画面が表示されると思います。今回は、例として Kendall Houk を検索してみます。
この時のアドレスバーに着目してみてください。下のようになっています。
"
https://pubs.acs.org/action/doSearch?AllField=Kendall+Houk&SeriesKey=jacsat
"
このアドレスを一般化すると、 "
https://pubs.acs.org/action/doSearch?AllField=検索ワード1+検索ワード2&SeriesKey=jacsat
"
のようなアドレスになります。つまり、AllField= と &SeriesKey の間に検索ワードを “+” で繋いで入れてやれば良いのです。
これを terminal 上で以下のようにして実行したいと思います。
- “python JACS_search.py Kendall Houk” のような形で検索キーワードを引数として terminal 上で入力する
- スクリプト実行後に自動で web ブラウザが起動し、検索結果を表示する
そして、実際のスクリプトを下にお示し致します。ファイルは、下記リンクからダウンロードしてください(拡張子を .txt から .py に変更して下さい)。
JACS_search
#! /usr/local/bin/python3 import webbrowser, sys, pyperclip if len(sys.argv) > 1: terms = '+'.join(sys.argv[1:]) else: terms = pyperclip.paste() webbrowser.open("https://pubs.acs.org/action/doSearch?AllField=" + terms + "&SeriesKey=jacsat")
このスクリプトでは、引数として入力した検索ワードを “+” でつないで URL に自動的に変換します。そして、webbrowser.open() でその URL を自動的に Web ブラウザで開きます。
また、複数のサイトで同時に検索したいときは、以下のようなスクリプトがあります。今回は例として、JACS, JCTC, J. Phys. Chem. A, J. Phys. Chem. B, JCC, Angew を例として取り上げました。ファイルは、下記リンクからダウンロードしてください(拡張子を .txt から .py に変更して下さい)。
multi_search
#! /usr/local/bin/python3 import webbrowser, sys, pyperclip if len(sys.argv) > 1: terms = '+'.join(sys.argv[1:]) else: terms = pyperclip.paste() webbrowser.open("https://pubs.acs.org/action/doSearch?AllField=" + terms + "&SeriesKey=jacsat") # JACS webbrowser.open("https://pubs.acs.org/action/doSearch?AllField=" + terms + "&SeriesKey=jctcce") # JCTC webbrowser.open("https://pubs.acs.org/action/doSearch?AllField=" + terms + "&SeriesKey=jpcafh") # JPC_A webbrowser.open("https://pubs.acs.org/action/doSearch?AllField=" + terms + "&SeriesKey=jpcbfk") # JPC_B webbrowser.open("https://onlinelibrary.wiley.com/action/doSearch?AllField=" + terms + "&SeriesKey=1096987x") # JCC webbrowser.open("https://onlinelibrary.wiley.com/action/doSearch?AllField=" + terms + "&SeriesKey=15213773") # Angew
上記のスクリプトを見てもらって分かる通り、ACS 系の雑誌は、URL の最後の &SeriesKey= の後ろのアルファベット 6 文字で雑誌名を指定しています。一方で、Wiley 系の雑誌の URL では、&SeriesKey= の後ろの 8 桁の数字で雑誌名を指定しています。
他の雑誌でも検索したいという方は、まずはブラウザで手動で検索してみて、アドレスのパターンを見てください。
使い方
まずは、path が通してあるディレクトリに JACS_search.py と multi_search.py を移動します。
mv JACS_search.py /usr/local/scripts/ mv multi_search.py /usr/local/scripts/
次に、ファイルの実行権限を書き換えます。
chmod 755 JACS_search.py chmod 755 multi_search.py
できれば .bashrc に alias を設定しておくとスクリプトの実行が楽になります。
管理人は、
alias JACS='multi_search.py' alias all='multi_search.py'
と設定しています。
次に terminal 上で
JACS Kendall Houk
のように打ち込むと自動的に web が起動して検索結果を表示してくれます。
また、
all Kendall Houk
と打ち込むと下の動画のように自動的に 6 個のタブが開き、それぞれの journal での検索結果を表示してくれます。(下の動画では、わかりやすいように multi]search.py Kendall Houk と打ち込んでいます。)
まとめ
今回の記事では、web scraping の本当にさわり部分だけ紹介しました。これから何回かに分けて web scraping について書いていこうと思います。
もっと本格的な web scraping を利用すると、毎週決まった時刻に自動的に各 journal の HP にアクセスして、特定のキーワードを含む新着論文の PDF をダウンロードし、自分のメールアドレスに送信するというスクリプトも作れます。これは、次回以降の記事で紹介したいと思います。
手動で文献検索して Review 書いたりしていると、本当にメンタル削られますので、是非活用してみてください。
キーワードによるスクレイピングではなく、化学構造式や化学反応式による文献のスクレイピングはどうするとできるのでしょうか? いわゆるScifinderやReaxysのような化学構造式や化学反応式を描いて検索するとその類似度が高い順に関連する文献やパテントが得られるような機能はどのように実装されているのか気になりました。
もしご存知でしたらご教示いただけると幸いです。または記事として投稿頂けると幸いです。
お忙しいと存じておりますが、何卒よろしくお願い致します。