PubMed Webサイトからダウンロードする必要があるファイルのPubMed ID形式があります.pdf
。私は次のスクリプトを試しました。
#!/usr/bin/env bash
Link="http://www.ncbi.nlm.nih.gov/pubmed/"
ID=(10021369
10051005
10051007
100562
10064668
10071185
)
for f in ${ID[]};
do
wget --user-agent="Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" \
-l1 --no-parent -A.pdf ${Link}${f}/pdf/ -O ${f}.pdf
done
PDFファイルが提供されていますが、開くことはできません。私は何が間違っていましたか?
答え1
このURLからPDFをダウンロードできるようにしたいのはなぜですか? PubMedは通常PDFを提供せず、PDFを取得するためのジャーナルWebページへのリンクを提供します。
とにかくあなたのスクリプトは大丈夫です。問題は、あなたが提供したリンクがPDFファイルではなくXMLファイルへのものであり、それがダウンロードされることです。
$ ls
10021369.pdf 10051007.pdf 10064668.pdf
10051005.pdf 100562.pdf 10071185.pdf
$ file *
10021369.pdf: XML document text
10051005.pdf: XML document text
10051007.pdf: XML document text
100562.pdf: XML document text
10064668.pdf: XML document text
10071185.pdf: XML document text
PDFをダウンロードするには、PDFファイルへのリンクを提供する必要があります。スクリプトが訪問したリンクの1つをブラウザに割り当てることでこれをテストできます。例えば、http://www.ncbi.nlm.nih.gov/pubmed/10051005/pdf/。リンクに入るとPDFファイルではないことがわかります。
すべてのPMIDがPubMed Centralの論文へのリンクである場合は、まずPubMed IDをPubMed Central IDに変換してからPDFを取得できます。
#!/usr/bin/env bash
Link="http://www.ncbi.nlm.nih.gov/pubmed/"
PMCLink="http://www.ncbi.nlm.nih.gov/pmc/articles/"
ID=(10021369
10051005
10051007
100562
10064668
10071185
)
for f in ${ID[@]};
do
PMCID=$(wget --user-agent="Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" \
-l1 --no-parent ${Link}${f} -O - 2>/dev/null | grep -Po 'PMC\d+' | head -n 1)
if [ $PMCID ]; then
wget --user-agent="Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" \
-l1 --no-parent -A.pdf ${PMCLink}${PMCID}/pdf/ -O ${f}.pdf 2>/dev/null
else
echo "No PMC ID for $f"
fi
done
このスクリプトを実行すると、指定したID(10051005.pdf
および)から10051007.pdf
無料で利用可能な2つのPDFがダウンロードされ、残りはエラーで印刷されます。
No PMC ID for 10021369
No PMC ID for 100562
No PMC ID for 10064668
No PMC ID for 10071185
残りは手動でインポートするか、関連するURLを解析する方法を理解する必要があります。
答え2
これはトリックを行う必要があります。 2016年5月現在でも、作成者はまだコードを積極的に維持しているようです。