上文:
新闻爬虫及查询网站的实现(〇):实验任务与内容介绍
新闻爬虫及查询网站的实现(一):爬虫基本框架的实现
新闻爬虫及查询网站的实现(二):具体网站具体解析
1. 实验内容
- 完成最少一个目标网站的分析和爬虫设计;
- 爬取不少于100条数据(每条数据包括最少3个字段,标题、内容和时间),并存储在数据库中;
- 完成对数据库中爬取数据内容或标题的搜索功能,搜索结果以表格形式展示在前端页面中;
- 完成对搜索内容的时间热度分析。
2. 实验任务
- 爬取数据。
- 数据库交互:
- 创建并连接数据库;
- 实现主要操作的函数的封装。
- 新闻检索。
- 前端设计。
3. 实验步骤
1. 爬取数据
2. 数据库交互
- 写在前面
我们刚刚爬虫后已经得到了结构化的json数据,现在我们要把它们保存起来存入数据库中。
我一开始准备用MySQL,但是我的电脑上的MySQL莫名不稳定,在这个实验中,我调试的时候,就遇到过连接明明成功还回了连接池,但是连接计数并没有减少,导致了一种假的连接满状况,无法连接数据库;还有的时候可能是因为循环+异步的原因,query执行了多次;并且,比起出这种问题更可怕的事情是,有的时候它就又自己好了,代码一字未动却能正常运行,让我非常不能理解到底发生了什么……然后我准备用MongoDB,但是调试过程中可能是因为把连接关了,让整个MongoDB的端口都关闭无法连接上了,MongoShell都不能用了。
最后我还是决定使用MySQL,虽然有时插入会出现重复,但至少本身查询都是ok的,并且有UNIQUE限制,防止重复插入。 - 数据库基本设计
我只建立了一张表;其实可能可以把keywords拆分开来单独建表会比较好……我插入的列有
此外,插入数据库时,还会生成id和时间戳。fetches:{title, content, publish_date, url, source_name, source_encoding, crawltime, keywords, author, source, desc}
由于要按照时间热度排序,所以我们可以在publish_date上建立索引。同时搜索会经常用到title、content、keywords和desc,所以数据库较大时,也可以在这几列上建立索引。
直接用sql语句创建表即可。CREATE DATABASE `crawl`; USE `crawl`