Webスクレイピング で文献検索を効率化!第1回【Python】

最近、記事の更新がめっきり遅くなってしまいました。

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 に変更して下さい)。

#! /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 に変更して下さい)。

#! /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 書いたりしていると、本当にメンタル削られますので、是非活用してみてください。

One comment

  1. キーワードによるスクレイピングではなく、化学構造式や化学反応式による文献のスクレイピングはどうするとできるのでしょうか? いわゆるScifinderやReaxysのような化学構造式や化学反応式を描いて検索するとその類似度が高い順に関連する文献やパテントが得られるような機能はどのように実装されているのか気になりました。

    もしご存知でしたらご教示いただけると幸いです。または記事として投稿頂けると幸いです。

    お忙しいと存じておりますが、何卒よろしくお願い致します。

Nakano へ返信する コメントをキャンセル