最近尝试用 Python3 写一个简单的爬虫程序,后端使用 MySQL 存储爬取的一些数据,其中定义了一张 URLs 表,表结构很简单,如下:
| id | url | flag |
|----|----|-----|
程序逻辑是先抓取一定量的 URL 存到 URLs 表中,然后每次取一条 URL 进行处理,处理完之后就更新 URLs 表中对应的记录。其中 flag 列就是用来标识该 URL 是否已经经过处理,列的值用 YES/NO 表示。
相关代码如下:
def crawler_controller(entry):
# 连接数据库
connection = mysql.connector.connect(user='mysql', password='mysql', database='crawler_db')
# 创建游标
cursor = connection.cursor()
# 无限循环,直到从数据库取出的记录为空
while True:
# 从数据库取出一条 flag 标记为 NO 的记录
sql_select_recored = "SELECT * FROM urls WHERE flag='NO' LIMIT 1"
cursor.execute(sql_select_recored)
get_values = cursor.fetchall()
# 判断该记录是否存在数据
if get_values:
# 处理相应的 url
url_parser(get_values)
# 更新已处理的记录,反复测试过,就是这一条出了问题,始终不能更新数据库记录
cursor.execute("UPDATE urls SET flag='YES' WHERE id='%s'", get_values[0][0])
# 完成处理
connection.commit()
cursor.close()
else
break
# 关闭数据库连接
connection.close()
现在的问题是,调用 url_parser(get_values)函数处理完 URL 之后,接下来的更新数据库记录死活不能生效,按道理说 get_values[0][0]的值就是对应的记录 id ,而且直接在数据库的 CLI 下面,用
UPDATE urls SET flag='YES' WHERE id='1'
测试,这样又是可以更新记录的。
还望有经验的老司机们指点一二。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.