我是一名生物学家,在Python方面有一点编程经验。我的一种研究方法是使用这个数据库分析大型基因列表:https://david.ncifcrf.gov/ 任何人都可以告诉我是否可以对输出进行关键字搜索并返回与关键字相关的基因名称?这是针对“表”输出的,它看起来像这样:https://david.ncifcrf.gov/annotationReport.jsp?annot=59,12,87,88,30,38,46,3,5,55,53,70,79¤tList=0 还有后端和api选项。 非常感谢所有的见解和建议。
答案 0 :(得分:0)
如果有一个API可以为您提供所有数据,您可以自动化几乎与之相关的所有内容。 API是REST或SOAP,所以首先你要弄清楚你需要什么。
如果API是RESTful:
import urllib2, json
url = "https://mysuperapiurl.com/api-ws/api/port/"
u = 'APIUsername'
p = 'APIPassword'
def encodeUserData(user, password):
return "Basic " + (user + ":" + password).encode("base64").rstrip()
req = urllib2.Request(url)
req.add_header('Accept', 'application/json')
req.add_header("Content-type", "application/x-www-form-urlencoded")
req.add_header('Authorization', encodeUserData(u, p))
res = urllib2.urlopen(req)
j = json.load(res) # Here is all the data from the API
json_str= json.dumps(j) # this is the same as above as string
如果API是SOAP,则会变得更难。我推荐的是zeep。如果由于您的服务器是2.6或因为有几个人正在使用它而无法实现,那么请使用suds
。
使用suds API调用如下所示:
import logging, time, requests, re, suds_requests
from datetime import timedelta,date,datetime,tzinfo
from requests.auth import HTTPBasicAuth
from suds.client import Client
from suds.wsse import *
from suds import null
from cStringIO import StringIO
from bs4 import BeautifulSoup as Soup
log_stream = StringIO()
logging.basicConfig(stream=log_stream, level=logging.INFO)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
WSDL_URL = 'http://213.166.38.97:8080/SRIManagementWS/services/SRIManagementSOAP?wsdl'
username='username'
password='password'
session = requests.session()
session.auth=(username, password)
def addSecurityHeader(client,username,password):
security=Security()
userNameToken=UsernameToken(username,password)
security.tokens.append(userNameToken)
client.set_options(wsse=security)
addSecurityHeader(client,username,password)
arg1 = "argument_1"
arg2 = "argument_2"
try:
client.service.GetServiceById(arg1, arg2)
except TypeNotFound as e:
print e
logresults = log_stream.getvalue()
你将收到xml作为回报,所以我使用beautifulsoup
来美化结果:
soup = Soup(logresults)
print soup.prettify()
好的,所以API连接部分被覆盖,你在哪里存储你的数据,你在哪里迭代这些数据来执行关键字搜索?在您的数据库中。我推荐MySQLdb
。设置您的表并考虑您将在哪一列中存储哪些信息(您从API收集的信息)。
def dbconnect():
try:
db = MySQLdb.connect(
host='localhost',
user='root',
passwd='password',
db='mysuperdb'
)
except Exception as e:
sys.exit("Can't connect to database")
return db
def getSQL():
db = dbconnect()
cursor = db.cursor()
sql = "select * from yoursupertable"
dta = cursor.execute(sql)
results = cursor.fetchall()
return results
def dataResult():
results = getSQL()
for column in results:
id = (column[1])
print dataResult()
因此,您可以在此处设置关键字(也可以通过其他SQL执行此操作),并将从数据库中提取的结果与列表,字典,文本文件或硬编码关键字进行比较,并定义如果匹配等应该怎么做:)