所以我试图从NCBI检索一些数据。我以前编写的代码是由经验更丰富的程序员重写的,但是它没有以我想要的格式返回结果,因此我进行了一些修改/添加:
for plant, disease in plant_disease_list:
search_query = generate_search_query(plant, disease)
handle1 = Entrez.esearch(db="pmc", term=search_query, retmax="10")
record1 = Entrez.read(handle1)
pubmed_ids = record1.get("IdList")
if pubmed_id in pubmed_ids=="":
print("Plant: {} Disease: {} PubmedID: DOI:".format(plant, disease))
else:
for pubmed_id in pubmed_ids:
handle2 = Entrez.esummary(db="pmc", id=pubmed_id)
records = Entrez.read(handle2)
for record in records:
doi = record.get("DOI")
print("Plant: {} Disease: {} PubmedID: {} DOI: http://doi.org/{}".format(plant, disease, pubmed_id, doi))
其中plant_disease_list是先前定义的列表。唯一的问题是,使用此代码,我得到了错误:
Traceback (most recent call last):
File "scraperscript_python.py", line 28, in <module>
if pubmed_id in pubmed_ids=="":
NameError: name 'pubmed_id' is not defined
如果删除了if / else循环,并返回到常规的嵌套for循环,则不会出现语法错误,但是代码不会打印我想要的数据,即,仅打印那些工厂的数据-找到PMID的疾病对。对我可能做错的事有任何想法吗?
当您初次遇到该语句if pubmed_id in pubmed_ids=="":
时未定义。
仅此后,pubmed_ids
上的循环至少执行一次后,pubmed_id
才具有值。
此外,if pubmed_id in pubmed_ids=="":
毫无意义。