百度企业信用js加密研究

一、简单说明

      企业相关信息对于预测企业发展状况十分重要。基于公司业务,最近分析企业信息查询网站,了解了很多相关的网站,有全国企业信用信息公示, 天眼查,企查查,启信宝,水滴信用,百度企业信用,阿土伯等企业查询网站。今天以百度企业信用为例,研究这个网站的js反爬措施

百度企业信用js加密研究_第1张图片

二、发现问题   

     通过在搜索框中输入小米科技有限责任公司,得到企业列表页面

百度企业信用js加密研究_第2张图片

     公司详情页面url为:

    发现url中有关键标识pid,似乎是js生成的。如果我们能够生成pid参数,是不是就能少发送次请求,直接通过url拿到详情页公司信息。想象很丰富,现实很残酷啊!再次请求就能发现,每次生成的pid参数都是变化的,不过也无伤大雅,只是多发送一次请求。

     进入到详情页面,关键性信息全都是ajax动态加载,这样拿到完整信息发送的请求大量增加,相对的大大减少分析数据时间,

    进一步分析所有ajax请求,发现一个令人激动的现象,所有ajax请求url两个关键参数是一样的,例如基本信息和变更记录的url

     我们只需要拿到pid和tot两个关键参数,岂不是可以拿到所有的公司信息!接下来开始我们的js研究破解之路

三、分析破解js

     pid和tot参数似乎不是简单的基于加密算法生成的,我们在全局搜索找到生成参数的js,并在ch'rome中调试生成过程。

百度企业信用js加密研究_第3张图片

百度企业信用js加密研究_第4张图片

 

    经过一番艰苦的奋斗,终于不负苦心人。终于找到了,pid在详情页面请求的js中

     tk的生成同样存在

百度企业信用js加密研究_第5张图片

    再次刷新,发现和前面一篇的openlaw网站加密类似,tk的生成每次都在变化,所以不能单纯的通过python生成jk抓取数据。使用PyExecJS(Python3)运行js生成必要数据。避免麻烦直接上代码吧!

import re
import time
import requests
from lxml import etree
from utils.get_proxy import func_proxy
from utils.headers import headers
import execjs
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

ip_list = []
ip_list.append(func_proxy())
resp = requests.get(url="https://xin.baidu.com/s?q=%E5%B0%8F%E7%B1%B3%E7%A7%91%E6%8A%80&t=0", headers=headers, proxies=ip_list[0], verify=False)
response = resp.content.decode()
html = etree.HTML(response)
url = "https://xin.baidu.com" + html.xpath('//*[@class="zx-list-wrap"]/div[1]//a[@class="zx-list-item-url"]/@href')[0]
resp = requests.get(url, headers=headers, proxies=ip_list[0], verify=False)
text = resp.text
response = resp.content.decode()
html2 = etree.HTML(response)
d = html2.xpath('//*[@id="baiducode"]/text()')[0]
pid = eval(re.findall(r'"pid":(.*?)\,.*?"defTags"', text, re.S)[0])
id1, att = re.findall(r"document\.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", text)[0]
tk_func = "function mix(" +re.findall(r'mix\((.*?)\(function', text, re.S)[0]
'//*[@id="baiducode"]/text()'
print(tk_func)
tk = re.findall(att + r'="(.*?)"\>', text)[0]
print(tk, d)
tk = execjs.compile(tk_func).call('mix', tk, d)
print(tk)
time1 = int(time.time() * 1000)
url1 = "https://xin.baidu.com/detail/basicAjax?pid={}&tot={}&_={}".format(pid, tk, time1)
resp1 = requests.get(url1, headers=headers, proxies=ip_list[0])
print(resp1.content.decode('unicode_escape'))

得到的结果如下:

{'http': 'http://42.232.197.9:26360'}
function mix(tk, bid) {var tk = tk.split("").reverse().join("");return tk.substring(0, tk.length - bid.length);}
626216235492OUQmETa1XojxMQSJt*Fll8xus-CsToUa42yy 294532612626
yy24aUoTsC-sux8llF*tJSQMxjoX1aTEmQUO
{"status":0,"msg":"","data":{"entLogo":"\/static\/pc\/photo\/logo.png","shareLogo":"https:\/\/ts.bdimg.com\/biz\/ecom\/vmp\/[email protected]","entName":"小米科技有限责任公司","bdCode":294532612626,"openStatus":"开业","entType":"有限责任公司(自然人投资或控股)","isClaim":4,"claimUrl":"-","benchMark":true,"regNo":"91110108551385082Q","orgNo":"55138508-2","taxNo":"110108551385082","scope":"技术开发;货物进出口、技术进出口、代理进出口;销售通讯设备、厨房用品、卫生用品(含个人护理用品)、日用杂货、化妆品、医疗器械I类、II类、避孕器具、玩具、体育用品、文化用品、服装鞋帽、钟表眼镜、针纺织品、家用电器、家具(不从事实体店铺经营)、花、草及观赏植物、不再分装的包装种子、照相器材、工艺品、礼品、计算机、软件及辅助设备、珠宝首饰、食用农产品、宠物食品、电子产品、摩托车、电动车、自行车及零部件、智能卡、五金交电(不从事实体店铺经营)、建筑材料(不从事实体店铺经营);维修仪器仪表;维修办公设备;承办展览展示活动;会议服务;筹备、策划、组织大型庆典;设计、制作、代理、发布广告;摄影扩印服务;文艺演出票务代理、体育赛事票务代理、展览会票务代理、博览会票务代理;手机技术开发;手机生产、手机服务(限海淀区永捷北路2号二层经营);从事互联网文化活动;出版物零售;出版物批发;销售第三类医疗器械;销售食品;零售药品;广播电视节目制作。(企业依法自主选择经营项目,开展经营活动;从事互联网文化活动、出版物批发、出版物零售、销售食品、广播电视节目制作、零售药品、销售第三类医疗器械以及依法须经批准的项目,经相关部门批准后依批准的内容开展经营活动;不得从事本市产业政策禁止和限制类项目的经营活动。)","regAddr":"北京市海淀区清河中街68号华润五彩城购物中心二期13层","legalPerson":"雷军","startDate":"2010-03-03","openTime":"2010-03-03 至 2030-03-02","annualDate":"2018-06-20","regCapital":"185,000万(元)","industry":"其他科技推广和应用服务业","telephone":"6060****-1000","district":"北京市海淀区","authority":"北京市工商行政管理局海淀分局","realCapital":"-","orgType":"企业法人","scale":"-","directors":[{"name":"雷军","gender":"未知","title":"董事长","img":"\/static\/pc\/photo\/directors.png"},{"name":"林斌","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"刘芹","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"许达来","gender":"未知","title":"董事","img":"\/static\/pc\/photo\/directors.png"},{"name":"黎万强","gender":"未知","title":"监事","img":"\/static\/pc\/photo\/directors.png"},{"name":"雷军","gender":"未知","title":"经理","img":"\/static\/pc\/photo\/directors.png"}],"shares":[{"name":"雷军","type":"自然人股东","img":"\/static\/pc\/photo\/shares.png","amount":"143,934万(元)"},{"name":"黎万强","type":"自然人股东","img":"\/static\/pc\/photo\/shares.png","amount":"18,724万(元)"},{"name":"洪锋","type":"自然人股东","img":"\/static\/pc\/photo\/shares.png","amount":"18,623万(元)"},{"name":"刘德","type":"自然人股东","img":"\/static\/pc\/photo\/shares.png","amount":"3,718万(元)"}],"districtCode":"1004:110108"}}

本博客仅用于学习研究,切勿用于商业用途

尊重原创,转载请注明,谢谢!

你可能感兴趣的:(python)