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