Как я загружаю PDFs с PubMed, учитывая их идентификаторы?

"Каталогом это назвали от" Вас, кажется, означают его рабочий каталог. Можно изменить эту внутреннюю часть использование сценария, например, cd, но прежде чем Вы делаете так, pwd распечатает его. Это также, вероятно, будет в переменной $PWD

При необходимости в первоначальном рабочем каталоге после изменения его просто сохраните его наверху сценария (перед изменением его)

#!/bin/bash
initial_wd=`pwd`

# ... do a lot of stuff ...
# ⋮

cd "$initial_wd"

При использовании этого для возвращения к каталогу, Вы запустили в, см. также pushd и popd.

1
31.08.2014, 15:52
2 ответа

Почему Вы ожидали бы мочь загрузить PDFs с того URL? PubMed обычно не предлагает PDFs, он дает Вам ссылку на веб-страницу журнала, и Вы получаете 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

Чтобы иметь его, загружают PDFs, необходимо будет дать ему ссылки, которые указывают на файлы PDF. Можно протестировать это путем указания на браузер на одну из ссылок, которые посещает сценарий. Например, http://www.ncbi.nlm.nih.gov/pubmed/10051005/pdf/. При посещении той ссылки, Вы будете видеть, что это не файл PDF.

Если все Ваши PMID являются ссылками на бумаги, которые находятся также в Центральном PubMed, необходимо смочь получить PDFs после первого преобразования идентификаторов PubMed к PubMed Центральные идентификаторы:

#!/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

Запущение этого скрипта загрузит 2 PDFs в свободном доступе с идентификаторов, которые Вы дали (10051005.pdf и 10051007.pdf) и распечатайте ошибку для остальных:

No PMC ID for 10021369
No PMC ID for 100562
No PMC ID for 10064668
No PMC ID for 10071185

Необходимо будет получить остальных вручную или выяснить, как проанализировать соответствующие URL.

4
27.01.2020, 23:21

Это должно помочь. Похоже, что автор активно поддерживает код по состоянию на май 2016 года.

https://github.com/billgreenwald/Pubmed-Batch-Download

0
27.01.2020, 23:21

Теги

Похожие вопросы