Python KeyError:DB00001在从web抓取数据时使用SQLite放置数据
我正在使用python BeautifulSoup4从药品库数据库中刮取一些药品数据,然后将这些数据保存到SQLite数据库中,但它给了我一个keyrerror DB00001,我正在附上下面的代码,您可以看到Python KeyError:DB00001在从web抓取数据时使用SQLite放置数据,python,pandas,sqlite,beautifulsoup,Python,Pandas,Sqlite,Beautifulsoup,我正在使用python BeautifulSoup4从药品库数据库中刮取一些药品数据,然后将这些数据保存到SQLite数据库中,但它给了我一个keyrerror DB00001,我正在附上下面的代码,您可以看到 conn=sqlite3.connect("Drug.db") cur=conn.cursor() basic_url='https://www.drugbank.ca/drugs/' event=[] drug=pd.read_excel("drug_li
conn=sqlite3.connect("Drug.db")
cur=conn.cursor()
basic_url='https://www.drugbank.ca/drugs/'
event=[]
drug=pd.read_excel("drug_list.xlsx",header=None)
url_id=drug.iloc[:,0]
for i in url_id:
soup=download(basic_url,i,num_retries=150)
try:
d_iden=identification(soup)
except:
continue
try:
name=d_iden['Name']
except:
name=''
try:
smile=d_iden['SMILES']
if smile=='Not Available':
smile=''
except:
smile=''
interaction,event=interactions(i,name)
d_attr=head_attr(soup)
try:
target=d_attr['Targets']
except:
target=''
try:
enzyme=d_attr['Enzymes']
except:
enzyme=''
try:
carrier=d_attr['Carriers']
except:
carrier=''
try:
transporter=d_attr['Transporters']
except:
transporter=''
#Creat a table named drug first, so that you can use the insert sql code.
cur.execute("insert into drug(id,name,interaction,smile,target,enzyme,carrier,transporter)values(?,?,?,?,?,?,?,?)",(drug[0][i],name,interaction,smile,target,enzyme,carrier,transporter))
conn.commit()
conn.close()
这里的问题是熊猫索引,我承认我觉得有点不可思议。我一直假设DB0001是一个数据库错误,但事实并非如此,是吗?您可以通过提到DB0001实际上是数据帧中第一种药物的ID代码来节省我们所有人的时间。它成为
drug[0][i]
中i
的值,这就是导致错误的原因
您不会告诉我们您的数据帧中ID列的名称,但假设它是“ID”,您需要类似以下内容:
drug=pd.read_excel("drug_list.xlsx",header=None)
for i in drug.index:
...
cur.execute("insert into drug(id,name,interaction,smile,target,enzyme,carrier,transporter)values(?,?,?,?,?,?,?,?)",(drug[i].id,name,interaction,smile,target,enzyme,carrier,transporter))
更新
我想到了一个更简单的解决办法。在
cur.execute
行中,在原始代码中,您应该能够用i
替换drug[0][i]
。也就是说,毕竟是当前行的ID。请给我们完整的回溯,或者在列表中列出完整的错误消息以及哪一行的指示。考虑到你所有的毛毯尝试/除了行,它可以来自的地方不多。你真的创建了一个名为drug
,如评论所述的表吗?@TimRoberts:谢谢你的编辑。在我看来,问题似乎就在这里:drug[0][i]
,OP将受益于使用enumerate()
来获取循环的索引号,以代替当前提供给i
的字符串。这部分是pandas
的非直观魔力drug.iloc
将返回索引列的内容,因此您应该能够使用它索引到drug
。我想。回溯会有帮助。@TimRoberts是的,我确实创建了药物表,但也不起作用