题目要求:
新闻爬虫及爬取结果的查询网站
核心需求:
1、选取3-5个代表性的新闻网站 (比如新浪新闻、网易新闻等,或者某个垂直领域权威性的网站比如经济领域的雪球财经、东方财富等,或者体育领域的腾讯体育、虎扑体育等等)建立爬虫,针对不同网站的新闻页面进行分析,爬取出编码、标题、作者、时间、关键词、摘要、内容、来源等结构化信息,存储在数据库中
2、建立网站提供对爬取内容的分项全文搜索,给出所查关键词的时间热度分析。
项目完成步骤
使用Node.js和模板库Cheerio,request做一个爬虫代码,爬取新浪新闻,网易新闻,中国新闻网中的各个部分。
下面以新浪新闻为例,分析页面:
1. 新闻页面分析
1.1 对某一篇新闻页面元素进行分析:
标题
main-title作者
show_author时间
date关键字:正则化匹配:
$('meta[name=\"keywords\"]').eq(0).attr(\"content\")"内容
article来源
source1.2 对新闻网页的URL进行分析
https://news.sina.com.cn/c/2021-04-23/doc-ikmxzfmk8553784.shtml https://news.sina.com.cn/c/2021-04-23/doc-ikmyaawc1428218.shtml https://news.sina.com.cn/o/2021-04-22/doc-ikmxzfmk8371786.shtml从上述三个网址可知,每个网页都是由
https://news.sina.com.cn网页链接/o/一个字母2021-04-22年月日,由四个数字-两个数字-两个数字组成doc-ikmxzfmk8371786.shtmldoc-15个字符.shtml
因此可以写出匹配网页的正则化为:/\/(\d{4})-(\d{2})-(\d{2})\/doc-(\w{15}).shtml/
2. 数据库设计和代码实现
2.1 设计数据库
- 在mysql中创建数据库
crawlnews,然后在该数据库里创建表fetches: - 根据第1步分析的网页元素,设置fetches表的结构,url设置的属性为
UNIQUE,因此插入数据之前需要判断是否已经爬取过相同的网页。2.2 数据库连接和查询代码
- 在js爬虫代码中使用mysql,需要先引用mysql文件。
var mysql = require('./mysql.js'); - 其中在
mysql.js连接数据库,并且完成了带参数和不带参数的sql语句查询。(password需要写自己mysql的密码)
3. 网页展示
完成后,又对网页进行了:
- 主页设计:实现了两个功能页面的跳转。
- CSS设计:使得页面更加美观
- 导航栏设计:使得页面的跳转更加方便。
主页
(localhost:3000):
关键词查询网页(search.html)
时间热度分析网页(wordhot.html)关键词查询网页(search.html):
当输入想要查询的词后,可以以列表的形式显示查询结果:- 仅查询
title: - 查询
title和keywords: - 查询
title,content和keywords:
- 仅查询
时间热度分析网页(wordhot.html)
输入想要查询的标题,会显示数据库中的新闻中包含该词的数量,并且按照日期绘制折线图。使得时间热度分析更加直观。
总结
- 在本次项目中,理解js代码是如何运行的,该怎么设计一个网站的框架,如何使用代码对网页和服务器进行通信,是比较重要也是我比较薄弱的方面。
- 实践了使用js进行爬虫和构建网页,学习到了前后端如何通过request和response进行交互,怎么在网页中插入图表,对网页设置CSS,完成了作业的要求。
- 但因为对js和html代码仍然不太熟悉,因此没有完成分页功能,希望在之后对代码进行改进和优化。
- 通过本次项目发现,只有真实的完成过任务,才能真正掌握一门语言。希望之后也能主动使用js。