一.爬虫--破解网站通过js加密生成cookie(一)
2019-03-15 11:16
417 查看
做爬虫很长时间了,遇见过千奇百怪的网站.本次记录一次简单破解js加密的网站.
目标网站:中国土地市场网
采集信息:如图
需要采集的内容就是行政区代码,标题,标题的url,和发布时间.
好了,感觉应该不难.
那我们先尝试一下吧:
# -*- coding: utf-8 -*- import requests url = "http://www.landchina.com/default.aspx?tabid=226" response = requests.get(url) print response.status_code print response.text
运行一下
200 <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0"/><meta http-equiv="Connection" content="Close"/><script type="text/javascript">function stringToHex(str){var val="";for(var i = 0; i < str.length; i++){if(val == "")val = str.charCodeAt(i).toString(16);else val += str.charCodeAt(i).toString(16);}return val;}function YunSuoAutoJump(){ var width =screen.width; var height=screen.height; var screendate = width + "," + height;var curlocation = window.location.href;if(-1 == curlocation.indexOf("security_verify_")){ document.cookie="srcurl=" + stringToHex(window.location.href) + ";path=/;";}self.location = "/default.aspx?tabid=226&security_verify_data=" + stringToHex(screendate);}</script><script>setTimeout("YunSuoAutoJump()", 50);</script></head><!--2019-03-15 10:15:09--></html>
响应状态是200,但是响应内容…,这是什么鬼.怎么只给返回了一段js代码.
但是呢,看到js 代码里有关键词document.cookie,瞬间明白了.
重点来了
其实这就是网页的一种防爬手段,网页对我们的请求做了一次处理.我们第一次请求,网站通过这段js生成了一串cookie值,只有访问的时候携带着这个cookie,网站才会给我们正确的响应内容.
好了,既然这样,我们就尝试一下吧.
看一下js代码,如果懂一些前端的知识,这段js代码其实也不难.他仅仅是通过用我们的电脑屏幕的宽和高以及当前网页的地址,生成了cookie给我们的浏览器.
我们可以把他翻译成python.
def stringToHex(s): val = "" for k in s: if (val == ""): val = str(hex(ord(k))) else: val += str(hex(ord(k))) return val.replace("0x", "") def get_cookie(url): screendate = "1366,768" # 屏幕宽度和高度我们可以设置成固定值. curlocation = url # 当前请求的url cookie = "srcurl=" + stringToHex(curlocation) + ";path=/;" cookie = {"srcurl": cookie} url = url + "&security_verify_data=" + stringToHex(screendate) return url, cookie
在这里我们使用resuests.session模块.
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会 话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
到此基本上就完成了,代码没多少.因为这个网站需要保持会话才能获得正确的内容.还需要注意以下:
- 获得cookie前需要利用session访问一次目标网站.
- 获得cookie后也需要携带cookie访问一次js返回的验证的url
这也是使用session模块的原因,如果直接使用requests的话应该还需要获得响应的set-cookie写入的cookie.有兴趣的同学可以试试.
本次代码
# -*- coding: utf-8 -*- import requests def stringToHex(s): val = "" for k in s: if (val == ""): val = str(hex(ord(k))) else: val += str(hex(ord(k))) return val.replace("0x", "") def get_cookie(url): screendate = "1366,768" # 屏幕宽度和高度我们可以设置成固定值. curlocation = url # 当前请求的url cookie = "srcurl=" + stringToHex(curlocation) + ";path=/;" cookie = {"srcurl": cookie} url = url + "&security_verify_data=" + stringToHex(screendate) return url, cookieif __name__ == "__main__": url = "http://www.landchina.com/default.aspx?tabid=226" session = requests.session() session.get(url) verify_url, cookie = get_cookie(url) session.get(verify_url) header = { "Host": "www.landchina.com", "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0", "Accept": "text/css,*/*;q=0.1", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Referer": url, "Connection": "keep-alive" } response = session.get(url, headers=header, cookies=cookie) print response.text
相关文章推荐
- 二.爬虫--破解网站通过js加密生成cookie(二)
- 爬虫遭遇状态码521陷阱 破解js加密cookie
- java爬虫,破解JS加密的Cookie
- Python爬虫—破解JS加密的Cookie
- Python爬虫—破解JS加密的Cookie
- Python爬虫—破解JS加密的Cookie
- 通过js来设置cookie和读取cookie,实现登陆时记住密码的功能 base64加密
- python通过生成cookie文件,并通过cookie文件请求网站
- www.sojson.com网站高级JS加密破解
- python 反反爬虫策略之js动态加密url破解
- 如何在神箭手上快速开发爬虫——第二课 如何爬取JS动态生成的数据【豌豆荚游戏排行榜】
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
- 部分网站允许空白referer的防盗链图片的js破解代码
- Java实现HMacMD5加密,用于淘宝客JS 组件 API 调用时生成 sign 的签名
- 通过JS语句判断WEB网站的访问端是电脑还是手机
- 网站开发进阶(十四)JS实现二维码生成
- 通过JS语句判断WEB网站的访问端是电脑还是手机
- 通过js生成树
- Asp.net网站中 js通过iframe下载文件