NodeJS爬虫
•新闻爬虫及爬取结果的查询网站
•核心需求:
•1、选取3-5个代表性的新闻网站(比如新浪新闻、网易新闻等,或者某个垂直领域权威性的网站比如经济领域的雪球财经、东方财富等,或者体育领域的腾讯体育、虎扑体育等等)建立爬虫,针对不同网站的新闻页面进行分析,爬取出编码、标题、作者、时间、关键词、摘要、内容、来源等结构化信息,存储在数据库中。
•2、建立网站提供对爬取内容的分项全文搜索,给出所查关键词的时间热度分析。
•技术要求:
•1、必须采用Node.JS实现网络爬虫
•2、必须采用Node.JS实现查询网站后端,HTML+JS实现前端(尽量不要使用任何前后端框架)
一、数据获取
通过爬取中国财经网
http://finance.china.com.cn/ 的新闻内容,如图所示。
然后,通过JavaScript编写相关爬虫代码,获取相应的新闻URL和相关信息
获取URL:这里需要根据要爬的网站的格式修改url_reg,这是一个正则表达式,该网站的格式为 http://finance.china.com.cn/…一些内容/ 8个数字/ 7个数字 .shtml
具体表示为:
//http://finance.china.com.cn/news/20210427/5559544.shtml
var url_reg = /\/(\d{8})\/(\d{7}).shtml/;
当url_reg格式正确了才能通过test,从而获得url
输出为:
获取到url以后就可以调用获取新闻内容的方法,在调用前需要判断该新闻是否已经爬过
newsGet(myURL)方法
需要解析HTML页面,动态执行format字符串
这里要注意的是各个网址的属性的format可能会有不同,需要查看网页源代码重新确认format,这里也是我当时的踩坑之处,因为format设置的不正确导致提取不到对应的内容。
获取title/keywords/author/publish_date/crawltime/content/createtime
当提取到相应属性的内容后,就可以将其插入数据库
- 数据库的schema为:
- 将id_fetches作为主键,url保证唯一性
通过Navicat查看数据库表,共134条数据:
二、前端展示
具体步骤为:
•1、用mysql查询已爬取的数据
- 根据标题搜索相关的新闻条目,实现模糊查询
•2、用网页发送请求到后端查询
- 当在网页中点击查询button后,将会路由到/process_get?title= input 将input传入函数中进行sql语句的模糊查询
•3、用express构建网站访问mysql
-
这里的express框架类似于一个路由,不同的请求对应了不同的路由,实现前后端的交互
-
作为一个颜控,不能忍受自己的前端过于简陋,因此这里我使用了一个叫做layui的前端辅助模板,简而言之,可以引用layui里自带的css样式来美化前端,这为自己动手设计前端省下了很多功夫,其具体用法见官方文档 www.layui.com
-
通过引入链接,就可以使用它自带的css模板了
-
比如:
- 在实现展示数据的基础上,我对数据做了一个分页,layui有相应的分页模板,在上面作相应改动即可,这里主要是输出的数据格式需要改动,需要用 $(#record2)这个类型的对象写出数据
•4、用表格显示查询结果
-
通过查询与标题相关的信息,可以进行查询
-
可以进行分页
-
同样的前端,可以再创建一个HTML文件,路由到/time_analysis 更改sql语句,获取时间分析