我有一个网络抓取工具。网页抓取工具从我提供的网页收集链接,但是当它检索链接时,由于网站的原因,某些链接会重复。如果新行与旧行完全相同,MYSQL中是否有一种方法可以覆盖数据。
假设我在链接字段中有http://www.facebook.com
我还设法再次选择http://www.facebook.com,我希望后者覆盖旧行。因此我的搜索引擎没有冲突。
答案 0 :(得分:2)
如果last_updated
已存在,我假设您要更新url
日期。否则,没有充分理由进行更新。
INSERT INTO `scrapping_table`
(`url`)
VALUES
("www.facebook.com")
ON DUPLICATE KEY UPDATE
`date_updated` = `datetime.now()`
答案 1 :(得分:1)
调查ON DUPLICATE KEY
行动
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
基本上让你关注一个唯一键的列写下你的insert语句,然后添加
ON DUPLICATE KEY UPDATE col = overwriting value
答案 2 :(得分:0)
如果您的链接字段是唯一的,则可以使用
INSERT INTO "mytable" (link_field, x_column, y_column) VALUES ("www.facebook.com",'something new for x','something new for y')
ON DUPLICATE KEY UPDATE x_column='something new for x', y_column='something new for y'
只需确保您的链接字段是唯一的,如果列中有更多唯一字段,我建议使用第二种方法,因为they建议避免在具有多个唯一索引的表上使用ON DUPLICATE KEY子句。 / p>
尝试
Select "primary_id" from mytable where link_field="www.facebook.com"
计算此SQL中返回的行数。
=>如果count> 0,则使用我们刚刚通过SELECT SQL抓取的“primary_id”更新行
=>如果count == 0,只需插入行
答案 3 :(得分:0)
<强>提防!! 强>
在操作可能会找到数百万个链接的网络爬虫时 你想最小化查询的每个“爬行”过程触发... 你想创建一个独特的链接表,将为机器人提供信息吗?或者您想阻止重复的搜索结果?
唯一网址池表:
阻止重复结果搜索:
如果您使用上述方法编制了网址索引,则无法找到重复的网址,如果有,则表示您的抓取操作存在问题。
即使您在另一个表中有重复值并且您想要搜索它但没有返回重复结果,您也可以在查询中使用DISTINCT。