公開されているすべてのデータ アブストラクトをダウンロードしたいと考えています。公開された記事の要約をすべて簡単にダウンロードする方法を知っている人はいますか?
データのソースを入手しました: ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/af/12/
とにかく、これらすべての tar ファイルをダウンロードする方法はありますか..
前もって感謝します。
公開されているすべてのデータ アブストラクトをダウンロードしたいと考えています。公開された記事の要約をすべて簡単にダウンロードする方法を知っている人はいますか?
データのソースを入手しました: ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/af/12/
とにかく、これらすべての tar ファイルをダウンロードする方法はありますか..
前もって感謝します。
これはやや古い質問であることを感謝します。
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 であることを確認する必要があります。