一、背景

目标链接:http://www.landchina.com/default.aspx?tabid=226 ,中国土地市场网,获取相应的行政区代码、标题、详情页链接和发布时间

二、过程

1、确定加密参数

抓包,数据就在该链接中,复制url和请求头,请求,没有返回数据,返回了一段js代码

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);
}

暂时先不管它,清空cookie,浏览器设置代理,用charles进行抓包,发现总共请求了三次才获得真实数据

第一次请求,增加了cookie值yunsuo_session_verify,同时返回js代码,该代码生成了一个cookie(srcurl)和url
第二次请求,携带cookie(yunsuo_session_verify和srcurl),请求了js生成的url,并新增了cookie(security_session_mid_verify)
第三次请求,携带生成的cookie,请求真实链接,正常返回数据
OK,整体流程已经明白了,下面看看js代码

2、处理js函数

screendate, 就是屏幕的宽高,可以自己写死
url和cookie的生成,都是通过stringToHex函数,对屏幕宽高和请求链接进行了加密
stringToHex函数,遍历字符串的每个字符,对字符进行转换为Unicode编码,然后将编码转为16进制,在拼接起来


def str2token(str_data):token = ''for val in str_data:token += str(hex(ord(val)))return token.replace('0x', '')def china_land(url):screen_data = "1333,800"cookie = ''if "security_verify_" not in url:cookie = 'srcurl=' + str2token(url) + ';path=/;'url = "http://www.landchina.com/default.aspx?tabid=226&security_verify_data=" + str2token(screen_data)return url, cookie

在转16进制时,有个小坑,一开始以为和Python的十六进制转换一样,但是发现生成的字符串和实际的不一样,然后查了javascript的16进制转换语法,发现转换后的数据比python的少了“0x”,因此要将‘0x’去除

from public_method import *url = "http://www.landchina.com/default.aspx?tabid=226"
session = requests.session()
res = session.get(url)
verify_url, cookie = china_land(url)
print(verify_url, cookie)
res = 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","Cookies": cookie,
}
response = session.get(url, headers=header)
print(response.text)

另一个坑是cookie,用了reuqests库的session对象,在最后一次请求时,在headers中携带js生成的cookie,用的Cookie字段,但是没有返回正常数据,然后换了Cookies字段,就正常了,打印了两次的请求头

用cookie:{'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/css,*/*;q=0.1', 'Connection': 'keep-alive', 'Host': 'www.landchina.com', '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', 'Referer': 'http://www.landchina.com/default.aspx?tabid=226', 'Cookie': 'srcurl=687474703a2f2f7777772e6c616e646368696e612e636f6d2f64656661756c742e617370783f74616269643d323236;path=/;'}
用cookies: {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/css,*/*;q=0.1', 'Connection': 'keep-alive', 'Host': 'www.landchina.com', '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', 'Referer': 'http://www.landchina.com/default.aspx?tabid=226', 'Cookies': 'srcurl=687474703a2f2f7777772e6c616e646368696e612e636f6d2f64656661756c742e617370783f74616269643d323236;path=/;', 'Cookie': 'security_session_mid_verify=ce4213c94b70552197bf3caad9ac97da; yunsuo_session_verify=1a27da8d25711fad325811a16a2a4307'}

对比之后,发现如果用Cookie字段,请求头中只有js生成的cookie值,之前请求携带的cookie值就会被替换了,而这次请求时需要三个cookie值,所以需要用cookies字段,从cookie和cookies字段中,requests库都会进行cookie数据的提取,当然,如果用cookie={‘srcurl’:’…’}来携带js加密的cookie值,也是可以获取数据的

三、总结

中国土地市场网-js解密相关推荐

  1. 最新中国土地市场网JS逆向分析

    目标网址:中国土地市场网 重要说明:文章教程仅供参考学习,请勿用于非法用途,否则后果自负. 目录 一.接口参数分析 二.程序代码编写

  2. 【2020-09-30】一个适合爬虫练手的网站--中国土地市场网

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 项目场景: 想必做过爬虫的工程师,都接触过中国土地市场网这个网站吧,网上也有很多相关的爬取方式介绍,我看了几篇往年 ...

  3. 中国商标网JS调试 - 动态代码注入

    中国商标网JS调试 - 动态代码注入 中国商标网JS调试 - 动态代码注入 前言 背景 工具 知识点 正文 了解 Fiddler Script Session 处理函数 反调试策略 问题分析 解决思路 ...

  4. 中国土地市场网爬虫——字体woff加密还原

    通过我上篇博客:中国土地市场网爬虫--浏览器Cookie验证(简单) 和中国土地市场爬虫--浏览器cookie验证(图片验证码)讲述了中国土地市场网(www.landchina.com)的两种访问限制 ...

  5. 中国土地市场网爬虫——浏览器Cookie验证(简单)

    很久以前研究过中国土地市场网(www.landchina.com),当时只抓取了一个城市的数据2万多条的数据,当时只是觉得服务器经常宕机,还没有发现有怎么反爬虫的限制.最近空闲准备把所以的数据抓取下来 ...

  6. 2012年中国土地市场网数据(含经纬度)

    数据集名称:2012年中国土地市场网数据(含经纬度) 时间范围:2012年 相关说明:土地市场是土地在流通过程中发生的经济关系的总和.主体是土地买卖双方,客体是土地,主体之间的种种利益关系构成了市场. ...

  7. 中国土地市场网信息爬取--requests+Selenium多线程爬取

    这次爬取的网站是中国土地市场信息网站https://www.landchina.com/default.aspx?tabid=263 先进行观察分析这个.发现这个网站以下有几个特点: 1.网站响应速度 ...

  8. 中国土地市场网爬虫案例

    本案例以土地市场列表页请求.供地结果搜索页请求为例,其实网站采集难度不大,但是一些细节值得学习. 链接:https://www.landchina.com/default.aspx?tabid=263 ...

  9. 中国土地市场网landchina.com数据采集心得

    年初接到老板任务,让采集下这个网的数据,我一看是网站觉得简单,就说3天搞定,结果这一搞搞了2-3个月. 就这一折腾,就几个月过去了,才慢慢把土地成交200万数据,抵押,转让,一个40万,一个80万,共 ...

最新文章

  1. id: cannot find name for user ID xxx处理办法
  2. Linux-chown and chmod 命令的使用
  3. 小甲鱼python视频解读_小甲鱼python视频弟十二讲(关于字符串的方法及注释下)...
  4. c# 变量,对象,静态类型,集合类的线程安全回顾
  5. 修改 ASP.NET 请求队列的限制
  6. iOS经典面试题之使用runtime associate方法关联的对象释放及dealloc底层原理
  7. 数据分析师经常遇到的13个问题
  8. 关于printf输出 格式化规定符 的
  9. Java 字节和字符流的读写+Buffered
  10. 【iCore1S 双核心板_ARM】例程十三:SDIO实验——读取SD卡信息
  11. 传统ADC主要指标:SFDR、SNR、SNDR、ENOB
  12. 基于javaEE的房产中介管理系统
  13. 三菱Q系列PLC项目资料 本系统采用三菱Q系列PLC,本系统中用到16个伺服电机,采用16轴控制器通过光纤驱动16个伺服
  14. MacBook使用HHKB键盘设置
  15. 海康威视RTSP取流
  16. 【gp数据库】查询函数中引用数据表信息
  17. Android 自定义View实现圆形头像(适用于任意布局)
  18. Unity游戏设计之飞碟游戏
  19. 扛住100亿次请求——如何做一个“有把握”的春晚红包系统
  20. linux18安装anyconnect4.9遇到I/O问题

热门文章

  1. 2022-2028全球小型建筑设备行业调研及趋势分析报告
  2. la是什么牌子_la clover兰卡文是什么牌子_哪个国家的_什么档次?
  3. C#Winform的DataGridView控件使用详解2—DataGridView表格样式设置及表格操作
  4. 【GD32F310开发板试用】GD电机驱动底层配置——永磁同步电机控制
  5. 电脑投屏到电视android,电脑怎么投屏到电视?看完这篇文章你就懂了
  6. 微信小程序电商首页开发基本思路
  7. 相关性分析热点图_车联网数据分析(二):驾驶行为分析
  8. 【数据安全案例】北京购车摇号查询系统出现信息泄露漏洞
  9. 高德定位注册Key的问题
  10. win10 休眠唤醒 电源_win10电脑休眠后无法唤醒解决方法(图文)