汽车之家口啤数据爬虫

个人博客地址:http://xurui.club/

之前一直用采集工具爬取数据,然而最近发现汽车之家的口啤数据爬下来的好多html标签,文本数据也是断断续续的,(在浏览器中用选择元素是可以看到content的,说明断掉的文字只是藏起来了,并不是图片,这就好办多了)。口啤数据的质量相对来说还是比较高的,于是这周就尝试着去“破解”他的反爬虫。

以(http://k.autohome.com.cn/spec/24234)为例:

点击“展开全部口啤”,才能显示完整的口啤信息。但是在源代码中,看不到这些信息。。感觉是ajax加载数据。打开浏览器的开发者工具,找到该请求的信息,其中有条url(图1), http://k.autohome.com.cn/FrontAPI/GetFeelingByEvalId?evalId=1585634,并打开链接,真心看不出来是什么东西,不过可以看到零碎的文本片段,我们需要的口啤数据应该就在这里了。


图1

将这段乱七八糟的东西里的\u003e等转化为我们能看懂的符号,会发现以下重要信息:

微笑 1 <style type=\"text/css\"> </style>;

微笑 2 【最<span class='hs_kw0_maingn'></span>的一点】<br/>油耗<span class='hs_kw1_maingn'></span>操控<br/>【最不<span class='hs_kw0_maingn'></span>的一点】<br/>塑料卡扣太多

微笑 3 <script></script>

分析以上几点,大致可以猜到,口啤文本中缺少的汉字,被<span class =""></span>替换了。。。<style>好像没什么用,<script>是不是用有呢?


于是下一步将js代码匹配出来:

 
js = re.search("<!--@HS_ZY@--><script>([\s\S]+)\(document\);</script>", text)
发现里面有数不清多个function(){} 和var xx ="";

这些function可以认为是用来定义变量的,只是形式比较复杂。其实和var xx="xx";的功能差不多。将这些变量替换进去,得到新的js代码(图2)。

图2

到这里就比较明朗了。这一堆的%xx就是url编码,url编码常用于html的url传输,输入网址时一般不会带着大量汉字或带有歧义的信息或隐私信息,这时就要用到url编码。将这些东西解码:

string = urllib.parse.unquote(string_m.group(1)).encode("utf-8").decode("utf8")
print(string)
# 。不中习了仪低信做光内冷制加动压发受变向味和响喜声外多够太失头好小工差平座异强形心悬惯意挂控提撑支改方明显最有机李板架档椅欢池油满爽用电的盘箱考耐耗胎脏自舒薄虑行表装观败躁身车较近远适速遮部长门问阳音顺题风饰,

这些可以对着找一个,我们需要的汉字“满”,“意”等都在里面。
然后发现,js代码紧跟着那堆url编码的后面,有一堆数字。这些数字就是汉字对应的顺序

index_m = re.search("([\d,]+(;[\d,]+)+)", js[string_m.end():])
print(index_m.group())
#64,43;104;37,22;53,6;30,94;0;93,98,57;80,56,70;13,92;63,96;16,14;34,1,26;35,100;18,92;51,52;44,59;50,19,69;7,40;38;41,58;1,65;71,79;32;55,63;3,42;77,91;36,60;48,47;1,27;12,11;28,31;67,62;73,63;102,85;24,99;17,1,4;49,82;25,83;29,84,68;89,9;90,9;8,33;78;72,75;23,61;87,86;10,103;2,45;5,81;37,20;54,66;97,101;74,15;88,95;76,14;2,21;46,87;25,39
可以在上面的汉字找一下,发现“满”“意”所在的位置是65,44。而下面输出数字的第一对是“64”“43”,正好差一位(index是从0开始的,到这里大家可以微笑了)
后面就是按照<span class='hs_kw5_mainpl'></span>中的kw后的数字,对应替换出来就大功告成了。(图3)


图3

本代码参考了星光海豚老师的博客,在此表示感谢。http://www.cnblogs.com/dyfblog/p/6753251.html
github:  https://github.com/782365867


完整代码见github: https://github.com/782365867/autohome_spider















 
 
 

                
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值