0

我在使用 Python 方面非常陌生,我希望将 Twitter 数据收集到我的 MySQL 数据库中以用于一个项目。我有从本教程收集数据的脚本:

import re
from re import sub
import time
import cookielib
from cookielib import CookieJar
import urllib2
from urllib2 import urlopen
import difflib

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

keyWord = 'nyc'
startingLink = 'https://twitter.com/search/realtime?q='

# begin loop

def main():

    oldTwit = []
    newTwit = []
    while 1 < 2:
        try:
            sourceCode = opener.open ('https://twitter.com/search/realtime?q='+keyWord+'&src=hash').read()
            splitSource = re.findall (r'  <p class="js-tweet-text tweet-text">(.*?)</p>',sourceCode)
            for item in splitSource:
                #print item
                print ''
                print ''
                print '                           '
                aTweet = re.sub(r'<.*?>', '',item)
                print aTweet
                newTwit.append(aTweet)

            comparison = difflib.SequenceMatcher(None, newTwit, oldTwit)
            howSim = comparison.ratio()
            print '##############'
            print howSim

            oldTwit = [None]
            for eachItem in newTwit:
                oldTwit.append(eachItem)

            newTwit = [None]

            time.sleep(howSim*10)

        except Exception, e:
            print str(e)
            print 'errored in the main try'
            time.sleep(555)

main()

这为我提供了我想要收集的推文(我并不是真的想分析这些数据,我更多的是尝试使用 python 自动收集数据以连接到我的数据库。)

我还使用 MySQLdb 连接了我的数据库,并且能够使用一个简单的插入语句将内容添加到我的数据库中:

import MySQLdb
db=MySQLdb.connect(host="127.0.0.1",user="root",passwd="",db="twitinfo")
cursor = db.cursor()
sql = "INSERT INTO tweets(text) VALUES ('?')"
cursor.execute(sql)
db.commit()

所以我的问题是如何用我的插入语句“替换”打印,我需要添加什么来使我的值成为推文文本?我搜索了高低,我没有找到任何有用的东西。我自己也试过,但作为一个 Python 新手,试图猜测它的语法就像大海捞针一样。

4

1 回答 1

0

您显示的 SQL 是将一个由单个问号组成的字符串插入到数据库中。您需要使用VALUES(?)为一个值指定一个占位符,并且您需要将一个值传递给执行函数以使其插入,可能像这样:

sql = "INSERT INTO tweets(text) VALUES (?)"
value = "Apoplectic Fits"
cursor.execute(sql, value)

您需要在顶部将导入行添加到您的 Python 并连接到循环外的数据库。您可能可以将光标创建行放在循环之外。在循环内部,您使用您的推文消息代替value.


阅读MySQLdb的文档后(使用新模块时的推荐做法),您需要使用%s占位符,而不是?.

如果要在变量中插入数据aTweet,则:

sql = "INSERT INTO tweets(text) VALUES (%s)"
cursor.execute(sql, aTweet)

未经测试。理论上,理论与实践没有区别;在实践中,有。

于 2013-10-08T14:47:35.797 回答