php抓取网页数据插入数据库(mysql查询的关键字是什么?情况怎么处理??)

优采云 发布时间: 2021-10-26 09:24

  php抓取网页数据插入数据库(mysql查询的关键字是什么?情况怎么处理??)

  应用场景:

  1:使用mysql数据库存储数据时,有时一个字段需要存储多个逗号分隔的数据。查询时传入一个关键字,需要在逗号分隔的字段中查询。如何处理这种情况?

  例如:

  爬取时,指定关键字查询,关键字可以多个,用逗号隔开。数据库中对应的字段为:key_word,存储的数据,如:Kaige Java,Kaigejava。所以现在我要查询的关键字是:Kai Ge java。如何检查?

  2:第二种情况,我们更新的是首先判断指定字段是否收录指定字符串。如果未收录,则将指定字段添加到原创字段。

  例如:

  爬取网站时,没有添加这个。判断,如果没有添加,则更新并添加。如何更新这个?

  前期准备:

  创建数据库:

  

  创建表`config_sentiment`(

  `config_sentiment_id` varchar(64) NOT NULL COMMENT'舆情配置表-主键id',

  `config_sentiment_web_name` varchar(60) NOT NULL COMMENT'Grab 网站name',

  `config_sentiment_web_url` varchar(500) NOT NULL COMMENT'Grab 网站 URL',

  `config_sentiment_item_name` varchar(64) NOT NULL COMMENT'item id',

  `config_sentiment_rate` varchar(5) NOT NULL DEFAULT '1' COMMENT'默认抓取频率为1(1小时)',

  `config_sentiment_keyword` varchar(500) NOT NULL COMMENT'获取关键字。多次使用,分开',

  `config_sentiment_newtime` varchar(20) DEFAULT NULL COMMENT'最新捕获时间',

  `config_sentiment_number` int(20) DEFAULT NULL COMMENT'最新捕获的项目数',

  `config_sentiment_adduser` varchar(64) NOT NULL COMMENT'creator',

  `config_sentiment_addtime` varchar(20) NOT NULL COMMENT'创建时间',

  `config_sentiment_updateuser` varchar(64) DEFAULT NULL COMMENT'Updater',

  `config_sentiment_updatetime` varchar(20) DEFAULT NULL COMMENT'更新时间',

  主键(`config_sentiment_id`)

  ) 引擎=InnoDB 默认字符集=utf8;

  插入数据:

  插入`config_sentiment`(`config_sentiment_id`,`config_sentiment_web_name`,`config_sentiment_web_url`,`config_sentiment_item_name`,`config_sentiment_rate`,`config_sentiment_keyword`,`config`add`_sentiment_newtime`,`config_sentiment_newtime`,update`config`config`addtime_s ) values('1','Kay Java','','0','1','投资理财','22100',10,'88888888','20021','88888888', '20021'),('2','凯爪哇','','0','1','百度,天猫','20',10,'88888888','20','88888888', '20'),('3','36','','0','1','理财产品,百度理财,百度理财产品','20021',10,'88888888','20021','88888888','20021');

  查看数据:

  

  我们可以看到url中没有添加。关键字中有多个产品。

  在第一种情况下,有两种解决方案:

  1:使用最常用的,模糊查询。sql语句:

  

  经过like,我们发现有两条数据。虽然模糊查询的模糊性可以是前后。但是这样的歧义,会查询到太多的数据。很多都不是我想要的。

  我只想要关键词【财务管理】的数据。如此海量的数据如何解决精准查询?请看一下:

  解决方案二:

  使用 MySQL 字符串函数 find_in_set();

  具体的sql语句:

  SELECT t.config_sentiment_web_url url,t.config_sentiment_keyword 关键字 FROM config_sentiment t WHERE FIND_IN_SET('Finance', t.config_sentiment_keyword);

  查询后结果:

  

  这解决了问题。

  争议问题 2:更新声明:

  更新 config_sentiment SET config_sentiment_web_url =CONCAT('',config_sentiment_web_url) WHERE LOCATE('http://',config_sentiment_web_url)=0;

  结果:

  

  再次检查它是否已添加到数据库中。

  

  已添加。这个问题已经解决。

  需要注意的是mysql中的字符串连接不是用[+]而是用[concat函数]

  凯歌java(微信ID:kaigejava)

  在本文中,凯哥个人网站:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线