爬虫学习

news/2026/1/18 16:43:44/文章来源:https://www.cnblogs.com/paaai/p/19498713

爬虫

定义爬取目标(URL)

在浏览器网络部分能让我们看见真正需要的url

image-20260118144033035

#定义urlurl = f"https://www.mashangpa.com/api/problem-detail/1/data/?page={i}"

但大多数情况我们需要携带请求头

#声明请求头----带cookie
headers = {"accept": "*/*","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","priority": "u=1, i","referer": "https://www.mashangpa.com/problem-detail/1/","sec-ch-ua": "\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
}
cookies = {"sessionid": "766fuslyt5ngd3nr6sfyluiili3hmfxn","Hm_lvt_0d2227abf9548feda3b9cb6fddee26c0": "1768642776,1768713959","HMACCOUNT": "48E38AF4922BDFCB","Hm_lpvt_0d2227abf9548feda3b9cb6fddee26c0": "1768714024"
}

这一步可以让工具帮我们

https://spidertools.cn/#/curl2Request

image-20260118144251485

复制bash请求放入工具里面即可拿到请求头格式

接下来就是发送请求了

#发起get请求response = requests.get(url, headers=headers, cookies=cookies)sum_data += sum(response.json()["current_array"])

码上爬第一题exp

import requests#声明请求头----带cookie
headers = {"accept": "*/*","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","priority": "u=1, i","referer": "https://www.mashangpa.com/problem-detail/1/","sec-ch-ua": "\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
}
cookies = {"sessionid": "766fuslyt5ngd3nr6sfyluiili3hmfxn","Hm_lvt_0d2227abf9548feda3b9cb6fddee26c0": "1768642776,1768713959","HMACCOUNT": "48E38AF4922BDFCB","Hm_lpvt_0d2227abf9548feda3b9cb6fddee26c0": "1768714024"
}#加和变量
sum_data = 0for i in range (1, 21):
#定义urlurl = f"https://www.mashangpa.com/api/problem-detail/1/data/?page={i}"
#发起get请求response = requests.get(url, headers=headers, cookies=cookies)sum_data += sum(response.json()["current_array"])
#获取数据print(sum_data)

第二题一样的

浏览器调试被禁用(无限debugger) lv3

image-20260118145148680

打开开发者模式发现被禁用,观察该文件明白是无限debugger

(function anonymous(
) {
debugger
})

现在我们需要解决他

image-20260118145449996

法一 一律不暂停

右键代码所在行数3,选择不暂停

image-20260118145605188

然后刷新发现没有成功,依旧空白,尝试法2

法二 本地替换js文件

image-20260118150006564

我们跟进调用堆栈,看见了该debugger代码

image-20260118150047600

而这块代码让我们触发反爬后进入空白页面、

window.location.href = "about:blank";
!function () {if (window.outerWidth - window.innerWidth > 210 || window.outerHeight - window.innerHeight > 210) {document.getElementsByTagName("body")[0].innerHTML = '检测到非法调试, 请关闭调试终端后刷新本页面重试!<br/>Welcome for People, Not Welcome for Machine!<br/>';window.location.href = "about:blank";}

那我们直接把反爬代码删掉就行了,我们要修改本地js文件

edge浏览器的替换方式

image-20260118150850371

谷歌浏览器直接右键js代码,会有替换键

image-20260118150914951

然后替换自己想要的一个文件夹,我这里创建了一个新文件夹叫js文件替换,然后右键要替换的文件,选择修改

image-20260118151310966

这时候就进入了本地修改,有紫色标识,现在进行注释,并保存

image-20260118151556177

刷新界面,成功越过

image-20260118151638265

之后就是爬取文件和数字了

md5加密逆向分析 lv4

image-20260118152249549

提示是sign加密了,我们查找sign跟进发现了这个文件

image-20260118152519799

function loadPage(pageNumber) {const timestamp = new Date().getTime()window.token = window.md5("tuling" + timestamp + pageNumber)const params = {page: pageNumber,sign: window.token,_ts: timestamp,};

对sign打上断点,点击第二页查看我们找对没

image-20260118152709011

image-20260118152820758

md5值对上了,证明这段加密我们没找错

window.token = window.md5("tuling" + timestamp + pageNumber)

第一个值是加盐值,第二个值是通过时间来的

const timestamp = new Date().getTime()

至此我们的加密逻辑出来了,我们自己组装一下

function loadPage(pageNumber) {const timestamp = new Date().getTime()const sign = window.md5("tuling" + timestamp + pageNumber)console.log(sign)
}loadPage(1)

现在有个问题,window里面没有md5,所以我们还需要去找他写的加密逻辑

window = this, function (n) {function r(n, r) {var t = (65535 & n) + (65535 & r);return (n >> 16) + (r >> 16) + (t >> 16) << 16 | 65535 & t}function t(n, t, o, u, e, c) {return r(function (n, r) {return n << e | n >>> 32 - e}(r(r(t, n), r(u, c))), o)}function o(n, r, o, u, e, c, f) {return t(r & o | ~r & u, n, r, e, c, f)}function u(n, r, o, u, e, c, f) {return t(r & u | o & ~u, n, r, e, c, f)}function e(n, r, o, u, e, c, f) {return t(r ^ o ^ u, n, r, e, c, f)}function c(n, r, o, u, e, c, f) {return t(o ^ (r | ~u), n, r, e, c, f)}function f(n, t) {var f, i, a, h, g;n[t >> 5] |= 128 << t % 32, n[14 + (t + 64 >>> 9 << 4)] = t;var l = 1732584193, d = -271733879, v = -1732584194, C = 271733878;for (f = 0; f < n.length; f += 16) d = c(d = c(d = c(d = c(d = e(d = e(d = e(d = e(d = u(d = u(d = u(d = u(d = o(d = o(d = o(d = o(a = d, v = o(h = v, C = o(g = C, l = o(i = l, d, v, C, n[f], 7, -680876936), d, v, n[f + 1], 12, -389564586), l, d, n[f + 2], 17, 606105819), C, l, n[f + 3], 22, -1044525330), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 4], 7, -176418897), d, v, n[f + 5], 12, 1200080426), l, d, n[f + 6], 17, -1473231341), C, l, n[f + 7], 22, -45705983), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 8], 7, 1770035416), d, v, n[f + 9], 12, -1958414417), l, d, n[f + 10], 17, -42063), C, l, n[f + 11], 22, -1990404162), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 12], 7, 1804603682), d, v, n[f + 13], 12, -40341101), l, d, n[f + 14], 17, -1502002290), C, l, n[f + 15], 22, 1236535329), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 1], 5, -165796510), d, v, n[f + 6], 9, -1069501632), l, d, n[f + 11], 14, 643717713), C, l, n[f], 20, -373897302), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 5], 5, -701558691), d, v, n[f + 10], 9, 38016083), l, d, n[f + 15], 14, -660478335), C, l, n[f + 4], 20, -405537848), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 9], 5, 568446438), d, v, n[f + 14], 9, -1019803690), l, d, n[f + 3], 14, -187363961), C, l, n[f + 8], 20, 1163531501), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 13], 5, -1444681467), d, v, n[f + 2], 9, -51403784), l, d, n[f + 7], 14, 1735328473), C, l, n[f + 12], 20, -1926607734), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 5], 4, -378558), d, v, n[f + 8], 11, -2022574463), l, d, n[f + 11], 16, 1839030562), C, l, n[f + 14], 23, -35309556), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 1], 4, -1530992060), d, v, n[f + 4], 11, 1272893353), l, d, n[f + 7], 16, -155497632), C, l, n[f + 10], 23, -1094730640), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 13], 4, 681279174), d, v, n[f], 11, -358537222), l, d, n[f + 3], 16, -722521979), C, l, n[f + 6], 23, 76029189), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 9], 4, -640364487), d, v, n[f + 12], 11, -421815835), l, d, n[f + 15], 16, 530742520), C, l, n[f + 2], 23, -995338651), v = c(v, C = c(C, l = c(l, d, v, C, n[f], 6, -198630844), d, v, n[f + 7], 10, 1126891415), l, d, n[f + 14], 15, -1416354905), C, l, n[f + 5], 21, -57434055), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 12], 6, 1700485571), d, v, n[f + 3], 10, -1894986606), l, d, n[f + 10], 15, -1051523), C, l, n[f + 1], 21, -2054922799), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 8], 6, 1873313359), d, v, n[f + 15], 10, -30611744), l, d, n[f + 6], 15, -1560198380), C, l, n[f + 13], 21, 1309151649), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 4], 6, -145523070), d, v, n[f + 11], 10, -1120210379), l, d, n[f + 2], 15, 718787259), C, l, n[f + 9], 21, -343485551), l = r(l, i), d = r(d, a), v = r(v, h), C = r(C, g);return [l, d, v, C]}function i(n) {var r, t = "", o = 32 * n.length;for (r = 0; r < o; r += 8) t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255);return t}function a(n) {var r, t = [];for (t[(n.length >> 2) - 1] = void 0, r = 0; r < t.length; r += 1) t[r] = 0;var o = 8 * n.length;for (r = 0; r < o; r += 8) t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32;return t}function h(n) {var r, t, o = "0123456789abcdef", u = "";for (t = 0; t < n.length; t += 1) r = n.charCodeAt(t), u += o.charAt(r >>> 4 & 15) + o.charAt(15 & r);return u}function g(n) {return unescape(encodeURIComponent(n))}function l(n) {return function (n) {return i(f(a(n), 8 * n.length))}(g(n))}function d(n, r) {return function (n, r) {var t, o, u = a(n), e = [], c = [];for (e[15] = c[15] = void 0, 16 < u.length && (u = f(u, 8 * n.length)), t = 0; t < 16; t += 1) e[t] = 909522486 ^ u[t], c[t] = 1549556828 ^ u[t];return o = f(e.concat(a(r)), 512 + 8 * r.length), i(f(c.concat(o), 640))}(g(n), g(r))}window.md5 = function (n, r, t) {return r ? t ? d(r, n) : function (n, r) {return h(d(n, r))}(r, n) : t ? l(n) : function (n) {return h(l(n))}(n)}
}();

我腰眼牌,牌没有问题

image-20260118160316669

至此加密逆向完成

然后让python拿到我们的js解密的内容,带入访问然后爬虫就行了

#读取demo.js文件
with open("demo.js", "r", encoding="utf-8") as f:js_code = f.read()
#把一段 JavaScript 代码字符串 进行编译 / 预处理 / 加载,生成一个「JS 执行环境对象」,赋值给变量 ctx
ctx = execjs.compile(js_code)**********for i in range(1, 21):json_data =ctx.call("loadPage", i,)
#call函数,在 Python 代码中,调用「你编译好的 JS 代码 (js_code)」中定义的【JavaScript 函数】params = {"page": i,"sign": json_data["sign"],"_ts": json_data["ts"],}

贴源码

demo.js

window = this, function (n) {function r(n, r) {var t = (65535 & n) + (65535 & r);return (n >> 16) + (r >> 16) + (t >> 16) << 16 | 65535 & t}function t(n, t, o, u, e, c) {return r(function (n, r) {return n << e | n >>> 32 - e}(r(r(t, n), r(u, c))), o)}function o(n, r, o, u, e, c, f) {return t(r & o | ~r & u, n, r, e, c, f)}function u(n, r, o, u, e, c, f) {return t(r & u | o & ~u, n, r, e, c, f)}function e(n, r, o, u, e, c, f) {return t(r ^ o ^ u, n, r, e, c, f)}function c(n, r, o, u, e, c, f) {return t(o ^ (r | ~u), n, r, e, c, f)}function f(n, t) {var f, i, a, h, g;n[t >> 5] |= 128 << t % 32, n[14 + (t + 64 >>> 9 << 4)] = t;var l = 1732584193, d = -271733879, v = -1732584194, C = 271733878;for (f = 0; f < n.length; f += 16) d = c(d = c(d = c(d = c(d = e(d = e(d = e(d = e(d = u(d = u(d = u(d = u(d = o(d = o(d = o(d = o(a = d, v = o(h = v, C = o(g = C, l = o(i = l, d, v, C, n[f], 7, -680876936), d, v, n[f + 1], 12, -389564586), l, d, n[f + 2], 17, 606105819), C, l, n[f + 3], 22, -1044525330), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 4], 7, -176418897), d, v, n[f + 5], 12, 1200080426), l, d, n[f + 6], 17, -1473231341), C, l, n[f + 7], 22, -45705983), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 8], 7, 1770035416), d, v, n[f + 9], 12, -1958414417), l, d, n[f + 10], 17, -42063), C, l, n[f + 11], 22, -1990404162), v = o(v, C = o(C, l = o(l, d, v, C, n[f + 12], 7, 1804603682), d, v, n[f + 13], 12, -40341101), l, d, n[f + 14], 17, -1502002290), C, l, n[f + 15], 22, 1236535329), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 1], 5, -165796510), d, v, n[f + 6], 9, -1069501632), l, d, n[f + 11], 14, 643717713), C, l, n[f], 20, -373897302), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 5], 5, -701558691), d, v, n[f + 10], 9, 38016083), l, d, n[f + 15], 14, -660478335), C, l, n[f + 4], 20, -405537848), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 9], 5, 568446438), d, v, n[f + 14], 9, -1019803690), l, d, n[f + 3], 14, -187363961), C, l, n[f + 8], 20, 1163531501), v = u(v, C = u(C, l = u(l, d, v, C, n[f + 13], 5, -1444681467), d, v, n[f + 2], 9, -51403784), l, d, n[f + 7], 14, 1735328473), C, l, n[f + 12], 20, -1926607734), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 5], 4, -378558), d, v, n[f + 8], 11, -2022574463), l, d, n[f + 11], 16, 1839030562), C, l, n[f + 14], 23, -35309556), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 1], 4, -1530992060), d, v, n[f + 4], 11, 1272893353), l, d, n[f + 7], 16, -155497632), C, l, n[f + 10], 23, -1094730640), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 13], 4, 681279174), d, v, n[f], 11, -358537222), l, d, n[f + 3], 16, -722521979), C, l, n[f + 6], 23, 76029189), v = e(v, C = e(C, l = e(l, d, v, C, n[f + 9], 4, -640364487), d, v, n[f + 12], 11, -421815835), l, d, n[f + 15], 16, 530742520), C, l, n[f + 2], 23, -995338651), v = c(v, C = c(C, l = c(l, d, v, C, n[f], 6, -198630844), d, v, n[f + 7], 10, 1126891415), l, d, n[f + 14], 15, -1416354905), C, l, n[f + 5], 21, -57434055), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 12], 6, 1700485571), d, v, n[f + 3], 10, -1894986606), l, d, n[f + 10], 15, -1051523), C, l, n[f + 1], 21, -2054922799), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 8], 6, 1873313359), d, v, n[f + 15], 10, -30611744), l, d, n[f + 6], 15, -1560198380), C, l, n[f + 13], 21, 1309151649), v = c(v, C = c(C, l = c(l, d, v, C, n[f + 4], 6, -145523070), d, v, n[f + 11], 10, -1120210379), l, d, n[f + 2], 15, 718787259), C, l, n[f + 9], 21, -343485551), l = r(l, i), d = r(d, a), v = r(v, h), C = r(C, g);return [l, d, v, C]}function i(n) {var r, t = "", o = 32 * n.length;for (r = 0; r < o; r += 8) t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255);return t}function a(n) {var r, t = [];for (t[(n.length >> 2) - 1] = void 0, r = 0; r < t.length; r += 1) t[r] = 0;var o = 8 * n.length;for (r = 0; r < o; r += 8) t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32;return t}function h(n) {var r, t, o = "0123456789abcdef", u = "";for (t = 0; t < n.length; t += 1) r = n.charCodeAt(t), u += o.charAt(r >>> 4 & 15) + o.charAt(15 & r);return u}function g(n) {return unescape(encodeURIComponent(n))}function l(n) {return function (n) {return i(f(a(n), 8 * n.length))}(g(n))}function d(n, r) {return function (n, r) {var t, o, u = a(n), e = [], c = [];for (e[15] = c[15] = void 0, 16 < u.length && (u = f(u, 8 * n.length)), t = 0; t < 16; t += 1) e[t] = 909522486 ^ u[t], c[t] = 1549556828 ^ u[t];return o = f(e.concat(a(r)), 512 + 8 * r.length), i(f(c.concat(o), 640))}(g(n), g(r))}window.md5 = function (n, r, t) {return r ? t ? d(r, n) : function (n, r) {return h(d(n, r))}(r, n) : t ? l(n) : function (n) {return h(l(n))}(n)}
}();function loadPage(pageNumber) {const timestamp = new Date().getTime()const sign = window.md5("tuling" + timestamp + pageNumber)return {"sign" : sign,"ts" : timestamp}
}

lv4.py

import requests
import execjs#读取demo.js文件
with open("demo.js", "r", encoding="utf-8") as f:js_code = f.read()
#把一段 JavaScript 代码字符串 进行编译 / 预处理 / 加载,生成一个「JS 执行环境对象」,赋值给变量 ctx
ctx = execjs.compile(js_code)
headers = {"accept": "*/*","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","cache-control": "no-cache","pragma": "no-cache","priority": "u=1, i","referer": "https://www.mashangpa.com/problem-detail/4/","sec-ch-ua": "\"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
}
cookies = {"sessionid": "766fuslyt5ngd3nr6sfyluiili3hmfxn","Hm_lvt_0d2227abf9548feda3b9cb6fddee26c0": "1768642776,1768713959","HMACCOUNT": "48E38AF4922BDFCB","Hm_lpvt_0d2227abf9548feda3b9cb6fddee26c0": "1768720771"
}
url = "https://www.mashangpa.com/api/problem-detail/4/data/"sum_data = 0#循环遍历页码+加密值
for i in range(1, 21):json_data =ctx.call("loadPage", i,)params = {"page": i,"sign": json_data["sign"],"_ts": json_data["ts"],}response = requests.get(url, headers=headers, cookies=cookies, params=params)sum_data += sum(response.json()["current_array"])
print(sum_data)

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

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

相关文章

STM32F0实战:基于HAL库开发【1.3】

2.2.2 STM32系统板 STM32F072VBT6微控制器采用LQFP100封装,引脚间距仅为0.5mm,这样的封装很难用手工的方法搭建系统板,所以建议使用成品的系统板或者全功能开发板来完成本书的代码测试任务。 STM32F072VBT6系统板的外观如图2-75所示,系统板电路原理可以参考本书附录A,全…

KUKA机器人KR C4 控制柜蓄电池的维护指南

KUKA机器人KR C4 控制柜蓄电池的维护指南 一、核心功能:断电瞬间的 “数据守护者” KUKA KR C4控制柜内置蓄电池,绝非普通备用电源,其核心使命是保障系统断电后的安全受控关机。当外部供电突然中断时,蓄电池立即通过电源管理板(PMB)X305接口为控制系统供电,支撑系统完成…

Java泛型---桥方法

桥方法 桥方法是为了解决类型擦除后与多态的冲突。为了理解什么是桥方法。下面举实例,假设有一个泛型类Pair,它用来保存两个值,first与second,first永远比second大。 现在,创建一个子类去继承它。 package Test;i…

自动化视频制作:深入解析 FFmpeg 图片转视频脚本

在处理大量生成的图片资产&#xff08;如 AI 生成的艺术图&#xff09;时&#xff0c;我们经常需要将它们转化为更易于分享的视频格式。手动操作不仅繁琐&#xff0c;而且难以保证每张图停留时间的精确性。本文将带你深入剖析一个自动化脚本&#xff0c;看看它是如何一键完成“…

C14-2025.1.18

XSS原理 XSS(跨站脚本攻击)漏洞是一种常见的安全漏洞,其原理是攻击者通过向网页中注入恶意脚本代码 (JavaScript代码) ,当其他用户访问该页面时,浏览器会执行这些脚本,从而盗取用户信息(如Cookie)、劫持会话…

AI论文写作效率飙升200%:从零到一9款工具实操指南,彻底告别拖延 - 麟书学长

论文写作新手常遇文档空白、修改难、查重焦虑等问题,本文对比9款AI论文工具核心能力,如一站式的图灵论文AI(30分钟出5万字初稿)、小众高效的AI论文及时雨、全学科覆盖的巨鲸写作等,还详解图灵实操步骤、其他工具指…

2026年国内专业的智能货架定制厂家推荐,钢制货架/悬臂货架/重载货架/不锈钢货架/模具架/货架,智能货架批发厂家选哪家 - 品牌推荐师

行业背景与市场趋势 随着制造业智能化升级加速,仓储物流环节对空间利用率、存取效率及数据追溯能力的要求日益严苛。智能货架作为工业4.0的核心载体,通过集成物联网、机器人及AI算法,实现从“静态存储”到“动态管理…

30、二分类和多分类的区别 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

小程序毕设选题推荐:基于Java的校园导航微信小程序的设计与实现基于springboot+微信小程序的校园导航与信息服务系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

别忽视这个16×16的小图标:Icon背后的产品逻辑,以及一款让开发者省心的制作工具

在互联网产品的世界里&#xff0c;我们常常聚焦于宏大的功能架构、流畅的交互体验、精美的视觉设计&#xff0c;却容易忽略一个看似微不足道的元素——Icon&#xff08;图标&#xff09;。尤其是网页的favicon.ico&#xff0c;那个仅仅占据浏览器标签栏1616像素的小图标&#x…

计算机小程序毕设实战-基于springboot+微信小程序的驾考在线学习与测试系统驾校预约学习系统查看教练信息、教练预约进行考试【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小程序计算机毕设之基于springboot位置服务的城市路线分享系统小程序(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

小程序毕设项目:基于springboot位置服务的城市路线分享系统小程序(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机小程序毕设实战-基于springboot+微信小程序的校园导航与信息服务系统基于微信小程序的校园信息交流平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【课程设计/毕业设计】基于小程序的位置服务的城市路线分享系统的设计与实现基于springboot位置服务的城市路线分享系统小程序【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基于AI智能名片链动2+1模式S2B2C商城小程序的流量运营策略研究

摘要&#xff1a;在零售行业竞争日益激烈的背景下&#xff0c;流量获取与转化成为企业发展的关键。本文聚焦AI智能名片链动21模式S2B2C商城小程序这一创新商业模式&#xff0c;深入探讨其在推广产品定位、归集渠道现有流量以及拓展内外部流量方面的作用机制与实践路径。通过理论…

学霸同款2026 AI论文网站TOP8:本科生毕业论文必备测评

学霸同款2026 AI论文网站TOP8&#xff1a;本科生毕业论文必备测评 2026年学术写作工具测评&#xff1a;为何需要一份精准榜单&#xff1f; 随着AI技术在学术领域的深度应用&#xff0c;越来越多的本科生开始依赖智能写作工具辅助论文撰写。然而&#xff0c;面对市场上琳琅满目的…

分期乐购物额度闲置?安全回收指南+可可收实操拆解 - 可可收

当下消费场景中,不少人手中握着分期乐购物额度却闲置不用,想将其回收又苦于找不到安全路径。作为深耕卡券回收领域的从业者,我将站在用户视角,拆解分期乐购物额度回收的安全核心、实操细节,助力大家避开陷阱顺利回…

大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(12)

大学院-筆記試験練習&#xff1a;数据库&#xff08;データベース問題訓練&#xff09; と 软件工程&#xff08;ソフトウェア&#xff09;&#xff08;12&#xff09;1-前言2-数据库データベースデータベース&#xff08;本番レベル問題&#xff09;【問題1】&#xff08;デ…

全球口碑最好的防脱洗发水排名前十,洗发水哪个牌子效果好?青少年安全首选第一名 - 博客万

在秀发稀疏问题日益普遍的时代,挑选一款真正有效的固发洗发产品,已超越单纯关注“防脱”功能,其能否“温和适配各类头皮状况”已成为更深层的考量。油性发质担忧清洁不足,干燥头皮惧怕越洗越脆,而完整的头皮微生态…