7

公開されているすべてのデータ アブストラクトをダウンロードしたいと考えています。公開された記事の要約をすべて簡単にダウンロードする方法を知っている人はいますか?

データのソースを入手しました: ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/af/12/

とにかく、これらすべての tar ファイルをダウンロードする方法はありますか..

前もって感謝します。

4

2 に答える 2

2

これはやや古い質問であることを感謝します。

Python で公開されているすべてのエントリを取得したい場合は、しばらく前に次のスクリプトを作成しました。

import requests
import json

search_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&mindate=1800/01/01&maxdate=2016/12/31&usehistory=y&retmode=json"
search_r = requests.post(search_url)
search_data = search_r.json()
webenv = search_data["esearchresult"]['webenv']
total_records = int(search_data["esearchresult"]['count'])
fetch_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmax=9999&query_key=1&webenv="+webenv

for i in range(0, total_records, 10000):
    this_fetch = fetch_url+"&retstart="+str(i)
    print("Getting this URL: "+this_fetch)
    fetch_r = requests.post(this_fetch)
    f = open('pubmed_batch_'+str(i)+'_to_'+str(i+9999)+".json", 'w')
    f.write(fetch_r.text)
    f.close()

print("Number of records found :"+str(total_records))

2 つの日付の間に entrez/eutils 検索リクエストを作成することから始めます。これにより、すべての pubmed を確実に取得できます。次に、その応答から「webenv」(検索履歴を保存する) と total_records が取得されます。webenv 機能を使用すると、個々のレコード ID を efetch 呼び出しに渡す必要がなくなります。

レコードのフェッチ (efetch) は、10000 のバッチでのみ実行できます。for ループは、9,999 レコードのバッチを取得し、すべてのレコードが取得されるまでラベル付きファイルに保存します。

リクエストが失敗する可能性があることに注意してください (200 以外の http レスポンス、エラー)。より堅牢なソリューションでは、各 requests.post() を try/except でラップする必要があります。また、データをファイルにダンプ/使用する前に、http 応答のステータスが 200 であることを確認する必要があります。

于 2016-08-10T14:03:30.210 に答える