前端设计与开发—— 新闻爬虫及查询网站建立(2)

前端设计与开发—— 新闻爬虫及查询网站建立(2)

任务简介

在这里插入图片描述
主要的任务是首先通过爬虫收集数据,而后建立网站进行查询和分析,由于篇幅限制,这篇博客主要介绍爬虫的设置,选取澎湃新闻,网易新闻,新浪体育这三个网站进行爬取。

数据表准备

根据要求,我们建立以下结构的数据表用于存储爬取所得的数据:

CREATE TABLE  news (
	source_encoding VARCHAR(20),
	title VARCHAR(300) NOT NULL,
	author VARCHAR(30),
	publish_date VARCHAR(50),
	keywords VARCHAR(100),
	description VARCHAR(2000),
	content TEXT,
	PRIMARY KEY (title)
)

模块引用

fs用于文件读写,myRequest用于进行http请求,cheerio主要是用来获取抓取到的页面元素和其中的数据信息。其中myIconv主要进行编码转换,由于爬取的是中文页面,而request不支持GBK格式的编码,因此如果网页是GBK格式的,用该模块iconv来完成转码工作。。

var fs = require('fs');
var myRequest = require('request')
var myCheerio = require('cheerio')
var myIconv = require('iconv-lite')

定义地址

###三个页面的地址
var seedURL = 'http://sports.sina.com.cn/'
var seedURL = 'https://www.thepaper.cn/'
var seedURL = 'https://news.163.com/';

获取种子页面

主要使用cheerio模块对html页面进行解析,并使用正则表达式进行url地址的规范化,筛选爬取的url。

request(seedURL, function(err, res, body) { 

    var html = myIconv.decode(body, myEncoding);
    var $ = myCheerio.load(html, { decodeEntities: true });
    var seedurl_news;
    try {
        seedurl_news = eval(seedURL_format);
    } catch (e) { console.log('Url Error:' + e) };

    seedurl_news.each(function(i, e) { 
        try {
            var href = "";
            href = $(e).attr("href");
            if (href.toLowerCase().indexOf('http://') >= 0) myURL = href; 
            else if (href.toLowerCase().indexOf('https://') >= 0) myURL = href;
            else if (href.startsWith('//')) myURL = 'http:' + href;
            else myURL = seedURL.substr(0, seedURL.lastIndexOf('/') + 1) + href; 

        } catch (e) { console.log('Link Detection Error' + e) }
        if (myURL.indexOf("doc-")== -1) return;
        console.log(myURL);
        newsGet(myURL);
    });
});

读取新闻页面

在这一步我们解析新闻页面的内容,将其结构化存入数据库当中,我们依旧运用request,iconv-lite,cheerio解析获取信息。

function newsGet(myURL) { //读取新闻页面
          request(myURL, function(err, res, body) { 
              if (body != undefined){
                  var html_news = myIconv.decode(body, myEncoding); 
                  var $ = myCheerio.load(html_news, { decodeEntities: true });
                  myhtml = html_news;  
                  console.log("转码读取成功:" + myURL);
                  var fetch = {};
                  ## fetch储存了所有的字段信息
                  ## 解析过程省略
              }
      }
}                  

在获取信息后,整合成SQL语句,连接Mysql进行插入:

const  mysql=require('mysql')
const db=mysql.createPool({host:'localhost',port:'3306',user:'root',password:'root',database:'crawl'});
str=`'`+fetch.source_encoding+`'`+','+`'`+fetch.title+`'`+','+`'`+fetch.source_name+`'`+','+`'`+fetch.publish_date+`'`+','+`'`+fetch.keywords+`'`+','+`'`+fetch.desc+`'`+','+`'`+fetch.content+`'`
querystr='INSERT INTO news (source_encoding,title,author,publish_date,keywords,description,content) VALUE('+str+');'

实验结果

在运行爬虫后,在MySQL中进行查询,发现已经存储成功啦!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值