2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pubmedデータをxml形式で取得する

Posted at

はじめに

自分用の覚書記事です。

以前の記事で、pubmedから取得したxml形式の論文データを解析するためのpythonクラスを作成しました。

このときはxml形式のデータをpubmedのページから簡単に入手できたのですが、ウエブページが変更されて、簡単に入手できるのがPubmed idだけになってしまいました。

本記事では、Pubmed idのリストから、xml形式の論文データを入手するpythonスクリプトについて記述します。

E-utilities

E-utilitiesについてはこちらに記事があります(英語)。E-utilitiesは、NCBIデータベースが提供するAPIです。

NCBIからprogram的にデータを入手するには、このAPIのお世話になる必要がありそうです。

ブラウザ経由でデータを入手するには、https://eutils.ncbi.nlm.nih.gov/entrez/eutils/ 以下にある各種fcgiにアクセスすれば良いようです。ただし、1秒間に3回以上アクセスするなということで、これを守らないとアクセス元ネットワークからのアクセスを遮断されてしまうこともあるかもしれません。同僚に迷惑をかけないように注意しましょう。

例えば2件のpubmedデータをxml形式でブラウザ越しに取得するには以下のURLにアクセスします。

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=12345678,2345678&retmode=xml

unixからもデータベースにアクセスしやすいように、いろいろ提供されているようですが、ここでは取り扱いません。

このようにブラウザ経由などでもデータを入手できますが、この記事ではBiopythonのEntrezを利用します。

BioPythonでのデータの取得

コードは以下のようになりました。

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

from Bio import Entrez

Entrez.email = "your.e-mail.address@example.com"#名乗る

pmids = [12345678,2345678]
handle = Entrez.efetch(db="pubmed", id=pmids,retmode="xml")
content = handle.read().decode()
handle.close()
content = content.split("\n",2)[2] +"\n";#最初の2行(htmlヘッダーを取り除く)

最初の2行は、接続エラーを回避するためです。この2行を入れないと以下のエラーが出ます。

.py
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)

https://shinespark.hatenablog.com/entry/2015/12/06/100000 に従ってこの2行を入れましたが、これがなんの処理なのかはわかりません(元記事には注意して使うよう書かれています)。

問い合わせる前に、連絡用のメールアドレスを登録する必要があるようです。
Entrez.efetch()の戻り値(handle)は、

http.client.HTTPResponseクラスのオブジェクト

handle.read()の戻り値はbytesクラスのオブジェクトです。

これを文字列に変換するには、decode()すれば良いようです。

終わりに

pmidさえ持っておけば、xmlデータを入手できるようになりました。業績リストとかを提出しなくてはいけないシーンがよくありますが、pmidだけ提出すれば良いようになればいいのに、と思います。

が、しかし、当分そうはならなさそうなので、次の記事ではpmidのリストから業績リストを作成するpythonスクリプトを書く予定です。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?