zhaobinglong / myBlog

https://zhaobinglong.github.io/myBlog/
MIT License
7 stars 0 forks source link

记一次nodejs爬虫突破中国卫生人才网考试成绩查询系统 #120

Open zhaobinglong opened 3 years ago

zhaobinglong commented 3 years ago

gbk编码导致乱码

// iconv-lite实现编码的改变
var iconv = require('iconv-lite');

// 注意在request发起请求的时候,
// 就要设置返回的encoding为null
var options = {
    url: path, 
    encoding:null, 
};

request.post(options, function (error, response, body) {
        // 拿到request返回的结果
        // iconv.decode设置要转码的格式
        // 把结果send回去,注意,这样浏览器拿到的结果是直接显示源代码
        let gbkstr = iconv.decode(response.body,'gb2312');
        res.send(gbkstr)  
zhaobinglong commented 3 years ago

提交的字段无法识别

爬虫在进入页面的时候自动获取cookie,请求成绩的时候自动携带cookie,目前存在的问题是,爬虫提交的用户信息,目标站点无法识别

WX20201110-145141@2x
zhaobinglong commented 3 years ago

request配置cookie

var options = {
    url: path, 
    cookie: 'xxxx'
};
zhaobinglong commented 3 years ago

利用postman成功抓取到数据

甚至不需要上传考生名字,只需要身份证号码就可以 image

zhaobinglong commented 3 years ago

成功抓取数据: image

zhaobinglong commented 3 years ago

数据过滤

直接抓取到dom中的内容,会出现大量的\t\n等无意义的空格和回车,利用正则表达式进行过滤

const $ = cheerio.load(content, { decodeEntities: false });
let arr = []
$('table td').each((i, el) => {
  let txt = $(el).text()
  if (txt.length) {
    arr.push(txt.replace(/[\t\n]/g,"")) // 在这里进行过滤
  }
});
zhaobinglong commented 3 years ago

善用postman

postman的提供源代码copy的能力,当postman成功获取数据会,可以打开源代码分析,查看对应语言的代码 image