本篇是针对 国家会展中心的访问量,以及百度企业信用网站的简单小破解,博客仅作为学习,不支持商用。谢谢配合。
1. 开胃菜 会展中心访问量
目标网址:http://www.eshow365.com/zhanhui/html/127989_0.html
需要解决问题:
实际我们在请求的时候,这个访问量并不在源码中,可看源码如下图:
可以看到其中<span id="txtClicks" style="color:red;">
这个 id
其实还是挺重要的,可以通过 id="txtClicks"
来查找是否为 id
绑定了一些事件,那么在源码中搜索一下吧。
写到这边 便结束这个吧,实际代码 自行写吧。如果实在还有问题,请留言。
2. 正题 百度企业信用 基本信息的获取。
目标网址:
https://xin.baidu.com/s
需解决问题:获取查询企业的 基本信息
、股东
、主要成员
的基本信息。
破解思路如下:
第一步:首先查看最终信息 提交时候所需要的参数有哪些。
第二步:根据这些参数来查找。判断是否有加密的参数,如果有找加密的Js
文件。
整理好了思路,那么便开始第一步 查找最终提交时候需要的参数。
通过fiddler发现最终需要的参数有:pid
,tot
,还有一个时间参数,那么紧接着便寻找这些参数吧。
1,寻找pid
的过程。通过搜索 xlTM-TogKuTw2V8djuHrnHsuj3z2kpHMDgmd
发现此参数如下图:
这个参数便找到了。
2,寻找tot
参数的过程,也是全局搜索xlTM-TogKuTwiToWPyXkJPOYarCqnSMZVAmd
实际中是搜不出来的,便考虑加密的问题吧,那么怎么找加密呢?第一步可以直接搜寻tot
这个过程是很困难的,毕竟fiddler
全局搜索出来的很多包含tot
的参数,但是作者这里没有找到好的方法,也是直接搜索的,慢慢的查看了一些Js
文件,结果还真发现,如下图:
通过fiddler
还真的找到了,那么便把这个Js
文件给格式化一下吧,格式网址如下:http://tool.chinaz.com/Tools/jsformat.aspx
继续寻找tk
。方法同上寻找到如下图:
把这个函数给 单独拿出来进行分析:
<script>
function mix(tk, bid) {
var tkLen = tk.length;
tk = tk.split('');
var bdLen = bid.length;
bid = bid.split('');
for (var i = 0; i < bdLen; i++) {
bid[i] = parseInt(bid[i]) + parseInt(tkLen - bdLen);
}
var one = tk[bid[bdLen - 1]];
for (var i = bdLen - 1; i >= 0; i -= 1) {
tk[bid[i]] = tk[bid[i - 1]];
if ((i - 2) < 0) {
tk[bid[i - 1]] = one;
break;
}
}
return tk.join("");
}
(function() {
var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB');
var baiducode = document.getElementById('baiducode').innerText;
window.tk = mix(tk, baiducode);
});
</script>
如上图便可很清晰了,但是mix(tk, bid)
需要tk
和bid
,而
var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB'); 参数 tk
var baiducode = document.getElementById('baiducode').innerText; # 参数 bid
window.tk = mix(tk, baiducode);
这就很简单了吧,找到HTML
中CSS
样式中id=tz51BT
不出意外建议在这个url
中寻找,如下图。
注意:每次刷新界面的 id
值是不一样的,所以 访问到这个界面首先通过正则来匹配如下的var tk
的id
值:
var tk = document.getElementById('tz51BT').getAttribute('avmzF3IB'); 参数 tk
var baiducode = document.getElementById('baiducode').innerText; # 参数 bid
那么继续寻找 baiducode
还是在这个界面,如下图:
这显然是百度信用代码。那么最终tk=xlTM-TogKuTwiToWPyXkJPOYAqCnrVMZaSmd
,bid=834195801595
那么便来构造函数 去控制台来一次看时候能够 打印出tot
的值,如下图:
注意:每一个公司的 tot
加密函数都不一样,这里作者已经试过了,所以这部分JS
函数希望你通过正则来匹配出来更好,当然直接写这个函数,作者试了貌似也对,但是为了确定建议匹配出来。
对比最终需要的参数如下图:
可知tot
便找对了。
这个破解流程就是这样,不知道具体代码你们还要不?这里分享一下吧,注意仅供 学习 切勿商用、转载希望标上出处,如有疑问和错误欢迎指出,一起讨论,如果你有更高深的方法和办法,欢迎指导。【不试试,请勿发言】。谢谢!
代码分享如下【有一个小的知识点分享,先做个初代代码1.0】:
代码1.0如下:
"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
import re
import time
import execjs
import requests
from chardet import *
from scrapy import Selector
class BaiDuQiYeXinYong:
def __init__(self):
self.key_world = input('请输入想要查询的公司名:')
def index(self):
"""
首页信息获取。
:return: 详情界面的 url
"""
index_url = 'https://xin.baidu.com/s'
index_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Referer': 'https://xin.baidu.com/',
}
params = {
'q': self.key_world,
't': '0'
}
response = requests.get(url=index_url, headers=index_headers, params=params).content
type_code = detect(response).get('encoding') # 获取编码格式。
response = response.decode(type_code) # 转化为字符串。
selector_response = Selector(text=response)
details_href = selector_response.xpath('//a[@class="zx-list-item-url"]/@href').extract_first()
pid = re.findall(r'pid=(.*)', details_href)[0] # 获取pid的值。
details_href = 'https://xin.baidu.com' + details_href
return pid, details_href
def details(self, pid, details_href):
"""
获取查找公司的 基本信息。
:param pid: 参数 pid 的值
:param details_href: 详情界面的 url
:return:
"""
details_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}
details_response = requests.get(url=details_href, headers=details_headers)
selector_details_response = Selector(text=details_response.text)
bid = selector_details_response.xpath('//span[@id="baiducode"]//text()').extract_first()
by_id, attribute = \
re.findall(r"tk = document.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", details_response.text)[0]
tk = re.findall(attribute + r'="(.*?)"\>', details_response.text)[0] # 通过属性来查找tk值
mix_func = re.findall(r'(function mix.*)\(function', details_response.text)[0]
mix_func = """
%s
""" % mix_func
js_function = execjs.compile(mix_func)
tot = js_function.call('mix', tk, bid) # 得到tot
search_time = int(time.time() * 1000)
info_url = "https://xin.baidu.com/detail/basicAjax?"
params = {
'pid': pid,
'tot': tot,
'_': search_time,
}
response = requests.get(info_url, headers=details_headers, params=params)
return response.content
def run(self):
"""
开始运行,返回最终的信息
:return:
"""
pid, details_href = self.index()
content_info = self.details(pid, details_href)
print(content_info)
if __name__ == '__main__':
bai_xin_yong = BaiDuQiYeXinYong()
bai_xin_yong.run()
结果如下:
看到上面是什么编码了吗?如果你平时没遇到百度一下就行了,这里直接分享给你吧,因为作者之前做过。这是一种 unicode-escape编码集,他是将unicode内存编码值直接存储:
参考大佬网址如下:http://www.eshow365.com/zhanhui/html/127989_0.html
【作者:开飞机的贝塔】
看过之后那么便直接写吧。
代码 2.0如下:
"""
这篇代码是有关使用百度企业信用来查看公司的基本信息,主要是有关js的一些破解,
本文章仅供学习,请勿商用对网站造成影响。
"""
import re
import time
import execjs
import requests
from chardet import *
from scrapy import Selector
class BaiDuQiYeXinYong:
def __init__(self):
self.key_world = input('请输入想要查询的公司名:')
def index(self):
"""
首页信息获取。
:return: 详情界面的 url
"""
index_url = 'https://xin.baidu.com/s'
index_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Referer': 'https://xin.baidu.com/',
}
params = {
'q': self.key_world,
't': '0'
}
response = requests.get(url=index_url, headers=index_headers, params=params).content
type_code = detect(response).get('encoding') # 获取编码格式。
response = response.decode(type_code) # 转化为字符串。
selector_response = Selector(text=response)
details_href = selector_response.xpath('//a[@class="zx-list-item-url"]/@href').extract_first()
pid = re.findall(r'pid=(.*)', details_href)[0] # 获取pid的值。
details_href = 'https://xin.baidu.com' + details_href
return pid, details_href
def details(self, pid, details_href):
"""
获取查找公司的 基本信息。
:param pid: 参数 pid 的值
:param details_href: 详情界面的 url
:return:
"""
details_headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}
details_response = requests.get(url=details_href, headers=details_headers)
selector_details_response = Selector(text=details_response.text)
bid = selector_details_response.xpath('//span[@id="baiducode"]//text()').extract_first()
by_id, attribute = \
re.findall(r"tk = document.getElementById\('(.*?)'\)\.getAttribute\('(.*?)'\)", details_response.text)[0]
tk = re.findall(attribute + r'="(.*?)"\>', details_response.text)[0] # 通过属性来查找tk值
mix_func = re.findall(r'(function mix.*)\(function', details_response.text)[0]
mix_func = """
%s
""" % mix_func
js_function = execjs.compile(mix_func)
tot = js_function.call('mix', tk, bid) # 得到tot
search_time = int(time.time() * 1000)
info_url = "https://xin.baidu.com/detail/basicAjax?"
params = {
'pid': pid,
'tot': tot,
'_': search_time,
}
response = requests.get(info_url, headers=details_headers, params=params)
return response.content
def run(self):
"""
开始运行,返回最终的信息
:return:
"""
pid, details_href = self.index()
content_info = self.details(pid, details_href)
print(content_info.decode('unicode_escape')) # 在这里添加了一行解码方式而已。
if __name__ == '__main__':
bai_xin_yong = BaiDuQiYeXinYong()
bai_xin_yong.run()
分享一下结果吧:
请自行对比 网页中的信息看是否有错误。
显然是没有错误的,这只是基本信息的获取,当然 变更记录
、知识产权
等应该也很好获取,这里便不看了。分享便结束了。过年回家了,大家新年快乐哈。