Nodejs 爬虫项目

本文介绍了使用Node.js进行爬虫项目的过程,包括爬虫代码编写,所需模块如request、cheerio、iconv-lite的安装,如何防止网站屏蔽,异步fetch URL操作,数据库存储,前端HTML和JS实现,以及利用Express搭建后端服务器。在项目中还涉及到网页美化,如表格边框、背景图片和搜索框样式的设计。
摘要由CSDN通过智能技术生成

Node.js 爬虫项目

DDL is coming.
Homework gathers, and now my work begins. It shall not end until all the works are done.I pledge my honor to the curriculum I been studying, for this night and all the nights to come.
爬虫要求:
在这里插入图片描述

1.爬虫代码

  1. 需要的模块
    安装所需的模块包
  • npm install request
  • npm install cheerio
  • npm install iconv-lite
  • mysql.js是老师给的
    p.s:写的爬虫文件一定要和这些模块在一个文件夹下,我已经吃过好几次这个苦头了-_-
var fs = require('fs');
var myRequest = require('request');
var myCheerio = require('cheerio');
var myIconv = require('iconv-lite');
require('date-utils');
var mysql = require('./mysql.js');
  1. 要爬取的网站 (看看新闻网)
var source_name = "看看新闻网";
var domain = 'http://www.kankanews.com/';
var myEncoding = "utf-8";
var seedURL = 'http://www.kankanews.com/';

3.想要爬取出来的内容的格式

var seedURL_format = "$('a')";
var keywords_format = " $('meta[name=\"Keywords\"]').eq(0).attr(\"content\")";
var title_format = "$('title').text()";
var date_format = "$('.time').text()";
var author_format = "$('.resource').text()";
var content_format = "$('.textBody').text()";
var desc_format = " $('meta[name=\"Description\"]').eq(0).attr(\"content\")";
var source_format = "$('.resource').text()";
var url_reg = /a\/(\d{4})-(\d{2})-(\d{2})\/(\d{10}).shtml/;
var regExp = /((\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2})|(\d{4}年\d{1,2}月\d{1,2}日)/

注意:若要修改需要爬取的网站,则以上这段代码的最后一行不能随意复制。
引入概念:正则表达式 Regular Expression
在代码中常简写为regex、regexp或RE。需要到所需爬取的网页看源码,找到表达式的规律。
菜鸟教程介绍正则表达式

4.一个神奇的操作——防止网站屏蔽我们的爬虫

var headers = {
   
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36'

5.request模块异步fetch url
概念

  • 同步:一定要等任务执行完了,得到结果,才执行下一个任务。
  • 异步:不等任务执行完,直接执行下一个任务。
function request(url, callback) {
   
    var options = {
   
        url: url,
        encoding: null,
        //proxy: 'http://x.x.x.x:8080',
        headers: headers,
        timeout: 10000 //
    }
    myRequest(options, callback)
};

6.读取种子页面的函数实现

seedget();

function seedget() {
   
    request(seedURL, function(err, res, body) {
    //读取种子页面
        // try {
   
        //用iconv转换编码
        var html = myIconv.decode(body, myEncoding);
        //console.log(html);
        //准备用cheerio解析html
        var $ = myCheerio.load(html, {
    decodeEntities: true });
        // } catch (e) { console.log('读种子页面并转码出错:' + e) };
        var seedurl_news;
        try {
   
            seedurl_news = eval(seedURL_format);
        } catch (e) {
    console.log('url列表所处的html块识别出错:' + e) };
        seedurl_news.each(function(i, e) {
    //遍历种子页面里所有的a链接
            var myURL = "";
            try {
   
                //得到具体新闻url
                var href = "";
                href = $(e).attr("href");
                if (href == undefined) return;
                if ((href.toLowerCase().indexOf('http://') >= 0) || (href.toLowerCase().indexOf('https://') >= 0)) myURL = href; //http://开头的
                else if (href.startsWith('//')) myURL = 'http:' + href; 开头的
                else myURL = seedURL.substr(0, seedURL.lastIndexOf('/') + 1) + href; //其他

            } catch (e) {
    console.log('识别种子页面中的新闻链接出错:' + e) }

            if (!url_reg.test(myURL)) return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它可以让你使用JavaScript来开发服务器端的应用程序。而爬虫是一种自动化程序,用于从互联网上获取数据。在Node.js中,你可以使用一些库来实现爬虫功能,例如`axios`、`cheerio`和`puppeteer`等。 下面是一个使用Node.js实现爬取静态页面的简单示例: 1. 首先,你需要安装Node.js和npm(Node.js的包管理器)。 2. 在你的项目目录下,打开终端并运行`npm init`命令来初始化一个新的Node.js项目,并按照提示填写相关信息。 3. 安装所需的库,例如`axios`和`cheerio`,可以使用以下命令: ``` npm install axios cheerio ``` 4. 创建一个新的JavaScript文件,例如`crawler.js`,并在文件中编写以下代码: ```javascript const axios = require('axios'); const cheerio = require('cheerio'); // 定义要爬取的页面URL const url = 'https://example.com'; // 发起HTTP请求获取页面内容 axios.get(url) .then(response => { // 使用cheerio解析页面内容 const $ = cheerio.load(response.data); // 在页面中查找需要的数据并进行处理 const title = $('h1').text(); console.log('页面标题:', title); }) .catch(error => { console.error('请求页面失败:', error); }); ``` 5. 运行该脚本,使用以下命令: ``` node crawler.js ``` 以上示例代码使用`axios`库发送HTTP请求获取页面内容,然后使用`cheerio`库解析页面内容。你可以根据需要在代码中添加更多的逻辑来处理页面数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值