本座今天在体验 BioPython教程中的一段关于Entrez的代码:
#!/usr/bin/python
#coding:utf-8
from Bio import Entrez
Entrez.email="hxcan@stupidbeauty.com"
handle=Entrez.einfo()
result=handle.read()
print result
把文件一保存 ,一运行,结果:
root@HxcanPcAtPacketScout ~/Develop/Python/Entrez pts1 # ./Entrez.py
Traceback (most recent call last):
File "./Entrez.py", line 11, in <module>
handle=Entrez.einfo()
File "/usr/lib/python2.6/site-packages/Bio/Entrez/__init__.py", line 186, in einfo
return _open(cgi, variables)
File "/usr/lib/python2.6/site-packages/Bio/Entrez/__init__.py", line 358, in _open
handle = urllib2.urlopen(cgi)
File "/usr/lib/python2.6/urllib2.py", line 124, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 383, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 401, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 361, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1130, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1105, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error [Errno 104] Connection reset by peer>
看看最后一句关键的错误描述信息 : Connection reset by peer ,多么亲切的错误信息啊。方爷爷,尼玛的。
去下载个 SocksiPy,放到你的脚本所在的目录或者是 Python的其它包含路径 中,再在代码中使用 SocksiPy的功能为 urllib2设置好代理服务器。具体地设置什么代理服务器就要看你是如何翻墙的咯。
比如说本座用的 SSH隧道,于是代理就要设置成 socks类型的,脚本里加上这样的代码:
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 7070)
socket.socket = socks.socksocket
这样 , urllib就会通过代理来访问 网络咯。
最终形成的完整代码是这样的 :
#!/usr/bin/python
#coding:utf-8
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 7070)
socket.socket = socks.socksocket
from Bio import Entrez
Entrez.email="hxcan@stupidbeauty.com"
handle=Entrez.einfo()
result=handle.read()
print result
执行结果 ,这个看着更亲切 :
root@HxcanPcAtPacketScout ~/Develop/Python/Entrez pts1 # ./Entrez.py
<?xml version="1.0"?>
<!DOCTYPE eInfoResult PUBLIC "-//NLM//DTD eInfoResult, 11 May 2002//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/eInfo_020511.dtd">
<eInfoResult>
<DbList>
<DbName>pubmed</DbName>
<DbName>protein</DbName>
<DbName>nuccore</DbName>
<DbName>nucleotide</DbName>
<DbName>nucgss</DbName>
<DbName>nucest</DbName>
<DbName>structure</DbName>
<DbName>genome</DbName>
<DbName>biosample</DbName>
<DbName>biosystems</DbName>
<DbName>blastdbinfo</DbName>
<DbName>books</DbName>
<DbName>cancerchromosomes</DbName>
<DbName>cdd</DbName>
<DbName>gap</DbName>
<DbName>dbvar</DbName>
<DbName>epigenomics</DbName>
<DbName>gene</DbName>
<DbName>genomeprj</DbName>
<DbName>gensat</DbName>
<DbName>gds</DbName>
<DbName>geo</DbName>
<DbName>geoprofiles</DbName>
<DbName>homologene</DbName>
<DbName>images</DbName>
<DbName>journals</DbName>
<DbName>mesh</DbName>
<DbName>ncbisearch</DbName>
<DbName>nlmcatalog</DbName>
<DbName>omia</DbName>
<DbName>omim</DbName>
<DbName>pmc</DbName>
<DbName>popset</DbName>
<DbName>probe</DbName>
<DbName>proteinclusters</DbName>
<DbName>pcassay</DbName>
<DbName>pccompound</DbName>
<DbName>pcsubstance</DbName>
<DbName>seqannot</DbName>
<DbName>snp</DbName>
<DbName>sra</DbName>
<DbName>taxonomy</DbName>
<DbName>toolkit</DbName>
<DbName>toolkitall</DbName>
<DbName>unigene</DbName>
<DbName>unists</DbName>
<DbName>gencoll</DbName>
</DbList>
</eInfoResult>
SocksiPy在这里下载:
•. 直接下载 1.00版本: http://sourceforge.net/projects/socksipy/files/socksipy/SocksiPy%201.00/SocksiPy.zip/download
怪不得祖国的科技跟不上世界勒 ,NCBI都封。
去你妈 ,方爷爷。
HxLauncher: Launch Android applications by voice commands