建设库数据爬取

news/发布时间2024/5/17 3:01:21
1. python部分:
# -*- coding:utf-8 -*-# @Time : 2024/4/14 17:57
# @Author : 快乐的小猴子
# @Version : 
# @Function : import requests
import json
import subprocess
from functools import partial   # 专门用来固定参数的
subprocess.Popen = partial(subprocess.Popen, encoding = "utf-8")
import execjs
with open('建设库.js', 'r', encoding='utf-8') as f:json_data = f.read()context = execjs.compile(json_data)
res = context.call('main')url = 'https://capi.jiansheku.com/nationzj/jskBid/page'
headers = {"Content-Type": "application/json","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36","Referer": "https://www.jiansheku.com/","Sign": res['Sign'],"Timestamp": str(res['Timestamp'])
}
# print(headers)
# exit()
data = {"page": {"page": 1,"limit": 20,"field": ""},"jskBidQueryDto": {"province": "","city": "","county": "","tenderStage": "","tenderingManner": "","queryScope": "","projectType": "","subjectMatter": "","source": "","phonePoint": ""},"keyword": "","keywordNot": ""
}
resp = requests.get(url, headers=headers, data=json.dumps(data, separators=(',', ':')))
print(resp.json())
2. JavaScript部分:

let crypto = require('crypto');
function do_md5(e) {return crypto.createHash('md5').update(e.toString()).digest('hex');
}
var f = (new Date).getTime();
var data = {"page": {"page": 1,"limit": 20,"field": ""},"jskBidQueryDto": {"province": "","city": "","county": "","tenderStage": "","tenderingManner": "","queryScope": "","projectType": "","subjectMatter": "","source": "","phonePoint": ""},"keyword": "","keywordNot": ""
};
var ku = function e(t) {var n;if (Array.isArray(t)) {for (var r in n = new Array,t) {var o = t[r];for (var i in o)null == o[i] ? delete t[r][i] : Array.isArray(t[r][i]) && e(t[r][i])}return n = t,JSON.stringify(n).replace(/^(\s|")+|(\s|")+$/g, "")}return n = t && t.constructor === Object ? JSON.stringify(t) : t
};
var Ou = function(e) {var t = new Array, n = 0;for (var i in e)t[n] = i,n++;return t.sort()
};
var Cu = function(e) {var t = Ou(e), n = "";for (var i in t) {var r = ku(e[t[i]]);null != r && "" != r.toString() && (n += t[i] + "=" + r + "&")}return n
};
var Su = function(e, t, time) {var n = t + e + time;return n = do_md5(n)
};
function main() {var sign = (param = data,time = f,t = Cu(param),Su("ghaepVf6IhcHmgnk4NCTXLApxQkBcvh1", Su("mwMlWOdyM7OXbjzQPulT1ndRZIAjShDB", Su("ZuSj0gwgsKXP4fTEz55oAG2q2p1SVGKK", t, time), time), time));return {'Sign': sign, 'Timestamp': f,}
};// console.log(main());

执行结果截图:
image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/83047875.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

[ABC349] AtCoder Beginner Contest 349 题解

最近AT怎么这么寄[ABC349] AtCoder Beginner Contest 349 题解 目录[ABC349] AtCoder Beginner Contest 349 题解A - Zero Sum GameB - CommencementC - Airport CodeD - Divide IntervalE - Weighted Tic-Tac-ToeF - Subsequence LCMG - Palindrome Construction总结 A - Zero…

拆分内容

问题:将以下在一个单元格中的内容按品名、数量、单价、金额拆分出来函数公式解决:B2公式 =LEFT(TEXTBEFORE(A2,""),LEN(TEXTBEFORE(A2,""))-LEN(C2)) C2公式 =-LOOKUP(1,-RIGHT(TEXTBEFORE(A2,""),SEQUENCE(99))) D2公式 =-LOOKUP(1,-LEFT(TEX…

原型设计工具比较及实践

一、 1、墨刀在快速移动端原型制作方面有着明显优势,尤其适合初学者。其简洁易用的界面让用户上手容易,且能够直接在手机上演示原型,提供了更直观的体验。然而,相较于 Axure,墨刀在交互效果、控件组合和操作面板上稍显不足。交互效果的连线方式可能会让用户感到困惑,且自…

Linux-vim文本编辑器-三种模式-vim里的替换

1. vi 和 vim 命令是linux中强大的文本编辑器, 由于Linux系统一切皆文件,而配置一个服务就是在修改其 配置文件的参数。 vim 编辑器是运维工程师必须掌握的一个工具, 没有它很多工作都无法完成。 vim 其实是 vi 的升级版2. vim三种工作模式Vim编辑器中设置了三种模式: 命令模式…

httprunner 4.x学习 - 04提取(extract)和校验(validate)

前言 支持 2 种响应结果字段提取方式:1.jmespath 表达式:响应结果为 JSON 结构,采用 jmespath 表达式进行参数提取。参考教程https://jmespath.org/tutorial.html2. 正则表达式(regex):返回的非JSON 格式,可以用正则表达式(regex) 提取。需要具备一定的正则知识 extra…

Python3 YOLOv8 车牌号识别提取

参考https://blog.csdn.net/Pan_peter/article/details/130465041 (参考教程) https://wwwf.lanzout.com/iCY5N0uhltdg (car.pt 已下载) https://github.com/ultralytics/ultralytics/issues/2046 (可视化参数问题) https://cloud.tencent.com/developer/article/2214890 (…