接上文的爬虫,经过一个下午的时间爬到了近80万的电影下载链接,当时这个数字也吓到我了。
但是当我将这些数据存入数据库时发现,有很多是重复的或者下载链接是错误。今天的工作就是将这些无用的删除。
MySQL删除重复数据
我使用了最笨的办法,就是新建了另一张与旧表相同的新表,将唯一的数据插入新表中。简单粗暴。方法如下:
INSERT INTO movie (title, downlodeUrl)
SELECT
DISTINCT title,downlodeUrl
FROM movies
[2015-05-30 10:24:30] 6142 row(s) affected in 20622 ms
原本80万的数据只剩6000条。
MySQL删除无效数据
无效数据就是下载链接不正确的。我发现在sql语句也有正则表达式的功能,所以直接用SQL语句执行了。
但是MySQL不能在一张表select的时候delete,所以还是需要新开一张表。
方法如下:
//获取开头是http的数据,并创建新表加入其中
CREATE TABLE test AS SELECT downlodeUrl FROM movie WHERE downlodeUrl REGEXP '^http\:\/\/.+$'
//删除符合的条目
DELETE FROM movie WHERE downlodeUrl in
(
SELECT downlodeUrl FROM test
)
//将临时创建的表删除
DROP TABLE test
结果
最后只剩下了3000条数据。