今日头条文章采集软件(爬取老版今日头条数据)
优采云 发布时间: 2021-12-03 18:11今日头条文章采集软件(爬取老版今日头条数据)
前言
这里就不一一介绍每一步的具体操作了,因为在今天爬取老版头条数据的时候已经解释的很清楚了,所以这里只重点讲一下是怎么实现的。是的,如果想看具体步骤,请到我今天头条的文章内容,里面有很详细的介绍以及如何找到加密的js代码和api接口。
Python3抓取今日头条文章视频数据,完美解决as、cp、_signature的加密方式
QQ群聊
855262907
接口参数**
找界面很简单,看我前言中的文章就知道怎么找了。最重要的是参数的**。
参数名称效果值
类别
全部(用户文章 类型)
profile_all
utm_source
用户来源
头条
visit_user_token
用户令牌
MS4wLjABAAAAvazHMceCo3MeM9IJbll231AC8GkJDcrd__iZFw2hi4o(直接从用户链接获取)
max_behot_time
翻页参数
0(默认为0,后续为结果的max_behot_time值)
_签名
加密参数,用于比较访问的是哪个接口
_02B4Z6wo00f01P6um9gAAIBD5.B97mLbnez-q59AAGApeUF3pSlwtwSgMM31ERSbUq4nAurGAbdCsEa34Q4SbYuL5lnFzvinOS2JFHeprAoHuhyeKjbh(算法)
从这里可以看出只对_signature参数值进行了加密,其他的可以直接获取,所以这里只对_signature进行**,其他参数在后面的代码中获取。
反向_signature参数
直接中断调整,发现这里生成了_signature参数值。
让我们将公式向上调整,看看他在这一步进行的计算。
我发现计算的步骤在这里。这要简单得多。直接上源码,然后复制源码,模拟运行得到结果。
JS源代码:
<p>var glb;
(glb = "undefined" == typeof window ? global : window)._$jsvmprt = function(b, a, e) {
function f() {
if ("undefined" == typeof Reflect || !Reflect.construct)
return !1;
if (Reflect.construct.sham)
return !1;
if ("function" == typeof Proxy)
return !0;
try {
return Date.prototype.toString.call(Reflect.construct(Date, [], (function() {}
))),
!0
} catch (b) {
return !1
}
}
function d(b, a, e) {
return (d = f() ? Reflect.construct : function(b, a, e) {
var f = [null];
f.push.apply(f, a);
var d = new (Function.bind.apply(b, f));
return e && c(d, e.prototype),
d
}
).apply(null, arguments)
}
function c(b, a) {
return (c = Object.setPrototypeOf || function(b, a) {
return b.__proto__ = a,
b
}
)(b, a)
}
function r(b) {
return function(b) {
if (Array.isArray(b)) {
for (var a = 0, e = new Array(b.length); a > 7 == 0)
return [1, d];
if (d >> 6 == 2) {
var c = parseInt("" + b[++a] + b[++a], 16);
return d &= 63,
[2, c = (d 6 == 3) {
var r = parseInt("" + b[++a] + b[++a], 16)
, n = parseInt("" + b[++a] + b[++a], 16);
return d &= 63,
[3, n = (d 11 ? (C = z[S--],
z[S] = z[S] >>> C) : _ > 9 ? z[++S] = !0 : _ > 7 ? (j = v(b, $),
$ += 2,
z[S] = z[S][j]) : _ > 0 && (C = z[S--],
z[S] = z[S] 1) {
(_ = x) 2)
(_ = x) > 10 ? z[++S] = void 0 : _ > 1 ? (C = z[S--],
z[S] = z[S] >= C) : _ > -1 && (z[++S] = null);
else if (_ > 1) {
if ((_ = x) 4 ? z[S -= 1] = z[S][z[S + 1]] : _ > 2 && (q = z[S--],
(_ = z[S]).x === L ? _.y >= 1 ? z[S] = M(b, _.c, _.l, [q], _.z, I, null, 1) : (z[S] = M(b, _.c, _.l, [q], _.z, I, null, 0),
_.y++) : z[S] = _(q))
} else {
var P;
if ((_ = x) > 14)
j = G[$],
(P = function a() {
var e = arguments;
return a.y > 0 ? M(b, a.c, a.l, e, a.z, this, null, 0) : (a.y++,
M(b, a.c, a.l, e, a.z, this, null, 0))
}
).c = $ + 4,
P.l = j - 2,
P.x = L,
P.y = 0,
P.z = c,
z[S] = P,
$ += 2 * j - 2;
else if (_ > 12)
q = z[S--],
I = z[S--],
(_ = z[S--]).x === L ? _.y >= 1 ? z[++S] = M(b, _.c, _.l, q, _.z, I, null, 1) : (z[++S] = M(b, _.c, _.l, q, _.z, I, null, 0),
_.y++) : z[++S] = _.apply(I, q);
else if (_ > 5)
C = z[S--],
z[S] = z[S] != C;
else if (_ > 3)
C = z[S--],
z[S] = z[S] * C;
else if (_ > -1)
return [1, z[S--]]
}
} else if (_ >= 2,
_ > 2)
(_ = x) 0) {
if ((_ = x) 2)
z[S--] ? $ += 4 : $ += 2 * (j = G[$]) - 2;
else if (_ > 0) {
for (j = G[$],
C = "",
D = n.q[j][0]; D 0) {
(_ = x) > 12 ? (C = z[S - 1],
q = z[S],
z[++S] = C,
z[++S] = q) : _ > 3 ? (C = z[S--],
z[S] = z[S] == C) : _ > 1 ? (C = z[S--],
z[S] = z[S] + C) : _ > -1 && (z[++S] = h)
} else {
(_ = x) > 13 ? (z[++S] = G[$],
$ += 4) : _ > 11 ? (C = z[S--],
z[S] = z[S] >> C) : _ > 9 ? (j = G[$],
$ += 2,
C = z[S--],
c[j] = C) : _ > 7 ? (j = G[$],
$ += 4,
q = S + 1,
z[S -= j - 1] = j ? z.slice(S, q) : []) : _ > 0 && (C = z[S--],
z[S] = z[S] > C)
}
} else {
_ = 3 & x;
if (x >>= 2,
_ > 2)
(_ = x) > 13 ? (z[++S] = G[$],
$ += 8) : _ > 11 ? (C = z[S--],
z[S] = z[S] >>> C) : _ > 9 ? z[++S] = !0 : _ > 7 ? (j = G[$],
$ += 2,
z[S] = z[S][j]) : _ > 0 && (C = z[S--],
z[S] = z[S] 1) {
(_ = x) > 10 ? (j = G[$],
t[++i] = [[$ + 4, j - 3], 0, 0],
$ += 2 * j - 2) : _ > 8 ? (C = z[S--],
z[S] = z[S] ^ C) : _ > 6 && (C = z[S--])
} else if (_ > 0) {
if ((_ = x)