PubMed 웹사이트에서 다운로드해야 하는 파일의 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를 얻을 수 있는 저널 웹페이지 링크를 제공합니다.
어쨌든 귀하의 스크립트는 괜찮습니다. 문제는 귀하가 제공한 링크가 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 파일에 대한 링크를 제공해야 합니다. 스크립트가 방문한 링크 중 하나를 브라우저에 지정하여 이를 테스트할 수 있습니다. 예를 들어,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
무료로 사용 가능한 PDF 2개를 다운로드 하고 나머지는 오류와 함께 인쇄합니다.
No PMC ID for 10021369
No PMC ID for 100562
No PMC ID for 10064668
No PMC ID for 10071185
나머지는 수동으로 가져오거나 관련 URL을 구문 분석하는 방법을 알아내야 합니다.
답변2
이것은 트릭을 수행해야합니다. 2016년 5월 현재에도 작성자는 여전히 코드를 적극적으로 유지 관리하고 있는 것으로 보입니다.