在看此篇文章前请确保已了解DIPRE算法实现:https://blog.csdn.net/qq_39591838/article/details/102628466
1、数据库结构
改进后在数据库中有三张表webpage、patterns、seeds:
webpage表如下,其中mark字段表示该条数据是否已经被算法处理:
patterns表用于存储形成的模式:
2、MySql数据库交互
seeds中存储初始元组和通过算法获取到的元组
在代码最上方需要加上统一编码格式UTF-8:
# encoding:utf-8 |
在获取data,即webpage表中的数据时,需要获取所有mark = 0的未处理过的url,并且此时暂不通过爬虫获取其内容
sql = "select * from webpage where mark = 0" |
因为新增Patterns表,需要新增获取patterns表中数据的函数:
def GetPatterns(): # 获取数据库中的所有模式
cursor = db.cursor()
sql = "select * from patterns"
patterns = []
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
each = {}
each['id'] = row[0]
each['order'] = row[1]
each['urlprefix'] = row[2]
each['prefix'] = row[3]
each['middle'] = row[4]
each['suffix'] = row[5]
patterns.append(each)
except:
db.rollback()
cursor.close()
return patterns
以及将形成的模式添加到数据库中的函数:
def SavePattern(order,urlprefix,prefix,middle,suffix): # 将查找到的模式存储到数据库中
cursor = db.cursor() # MySQLdb.escape_string()函数返回的字符串是byte类型的,需要重新解码成Unicode,注意双引号在外单引号在内
sql = "INSERT INTO patterns(order_p,urlprefix,prefix,middle,suffix) VALUES (%d,'%s','%s','%s','%s')" % (order,MySQLdb.escape_string(urlprefix).decode('utf-8'),MySQ