Python KeyError:DB00001在从web抓取数据时使用SQLite放置数据

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

我正在使用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_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是的,我确实创建了药物表,但也不起作用