我很擅长使用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连接数据库,并且能够使用简单的insert语句向我的数据库添加内容:
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()
所以我的问题是如何用insert语句“替换”print,以及我需要添加什么才能使我的值成为推文文本?我搜索了高低,我找不到任何有用的东西。我也试过自己,但作为一个Python新手,试图猜测这个语法就像在大海捞针一样。
答案 0 :(得分:0)
您显示的SQL是将包含单个问号的字符串插入到数据库中。您需要使用VALUES(?)
为值指定占位符,并且需要将值传递给execute函数以便插入,可能是这样的:
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)
未测试。从理论上讲,理论与实践没有区别;在实践中,有。