JavaScript反爬笔记(6)_Python借助Nodejs调用JS文件

news/2024/7/19 9:44:53 标签: 爬虫, JavaScript, Nodejs, Express, body-parser

一、环境搭建:安装 Node.js + Cnpm + Express + Body-parser

【Node.js 】是运行在服务端的 JavaScript,它基于Google的V8引擎的
安装Node:官网 https://nodejs.org/zh-cn/

npm(node package manager):nodejs自带的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)
【Cnpm】:是一个完整 npmjs.org 镜像,由于服务器在国内,所以速度会快很多
安装Cpnm:官网 https://npm.taobao.org/

Express是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。
安装Express:官网 http://www.expressjs.com.cn/

body-parser】是一个HTTP请求体解析中间件,它只处理 POST 请求,可以解析JSON、Raw、文本、URL-encoded格式的请求体,然后转成键值对的对象赋值给req.body
安装body-parser:http://github.com/expressjs/body-parser

cnpm install body-parser

参考链接1:https://www.jianshu.com/p/ea0122ad1ac0
参考链接2:https://segmentfault.com/a/1190000016707134

二、JS文件

1、sum.js

// 示例函数:加法函数
// 未来放抠出来的加密js函数
function add(a,b){
	return a+b;
}

// 通过module.exports对外公开的方法才可以访问
module.exports = {
 add
}

2、main.js(跟sum.js放在同一个文件夹下)

// main.js
// require(id):Used to import modules, JSON, and local files
// 参考:http://nodejs.cn/api/modules/require_id.html

// 引入依赖包
var express = require('express')
var bodyParser = require('body-parser')

// 引入自定义的JS文件
// 路径:/表示根目录  ./表示当前目录  ../表示父级目录
var sum = require("./sum")

// 创建应用实例
var app = express()

// 使用 body-parser 中间件
// urlencoded和json,分别处理表单提交和json格式的请求体,只支持utf-8编码
// 当Content-Type 为 x-www-form-urlencoded 的时候,POST 的请求数据是表单
// Content-Type 为 application/json 的时候,HTTP POST请求数据是JSON的
/* 当urlencoded中extended为false时,会使用querystring库解析URL编码的数据,键值对中的值就为'String'或'Array'类型
   当urlencoded中extended为true时,会使用qs库解析URL编码的数据,键值对中的值是任意类型
   默认是True    */
// 参考链接:表单提交和json提交 https://blog.csdn.net/qq_15037231/article/details/80403581

// for parsing application/x-www-form-urlencoded
// 判断请求体格式是不是表单格式,如果是的话会调用qs库把请求体字符串转成对象
app.use(bodyParser.urlencoded({ extended: true }));
// for parsing application/json
// 判断请求体格式是不是json格式,如果是的话会调用JSON.parse方法把请求体字符串转成对象
app.use(bodyParser.json());
// 上面两个只会有一个生效


// 创建路由
// app.post(path, callback [, callback ...])
// app.post("url",function(req, res) {具体逻辑})
// http://www.expressjs.com.cn/4x/api.html#app.post.method
app.post('/get_num', function (req, res) {
    // req.body:Contains key-value pairs of data submitted in the request body
    // 获取请求路径中传递的查询参数
	let result = req.body
	console.log("result",result)    // 在控制台输出
	let a = parseInt(result.a)    // 将客户端传过来的属性a强制转换成整数类型
	let b = parseInt(result.b)    // 将客户端传过来的属性b强制转换成整数类型
	result = sum.add(a,b)
	res.send(result.toString());	// 将结果返回,只支持字符串类型或者json格式
})

// app.listen([port[, host[, backlog]]][, callback])
// 启动服务,监听指定主机和端口上的连接
app.listen(3000,() =>{
	console.log("开启服务,端口3000")
})

3、启动服务

(1)启动CMD命令窗口
(2)cd 进文件存放目录
(3)运行主文件,启动服务 node main.js

三、Python 调用

import requests

url = "http://localhost:3000/get_num"
data = {"a":1,"b":2}
req = requests.post(url,data)
print(req.text)
# 输出 3

 

四、其它

// window,document,screen等浏览器相关的对象,在js中有,但在nodejs中缺少
// 解决方法之一是:声明一个相应的全局变量
var window = {}
// window.bort = funtion(aaa){return aaa}
var document = {}
document = {"location":{"href":"www.baidu.com"}}
var screen = {}
screen = {"width" = 900, "height" = 1600}

// 解决方法之二,是利用jsdom、jest等库
// https://github.com/jsdom/jsdom
// https://jestjs.io/zh-Hans/


// window.bort用于创建一个 base-64 编码的字符串。
// base-64 解码使用方法是 atob() 

// nodejs中base-64 编码
Buffer.from('Hello').toString('base64')    // 输出SGVsbG8=
// nodejs中base-64 解码
Buffer.from('SGVsbG8=', 'base64').toString('ascii')    // 输出hello
// 可参考 https://www.jianshu.com/p/fa46e67eab74

 

end

 


http://www.niftyadmin.cn/n/975363.html

相关文章

微软政务云支持HDInsight和PowerBI Pro

微软宣布在微软政务云中支持HDInsight和Power BI Pro。这些新服务将帮助政府管理,分析和可视化大量数据。除了这些服务,微软还宣布了Azure政府认知服务的预览,可用于音频和文本翻译成其他语言,以及面部(性别和年龄)和情绪识别&…

从零搭建hive环境_ jdk 8 + SSH + hadoop 2.9.2 + hive 3.1.2

目录 一、Ubuntu18.04 安装 jdk 8 二、安装SSH 三、安装hadoop 2.9.2 四、安装hive 3.1.2 Windows 虚拟机安装 Ubuntu18.04 Vim Mysql5.7参照 https://blog.csdn.net/zhsworld/article/details/103740953 一、Ubuntu18.04 安装 jdk 8 1 官网下载 jdk8安装包 2 将jdk8安装…

查找算法——2-3查找树、左倾红黑树

平衡树是计算机科学中的一类改进的二叉查找树。一般的二叉查找树的查询复杂度是跟目标结点到树根的距离(即深度)有关,因此当结点的深度普遍较大时,查询的均摊复杂度会上升,为了更高效的查询,平衡树应运而生…

《python语言程序设计》_第5章_循环

#5.1_引言 程序1: 结果: 程序2: 结果: sum is 45 ##注意整个循环语句都要内缩进循环内部 ##ctrlc中止一个无限循环运行 程序清单5-1: 结果: #5.2.1_实例研究:猜数字 程序清单: 结果: #5.2.2循环…

sql基础统计,及pandas实现

目录 1 查询前N行 2 查询特定列 3 查询某列的去重数据 4 根据条件筛选数据 5 分组计数 6 按某列分组后,对其它列进行统计 7 横向连接表 8 纵向连接表 9 分组后排序 10 按条件分组 11 按条件更新某个值 12 按条件删除行 13 删除列 14 提取/匹配字符串 …

诺基亚携STC进行5G和物联网开发

据外媒报道,诺基亚和沙特电信公司(STC)签署了一份谅解备忘录,以合作开发5G和物联网用例。 诺基亚携STC进行5G和物联网开发 根据该MoU条款,诺基亚和STC将进行4.5G Pro和4.9G等技术测试,这是迈向5G的关键步骤…

import和require的区别

原文地址:https://www.cnblogs.com/sunshq/p/7922182.html import和require的区别 node编程中最重要的思想就是模块化,import和require都是被模块化所使用。 遵循规范 require 是 AMD规范引入方式import是es6的一个语法标准,如果要兼容浏览器…

一文弄清楚hive窗口函数

1 定义 窗口函数,又称分析函数 Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group. The group of rows is called a window and is defined by…