折腾:
【未解决】汽车之家车型车系数据:有些参数字段的值包含span特殊标签
期间,对于:

html是:
<div>国IV/<span class="hs_kw48_configpB"></span>V</div>
很明显:缺少部分的文字,此处是:京
而是通过css的特殊表示:
.hs_kw48_configpB::before {
content: "京";
}去实现的
国IV/京V
此处实在无法规避了。
只能想办法去找找如何破解此处的:
返回的html中,js运行后,生成的css,其中才有我们要的文字
且最好不要运行js,否则爬取速度很慢
实在不行,再去运行js
现在只能:不开启js,去从返回的html中,看看能否找到破解思路
debug/金杯_阁瑞斯_1001862_fullHtml.html
搜
京
找到相关的
<script>
(function (Ah_) {
function Sc_() {
'return Sc_';
return '万';
}
var vW_ = '京';
var FC_ = function () {
'return FC_';
return '价';
};
var Qg_ = '元列制';
。。。然后开始分析
{
"id": 1311,
"name": "环保标准",
"pnid": "1_-1",
"valueitems": [{
"specid": 1001862,
"value": "国IV/<span class='hs_kw48_configvS'></span>V"
}, {
"specid": 1001861,
"value": "国IV/国V"
}, {
"specid": 1001860,
"value": "国IV/国V"
}, {
"specid": 1001858,
"value": "国IV/国V"
}, {
"specid": 1001857,
"value": "国IV/国V"
}, {
"specid": 1001865,
"value": "国IV/<span class='hs_kw48_configvS'></span>V"
}, {
"specid": 1001855,
"value": "国IV/国V"
}, {
"specid": 1001854,
"value": "国IV/国V"
}, {
"specid": 1001864,
"value": "国IV/<span class='hs_kw48_configvS'></span>V"
}, {
"specid": 1001852,
"value": "国IV/国V"
}, {
"specid": 1001851,
"value": "国IV/国V"
}, {
"specid": 1001863,
"value": "国IV/<span class='hs_kw48_configvS'></span>V"
}]
}其中的:
国IV/<span class='hs_kw48_configvS'></span>V
中的:
<span class='hs_kw48_configvS'></span>
已知是:
京
现在就看,如何,能否,不运行js的前提下,找到对应关系了。
搜:
hs_kw48_configvS
hs_kw _config
汽车之家 hs_kw _config
html中搜:
::before
找到:
function $RuleCalss1$() {
return '::before { content:'
}
var Ec_ = function () {
'return Ec_';
return '前';
};搜:
RuleCalss1
找到:
<script>
(function (io_) {
function $InsertRule$($index$, $item$) {
$sheet$['' + wq_() + xK_() + eP_() + Of_ + wJ_() + yu_('e')]($GetClassName$($index$) +
$RuleCalss1$() + '"' + $item$ + '" }', 0);
var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
for (x in $tempArray$) {
try {
$tempArray$[x].currentStyle = '';
} catch (e) {}
}
}
function $RuleCalss1$() {
return '::before { content:'
}
function $RuleCalss1$() {
return '::before { content:'
}
function $InsertRule$($index$, $item$) {
$sheet$['' + dF_ + Ke_() + Pm_() + hJ_() + bE_() + CM_() + kA_()]($GetClassName$($index$) +
$RuleCalss1$() + '"' + $item$ + '" }', 0);
var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
for (x in $tempArray$) {
try {
$tempArray$[x].currentStyle = '';
} catch (e) {}
}
}
function $RuleCalss1$() {
return '::before { content:'
}
function $InsertRule$($index$, $item$) {
$sheet$['' + op_('in') + uP_() + yG_() + vF_() + Al_ + (function () {
'return PC_';
return 'u'
})() + (function (dY__) {
'return dY_';
return dY__;
})('le')]($GetClassName$($index$) + $RuleCalss1$() + '"' + $item$ + '" }', 0);
var $tempArray$ = $GetElementsByCss$($GetClassName$($index$));
for (x in $tempArray$) {
try {
$tempArray$[x].currentStyle = '';
} catch (e) {}
}
}有多个:
RuleCalss1
InsertRule
但是很难静态分析出结果
感觉最后还是最好执行js代码
看起来是:静态分析可以搞懂逻辑?
然后就可以用代码实现了
搜:
rulePosList
的确有这个关键字
那就自己分析代码 + 参考上面那个帖子
看看能否分析出逻辑
重新搜:
vW_
且匹配大小写,找到,此处只有一处调用
。。。
})()]('' + Sc_() + vW_ + FC_() + '体供' + (function () {
'return gA_';
return '保'
。。。另外直接搜:
hs_kw48_configvS
中的
vS
是搜不到的
参考帖子,去搜:
FillDicData
不过后来看到:
“文中部分解析直接将变量丢进了JS里执行,”
看来也要运行js的??
此处,如果最后实在不行,要是运行js,也是可以的。
但是不确定:运行后的js中,如何提取出所需的css部分
这样才能从css中找到我们要的文字