Web编程第一个实验项目


题目要求:

新闻爬虫及爬取结果的查询网站
核心需求:
1、选取3-5个代表性的新闻网站 (比如新浪新闻、网易新闻等,或者某个垂直领域权威性的网站比如经济领域的雪球财经、东方财富等,或者体育领域的腾讯体育、虎扑体育等等)建立爬虫,针对不同网站的新闻页面进行分析,爬取出编码、标题、作者、时间、关键词、摘要、内容、来源等结构化信息,存储在数据库中
2、建立网站提供对爬取内容的分项全文搜索,给出所查关键词的时间热度分析。

项目完成步骤

使用Node.js和模板库Cheerio,request做一个爬虫代码,爬取新浪新闻网易新闻中国新闻网中的各个部分。
下面以新浪新闻为例,分析页面:

1. 新闻页面分析

1.1 对某一篇新闻页面元素进行分析:

  • 标题 main-title

  • 作者 show_author

  • 时间 date

  • 关键字:正则化匹配:$('meta[name=\"keywords\"]').eq(0).attr(\"content\")"

  • 内容 article

  • 来源 source

    1.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.shtml doc-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. 网页展示

完成后,又对网页进行了:

  1. 主页设计:实现了两个功能页面的跳转。
  2. CSS设计:使得页面更加美观
  3. 导航栏设计:使得页面的跳转更加方便。
  • 主页
    (localhost:3000):
    关键词查询网页(search.html)
    时间热度分析网页(wordhot.html)

  • 关键词查询网页(search.html):
    当输入想要查询的词后,可以以列表的形式显示查询结果:

    • 仅查询title
    • 查询titlekeywords:
    • 查询titlecontentkeywords:
  • 时间热度分析网页(wordhot.html)

输入想要查询的标题,会显示数据库中的新闻中包含该词的数量,并且按照日期绘制折线图。使得时间热度分析更加直观。

总结

  • 在本次项目中,理解js代码是如何运行的,该怎么设计一个网站的框架,如何使用代码对网页和服务器进行通信,是比较重要也是我比较薄弱的方面。
  • 实践了使用js进行爬虫和构建网页,学习到了前后端如何通过request和response进行交互,怎么在网页中插入图表,对网页设置CSS,完成了作业的要求。
  • 但因为对js和html代码仍然不太熟悉,因此没有完成分页功能,希望在之后对代码进行改进和优化。
  • 通过本次项目发现,只有真实的完成过任务,才能真正掌握一门语言。希望之后也能主动使用js。

  目录