Python3使用变量拼接URL调用urllib.request.urlopen报错
问题解决:Python拼接NCBI URL报错unknown url type: "https"
错误原因
你在构造URL的f-string里多添加了双引号,导致最终传递给urllib.request.urlopen()的URL字符串包含了实际的双引号字符(比如"https://www.ncbi.nlm.nih.gov/gene/?term=50964")。urlopen会把开头的"https识别成未知的URL协议,因此抛出URLError。
直接写死URL时,"https://..."里的双引号是Python的字符串界定符,实际传递给函数的是引号内部的纯URL内容;而用f-string时你把双引号也放进了字符串里,这是完全多余的。
修正后的代码
import urllib.request id_pool = [50964, 4552, 7845, 987, 796] for gene_id in id_pool: # 直接拼接URL,不要加额外的双引号 url = f'https://www.ncbi.nlm.nih.gov/gene/?term={gene_id}' print(url) fp = urllib.request.urlopen(url) mybytes = fp.read() mystr = mybytes.decode("utf8") fp.close() print(mystr) break
额外建议
直接爬取NCBI网页可能会触发反爬机制,而且网页结构变化会导致后续解析失效。NCBI官方提供了专门的Entrez编程接口,推荐使用biopython库的Entrez模块来获取基因数据,更稳定合规。
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

