Ich möchte große wissenschaftliche abstrakte Daten für etwa 2000 Pubmed IDs herunterladen. Mein Python-Code ist schlampig und scheint ziemlich langsam zu arbeiten. Gibt es eine schnelle und effiziente Methode, um diese Abstracts zu ernten?Gibt es eine schnelle und effiziente Möglichkeit, Abstracts von Pubmed zu erhalten?
Wenn dies die schnellste Methode ist, wie kann ich es messen, damit ich im Vergleich zu anderen oder zu Hause gegen Arbeitssituation vergleichen kann (verschiedene ISP kann eine Rolle in der Geschwindigkeit spielen)?
Angehängt mein Code unten.
import sqlite3
from Bio.Entrez import read,efetch,email,tool
from metapub import PubMedFetcher
import pandas as pd
import requests
from datetime import date
import xml.etree.ElementTree as ET
import time
import sys
reload(sys)
sys.setdefaultencoding('utf8')
Abstract_data = pd.DataFrame(columns=["name","pmid","abstract"])
def abstract_download(self,dict_pmids):
"""
This method returns abstract for a given pmid and add to the abstract data
"""
index=0
baseUrl = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/"
for names in dict_pmids:
for pmid in dict_pmids[names]:
try:
abstract = []
url = baseUrl+"efetch.fcgi?db=pubmed&id="+pmid+"&rettype=xml"+
response=requests.request("GET",url,timeout=500).text
response=response.encode('utf-8')
root=ET.fromstring(response)
root_find=root.findall('./PubmedArticle/MedlineCitation/Article/Abstract/')
if len(root_find)==0:
root_find=root.findall('./PubmedArticle/MedlineCitation/Article/ArticleTitle')
for i in range(len(root_find)):
if root_find[i].text != None:
abstract.append(root_find[i].text)
if abstract is not None:
Abstract_data.loc[index]=names,pmid,"".join(abstract)
index+=1
except:
print "Connection Refused"
time.sleep(5)
continue
return Abstract_data
EDIT: Der allgemeine Fehler, der für diesen Skript auftritt, ist scheinbar eine "Connection Refused". Sehen Sie die Antwort von ZF007 unten, wie das gelöst wurde.
Ich wähle diese Frage zu schließen, wie Off-Topic, weil scheint wie eine bessere Passform für biostars.org oder https://bioinformatics.stackexchange.com/ – Stedy
@Stedy Die Frage, obwohl fehlen einige Informationen wie die importierten Module und der Fehler oder das Problem mit dem angezeigten Code scheint eine 'Anfrage'-Frage zu sein. Der biologische Kontext ist sekundär und hat daher einen Platz im Stack Overflow IMO. – rodgdor
@Nishal Könnten Sie zu Ihren Fragen die importierten Module hinzufügen und auch was scheint der Fehler/das Problem mit Ihrem Code zu sein? – rodgdor