Как получить доступ к опубликованным данным для форм с несколькими страницами в сканере python

Я пытаюсь просканировать публикации с помощью python и получить опубликованный идентификатор для всех статей, на которые была процитирована статья.

Например, эта статья (ID: 11825149) http://www.ncbi.nlm.nih.gov/pubmed/11825149 Имеет страницу со ссылками на все статьи, в которых она цитируется: http://www.ncbi.nlm.nih.gov/pubmed?linkname=pubmed_pubmed_citedin&from_uid=11825149 Проблема в том, что он содержит более 200 ссылок, но показывает только 20 на странице. Ссылка «следующая страница» недоступна по URL-адресу.

Есть ли способ открыть опцию «отправить» или просмотреть содержимое на следующих страницах с помощью python?

Как я сейчас открываю опубликованные страницы:

def start(seed):
    webpage = urlopen(seed).read()
    print webpage


    citedByPage = urlopen('http://www.ncbi.nlm.nih.gov/pubmedlinkname=pubmed_pubmed_citedin&from_uid=' + pageid).read()
    print citedByPage

Из этого я могу извлечь все процитированные ссылки на первой странице, но как их извлечь из всех страниц? Спасибо.


person Joel Green    schedule 25.05.2013    source источник
comment
Прежде чем тратить много времени на изобретение велосипеда, попробуйте научиться использовать Scrapy< /а>. Это упростит сканирование чрезвычайно.   -  person Blender    schedule 25.05.2013


Ответы (1)


Мне удалось получить цитируемые идентификаторы с помощью метода с этой страницы http://www.bio-cloud.info/Biopython/en/ch8.html

Back in Section 8.7 we mentioned ELink can be used to search for citations of a given paper. Unfortunately this only covers journals indexed for PubMed Central (doing it for all the journals in PubMed would mean a lot more work for the NIH). Let’s try this for the Biopython PDB parser paper, PubMed ID 14630660:

>>> from Bio import Entrez
>>> Entrez.email = "[email protected]"
>>> pmid = "14630660"
>>> results = Entrez.read(Entrez.elink(dbfrom="pubmed", db="pmc",
...                                    LinkName="pubmed_pmc_refs", from_uid=pmid))
>>> pmc_ids = [link["Id"] for link in results[0]["LinkSetDb"][0]["Link"]]
>>> pmc_ids
['2744707', '2705363', '2682512', ..., '1190160']
Great - eleven articles. But why hasn’t the Biopython application note been found (PubMed ID 19304878)? Well, as you might have guessed from the variable names, there are not actually PubMed IDs, but PubMed Central IDs. Our application note is the third citing paper in that list, PMCID 2682512.

So, what if (like me) you’d rather get back a list of PubMed IDs? Well we can call ELink again to translate them. This becomes a two step process, so by now you should expect to use the history feature to accomplish it (Section 8.15).

But first, taking the more straightforward approach of making a second (separate) call to ELink:

>>> results2 = Entrez.read(Entrez.elink(dbfrom="pmc", db="pubmed", LinkName="pmc_pubmed",
...                                     from_uid=",".join(pmc_ids)))
>>> pubmed_ids = [link["Id"] for link in results2[0]["LinkSetDb"][0]["Link"]]
>>> pubmed_ids
['19698094', '19450287', '19304878', ..., '15985178']
This time you can immediately spot the Biopython application note as the third hit (PubMed ID 19304878).

Now, let’s do that all again but with the history …TODO.

And finally, don’t forget to include your own email address in the Entrez calls.
person Joel Green    schedule 25.05.2013
comment
Кроме того, поскольку у меня только что была аналогичная проблема: чтобы получить только записи PMC, которые явно ссылаются на данный опубликованный идентификатор pmid в ссылках, эта команда дает желаемое: results = Entrez.read(Entrez.elink(dbfrom="pubmed", LinkName="pubmed_pubmed_citedin", from_uid=pmid)). Похоже, это недокументированная функция, но очевидно, конструирует это путем реверсирования вызов pubmed_pubmed_refs. - person flinz; 01.06.2015