我的代码只是创建一个存储链接的数据库。但由于某些原因,当我打开数据库时,它是一个空表。我不知道为什么会这样。
不会造成任何麻烦
#!/usr/bin/python
import urllib2
from BeautifulSoup import *
import sqlite3
count = 0
ecount = 0
aj = list()
error = list()
run = 1
sql connect
conn = sqlite3.connect('example.db')
cur = conn.cursor()
sql = '''CREATE TABLE URL (LINKS CHAR(512), ID INT(512))'''
cur.execute(sql)
不会造成任何麻烦
def retriver(durl):
newurl = list()
url = durl
notpar = {"#", "None", "NONE", "javascript:void(0)"}
hl = urllib2.urlopen(url, None)
html = hl.read()
hl.close()
soup = BeautifulSoup(html)
tags = soup('a')
这是刮刀
for tag in tags:
new = tag.get('href', None)
newurl.append(new)
for i in newurl:
try:
if i[0] == "/" and i[0:3] != "www":
if i[len(a)] == "/":
i = url[0:len(url)-1] + i
else:
i = url + i
if i[0:3] == "www":
i = "/" + i
if "." not in list(i):
continue
if i[0] == "/":
i = i[1:len(i)]
if i[0:4] != "http":
if i[len(i)] != "/":
i = "/" + i
这就是问题出现的地方
if i not in aj:
if i not in notpar:
aj.append(i)
print i
count += 1
sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''
sqldata = (i, count)
cur.execute(sql, sqldata)
conn.commit()
except:
error.append(i)
ecount += 1
global ecount
global count
global aj
u = raw_input('Enter the url :: ')
aj.append(u)
retriver(u)
不会造成任何麻烦
while True:
try:
retriver(aj[run])
run += 1
if run > 20:
break
print run
except:
run += 1
retriver(aj[run])
print run
答案 0 :(得分:1)
在这一行:
sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''
尝试将其更改为:
sql = '''INSERT INTO URL(LINKS, ID) VALUES (?, ?)'''
此帖子here引用数据库的参数替换API使用?而不是%s 或%d 符号。
答案 1 :(得分:0)
我认为你不应该使用像sql = '''INSERT INTO URL(LINKS, ID) VALUES (%s, %d)'''
要在查询中直接插入变量,请使用以下格式字符串:
sql = cur.execute("INSERT INTO URL(LINKS, ID) VALUES (?,?)",(x,y))