WEB编程Javascript实验报告

本文是一份JavaScript实验报告,详细记录了使用Node.js环境,包括安装npm,下载jQuery,实现网页爬虫,用正则表达式抓取新闻网页URL,解析并存储到MySQL数据库,以及通过Express实现搜索和表格展示的功能。同时,文章讨论了Js对象、Promise对象以及正则表达式的应用。
摘要由CSDN通过智能技术生成

前言

写给广大网友: 如果不是为了作业我甚至不会写这篇博客, 这篇博客没有任何技术参考价值, 反而可能给各位造成误导, 请各位慎重参考莫要完全置信! 

写给助教: 大多数内容是我学习笔记直接Paste上来的...未必代表我的学习顺序. 

任务: 安装环境

小任务: 安装node.js

直接从node.js官网上下载即可

小任务: 使用npm

如果要安装某个模块, 只要使用npm i 命令即可. 

npm i xxxx

爬虫需要的模块是: 

const my_encoding = "utf-8";
const request = require('request');
const myIconv = require('iconv-lite');
const myCheerio = require('cheerio');
const fs = require('fs');
const { stringify } = require('qs');

安装express就能覆盖其中大部分的需要. 

小任务: 下载jQuery

从jQuery官网上下载它, 点击链接选择链接另存为, 在网页中使用的时候需要先将jQuery写入网页. 

任务: 爬取网页

小任务: 学会使用request

request的第一个参数包括请求头, url, 编码方式等信息, 代表请求; 第二个参数代表回调函数, 其中body部分相当于网页中的document对象

//重新包装后柯里化的request函数
let my_req = (callback) => (url) => {
    let options = {
        url: url,
        encoding: null,
        headers: headers,
        timeout: 1000
    }
    try {
        request(options, (error, response, body) => {//request的第一个参数包括请求头, url, 编码方式等信息, 代表请求; 第二个参数代表回调函数, 其中body部分相当于网页中的document对象
            try {
                if (!error && response.statusCode === 200)
                    callback(body);
                else {
                    console.error("访问 " + url + " 超时, 原因可能是网络不佳或爬虫被屏蔽  " + error + " " + response);
                    fails++, console.log("有" + fails + "次请求中的失败");
                }
            } catch (e) { console.log("回调" + url + " 时出现错误 " + e) }
        })
    } catch (e) { console.error("访问不成功, 可能是非法的url格式, 或回调函数中出现了错误" + e); }
}

小任务: 用正则表达式匹配新闻网页的url

分支小任务: 初步掌握Js类和对象

Js是一种动态语言, 因此它的对象并不是通过声明来固定某种类型, 而是通过调用构造函数生成对象并将它赋值给某个变量. 

对象的成员变量(或叫属性)和函数(或叫方法). 

分支小任务: 获得一个正则表达式

只需要调用正则表达式的构造函数或者通过简便写法'/a/'就行. 

var regexp = new RegExp("a");
var regexp_ = /a/;

正则表达式能够作为字符对象match函数的参数(模式串)使用, match函数的返回值是一个子串, 使得其存在从第0个字符开始的子串能够与模式串匹配. 

分支小任务: 正则表达式的匹配逻辑

由于在Leetcode上写过正则表达式那个题, 所以我对两种特殊的模式串'.'和'*'还是比较熟悉的. 

bool isMatch(string &s, string &p, int _s = 0, int _p = 0) {
    if (_p + 1 < p.size() && p[_p + 1] == '*') {
        if (isMatch(s, p, _s, _p + 2)) return true;
        for (int i = 1; _s + i - 1 < s.size(); i++) {
            if (p[_p] != '.' && p[_p] != s[_s + i - 1]) break;
            if (isMatch(s, p, _s + i, _p + 2)) return true;
        }
        return false;
    }
    if (_s >= s.size() && _p >= p.size())  return true;
    if (_s >= s.size() || _p >= p.size())  return false;
    return (p[_p] == '.' || p[_p] == s[_s]) && (isMatch(s, p, _s + 1, _p + 1));
}

能匹配一类字符的特殊字符: '\d'匹配所有数字和'\w'匹配所有字母; '[abc]'匹配方括号内的任意一个字符. 

决定匹配次数的特殊字符: '*'匹配它前面的字符任意次(包括0次); '?'匹配它前面的字符0次或1次; '+'匹配它前面的字符1次或更多次. 

决定匹配开始和结束的特殊字符: '^'待匹配串的开头是模式串; '$'它之前的待匹配串的结尾是模式串. 

分支小任务: 解析新闻网页的url并写出正确的正则表达式

一个网页是新浪主页上的新闻网页, 当网页的url不是.html就是.shtml或者.phtml结尾, 且用https://作为开头. 

var news_reg = /https?:\/\/[\S]*.s?p?html$/;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值