python反反爬技巧之解密cookie

嘿嘿,今天跟大家分享一个爬虫的反反爬技巧之JS反爬。一提到JS反爬,很多爬虫新手都是闻风丧胆(JS根本没学过啊!代码根本看不懂啊!参数要去哪找啊!这特么爬个卵啊!)不用担心,这些其实没有那么难

接下来以中国土地市场网(http://www.landchina.com)爬取土地供应--大企业购地情况(http://www.landchina.com/default.aspx?tabid=347&ComName=default)为例,分享一下怎么破解网站的JS反爬。

这个网站长这样。

很明显,我们需要爬取箭头所指的内容。我们先使用正常的爬取思路。直接用requests请求网站。然后,发现网站返回给我们的数据是这样的。

what fuck?这是一堆什么玩意儿?根本看不懂啊喂!不方,冷静下来一看,这是一堆简单的JS代码。反正不管他是什么意思,先将他格式化一波,成了这个样子。

嗯,稍微能看懂一点了。大概就是两个函数,进行了一系列操作。现在,面对这一堆JS代码该怎么办呢?不方。我们先来分析一下网站的network。

发现了啥?cookie!有很多网站,在请求头里不加cookie也是能正常访问拿到数据的。既然这个网站目前请求不到数据,那我们不妨将他的cookie加到请求头里试一试。你会惊奇的发现,你拿到了网站的返回数据!这也太简单啦!这不是so easy嘛。但是呢,cookie他是变化的呀,总不能每次都复制粘贴吧?那要怎么拿到cookie呢?观察了一下网站network里的内容,有价值的数据包只有一开始我们请求的那个有点用了。可是在本地请求他,他返回给我一堆JS代码。没办法,只好啃一啃这个JS了。稍微观察代码,你发现。

document.cookie!嗯!是不是只要执行了这段代码就能返回给我cookie的值了呢?接下来我们试试。

把代码往WebStorm一粘贴,然后运行。发现一堆报错。那是当然。我们本地是没有document和window对象的,直接复制过来跑是行不通的。那怎么办呢?

好啦。现在有了pyv8了,可以去执行上面那坑人的JS了。这里给出代码。

把url传进去执行一下就可以看到,我们成功的拿到了cookie如下

最后两行即cookie的值,我们把这个cookie复制到请求头里再试试发现。他并没有返回给我们想要的值,还是一串JS代码。特么的,这啥子玩意!再去仔细观察一波JS代码,发现有这么一行JS代码,意思大概是过个50ms再执行这个函数。我们刚才是直接执行的这个函数,是不是跟这有关系呢?另外,我们刚才只执行到document.cookie这里,下面的代码也没有执行。于是,修改一下代码,执行整段JS代码

这时候我们发现我们拿到了真正的cookie!那么我们现在验证一下,把拿到的cookie加到请求头。Nice!我们拿到了网页数据!

似乎路途有那么点小波折,但是拿到数据的那一瞬间,真的是爽歪歪!很有成就感。

下面,附上完整代码get_cookie.py

以及爬虫代码big_company_spider.py

哦对。忘了说,后来发现这个网站第一页是get请求,后面的页数则是post请求。post参数则藏在网页返回数据当中,这个仔细查看一番就能发现。就不赘述啦。

经验分享 程序员 微信小程序 职场和发展