Python没有将抓取的数据保存到sqlite数据库

时间:2019-04-11 22:37:08

标签: python sqlite

我刮了一些网站,并将html信息存储在sqlite数据库中。现在,我要提取并存储电子邮件地址。我能够成功提取并打印ID和电子邮件。

一切正常运行,打印时数据看起来很好。但是,由于某种原因,它没有保存到sqlite数据库中。我不知道为什么。该代码运行没有错误,但是数据库中没有任何列的数据。但是,“电子邮件”表已创建,但是没有数据。

我已经确保我的sql语句可以正常运行,并且在直接运行代码时可以正常工作。我要保存的信息在python中被归类为str对象。

这是我运行代码时(下面的链接)打印的示例。

enter image description here

PYTHON
import sqlite3
import re

conn = sqlite3.connect('spider.sqlite')
cur = conn.cursor()

cur.execute('CREATE TABLE IF NOT EXISTS Emails \
    (id INTEGER PRIMARY KEY AUTOINCREMENT, url TEXT, email TEXT, test TEXT)')
cur.execute('SELECT id, html, url FROM Pages \
    WHERE html is NOT NULL and email is NULL ORDER BY RANDOM()')
#print('This is x: ', x)#for testing purposes
test = 'test'
print(test)

for row in cur.fetchall():
    id = row[0]
    html = row[1]
    url = row[2]

    email = re.findall(b'[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+', \
        html)
    #print(email)#testing purposes
    print(email)

    for each in email:
        each = str(each)
        print(url)
        print(type(each))
        print(type(url))
        print('for each: ', url, each)

        conn.execute('INSERT OR IGNORE INTO Emails (url, email, test)\
            VALUES ( ?, ? , "test" )', ( url, each,  ) )

    conn.commit

我想将url和电子邮件文本信息保存在数据库中。在“为每个”之后的打印输出示例中显示出来

1 个答案:

答案 0 :(得分:0)

您需要sql吗?尝试simpledb,我也编写了自己的数据库,该数据库也支持从多个线程读取数据,我认为您必须在输入数据后将save()数据推送到sql数据库中