首页 > 编程语言 >Python一键查询 ICP 备案详情

Python一键查询 ICP 备案详情

时间:2022-12-28 17:33:09浏览次数:49  
标签:info domain gov cn Python 一键 json miit ICP

做搜索引擎优化的都时长面临一个问题,就是网站备案到底对seo是否有影响呢,今天将为大家仔细分析网站备案,到底对SEO有没有影响?


首先说下网站备案的目的、是为了防止在网上从事非法的网站经营活动,打击不良互联网信息的传播,如果网站不备案的话,很有可能被查处以后关停。


目前在国内,没有备案是无法建站的,所以我们只能选择海外空间,而海外空间在我们国内访问往往速度是没有国内快的,然而空间的速度对搜索引擎优化会有一定的影响。


从SEO的算法角度来讲,网站是否备案其实根本不会直接影响到网站的排名,但是从其他角度来考虑,我们是强烈建议客户要做备案,因为备案是间接地影响网站排名的。所以时常的查询一些网站的备案信息也是SEOer日常的一部分。


之所以在上述说了一些额外的东西,并不是小编转行了,而是为了引入今天的主题,查询icp备案,想必大家在工作中或多或少的,都会接触一些关于网站备案查询的问题。


现在的查询流程太过繁琐,总是要打开浏览器、点击书签、完成滑动验证等重复操作,感觉十分浪费时间。于是就有了今天的查询程序。


该程序适用于2021年新版的工信部ICP/IP地址/域名信息备案管理系统。

https://beian.miit.gov.cn/


实现功能:

1. 通过https://beian.miit.gov.cn/ 查询信息,确保与管局实际信息一致;
2. 支持自动完成图片拖动验证,存在极低的失败率
3. 支持循环翻页查询,获取企业名下的所有备案信息
4. 查询完毕后按任意键继续查询


打开上述项目地址,按照下图方式进行操作:

Python一键查询 ICP 备案详情_Image


如上图演示,我们在提交请求的时候会发送一个图形验证码的请求,

即 getcheckImage ,查看请求头,我们可以看出请求头里面有一个token的参数,需要我们进行处理,那么token值是怎么来的呢?通过上述链接排查,返现是通过auth接口返回的数据,如下图:

Python一键查询 ICP 备案详情_json_02

Python一键查询 ICP 备案详情_Windows_03

Python一键查询 ICP 备案详情_Image_04


然后我们通过查看请求头,可以看出,他的请求需要我们提供两个参数,

authKey 和 timestamp ,timestamp顾名思义是时间戳,那么我们查找

authKey是怎么来的就行了。通过全局搜索进行查找,如下图:

Python一键查询 ICP 备案详情_Windows_05

Python一键查询 ICP 备案详情_json_06

Python一键查询 ICP 备案详情_Windows_07


由此我们可以得到 authKey ,然后我们进行滑动验证,发现送了一个checkImage的验证,那么他有哪些参数呢,如下图:

Python一键查询 ICP 备案详情_json_08

Python一键查询 ICP 备案详情_json_09


通过比对,我们发现他的key值,其实就是 getcheckImage 接口返回值的uuid, 而 value 是图片移动的坐标值,这个我们通过解码图片,写入并计算图片缺口位置即可。详情请看代码:


通过上述图形验证过后,我们会发现发送了一个queryByCondition,通过其返回值,我们可以看到这就是我们想要的参数了,但是我们细看请求头,却又发现了一个sign的参数,这又是从哪来的呢?通过比对,我们可以看出该参数值checkImage后返回的参数,由此我们只需要取到他的值作为传参即可。分析如下图:

Python一键查询 ICP 备案详情_Windows_10

Python一键查询 ICP 备案详情_Image_11


通过上述分析,接下来进入到代码环节,在此之前请自行安装 opencv_python 模块,安装代码:

pip install opencv_python


具体代码如下:

# coding:utf-8
# __auth__ = "maiz"
# __date__ = "2021/6/6 13:55"


import requests
import hashlib
import time
import base64
import cv2
import os


while True:
# 提前获取要查询的对象信息,以免Token失效(Token有效时间为3分钟)
print("以企业名称查询的,需要输入企业全称\n")
print("以域名查询的,请不要输入“http/www”等域名外的字符\n")
info = input("请输入要查询的备案信息,可以为公司名或域名:")
info_data = {
'pageNum': '',
'pageSize': '',
'unitName': info
}
# 构造AuthKey
timeStamp = int(round(time.time()*1000))
authSecret = 'testtest' + str(timeStamp)
authKey = hashlib.md5(authSecret.encode(encoding='UTF-8')).hexdigest()
# 获取Cookie
cookie_headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42'
}
cookie = requests.utils.dict_from_cookiejar(requests.get('https://beian.miit.gov.cn/', headers=cookie_headers).cookies)['__jsluid_s']
# 请求获取Token
t_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/auth'
t_headers = {
'Host': 'hlwicpfwc.miit.gov.cn',
'Connection': 'keep-alive',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
'Accept': '*/*',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46',
'Origin': 'https://beian.miit.gov.cn',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://beian.miit.gov.cn/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cookie': '__jsluid_s=' + cookie
}
data = {
'authKey': authKey,
'timeStamp': timeStamp
}
t_response = requests.post(t_url, data=data, headers=t_headers)
try:
get_token = t_response.json()['params']['bussiness']
except:
print('\n'"请求被禁止,请稍后或更换头部与IP后再试,状态码:", t_response.status_code)
break
# 获取验证图像、UUID
p_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/image/getCheckImage'
p_headers = {
'Host': 'hlwicpfwc.miit.gov.cn',
'Connection': 'keep-alive',
'Content-Length': '0',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
'Accept': 'application/json, text/plain, */*',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46',
'token': get_token,
'Origin': 'https://beian.miit.gov.cn',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://beian.miit.gov.cn/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cookie': '__jsluid_s=' + cookie
}
p_request = requests.post(p_url, data='', headers=p_headers)
try:
p_uuid = p_request.json()['params']['uuid']
big_image = p_request.json()['params']['bigImage']
small_image = p_request.json()['params']['smallImage']
except KeyError:
print("请重试,请求状态码:", p_request.status_code)
# 解码图片,写入并计算图片缺口位置
with open('bigImage.jpg', 'wb') as f:
f.write(base64.b64decode(big_image))
f.close()
with open('smallImage.jpg', 'wb') as f:
f.write(base64.b64decode(small_image))
f.close()
background_image = cv2.imread('bigImage.jpg', cv2.COLOR_GRAY2RGB)
fill_image = cv2.imread('smallImage.jpg', cv2.COLOR_GRAY2RGB)
background_image_canny = cv2.Canny(background_image, 100, 200)
fill_image_canny = cv2.Canny(fill_image, 100, 300)
position_match = cv2.matchTemplate(background_image, fill_image, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(position_match)
position = max_loc
mouse_length = position[0]+1
os.remove('bigImage.jpg')
os.remove('smallImage.jpg')
# 通过拼图验证,获取sign
check_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/image/checkImage'
check_headers = {
'Host': 'hlwicpfwc.miit.gov.cn',
'Accept': 'application/json, text/plain, */*',
'Connection': 'keep-alive',
'Content-Length': '60',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
'token': get_token,
'Content-Type': 'application/json',
'Origin': 'https://beian.miit.gov.cn',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://beian.miit.gov.cn/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cookie': '__jsluid_s=' + cookie
}
check_data = {
'key': p_uuid,
'value': mouse_length
}
check_request = requests.post(check_url, jsnotallow=check_data, headers=check_headers)
try:
sign = check_request.json()['params']
except KeyError:
print(check_request.json()['msg'])
break
# 获取备案信息
info_url = 'https://hlwicpfwc.miit.gov.cn/icpproject_query/api/icpAbbreviateInfo/queryByCondition'
info_headers = {
'Host': 'hlwicpfwc.miit.gov.cn',
'Connection': 'keep-alive',
'Content-Length': '78',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Microsoft Edge";v="90"',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42',
'Content-Type': 'application/json',
'Accept': 'application/json, text/plain, */*',
'uuid': p_uuid,
'token': get_token,
'sign': sign,
'Origin': 'https://beian.miit.gov.cn',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://beian.miit.gov.cn/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cookie': '__jsluid_s=' + cookie
}
info_request = requests.post(info_url, jsnotallow=info_data, headers=info_headers)
domain_total = info_request.json()['params']['total']
page_total = info_request.json()['params']['lastPage']
page_size = info_request.json()['params']['pageSize']
start_row = info_request.json()['params']['startRow']
end_row = info_request.json()['params']['endRow']
os.system('cls')
print("\n查询对象", info, "共有", domain_total, "个备案域名", '\n')
print("域名具体信息如下:")
for i in range(1, page_total+1):
for k in range(start_row, end_row+1):
info_base = info_request.json()['params']['list'][k]
domain_name = info_base['domain']
domain_type = info_base['natureName']
domain_licence = info_base['mainLicence']
domain_web_licence = info_base['serviceLicence']
domain_site_name = info_base['serviceName']
domain_status = info_base['limitAccess']
domain_approve_date = info_base['updateRecordTime']
domain_owner = info_base['unitName']
try:
domain_content_approved = info_base['contentTypeName']
if not bool(domain_content_approved):
domain_content_approved = "无"
except KeyError:
domain_content_approved = "无"
print("\n域名主办方:", domain_owner, '\n')
print("域名:", domain_name, '\n')
print("网站名称:", domain_site_name, '\n')
print("备案许可证号:", domain_licence, '\n')
print("网站备案号:", domain_web_licence,'\n')
print("域名类型:", domain_type, '\n')
print("网站前置审批项:", domain_content_approved, '\n')
print("是否限制接入:", domain_status, '\n')
print("审核通过日期:", domain_approve_date, '\n')
info_data_page = {
'pageNum': i+1,
'pageSize': '10',
'unitName': info
}
if info_data_page['pageNum'] > page_total:
print("查询完毕", '\n')
break
else:
info_request = requests.post(info_url, jsnotallow=info_data_page, headers=info_headers)
start_row = info_request.json()['params']['startRow']
end_row = info_request.json()['params']['endRow']
time.sleep(3)
os.system('pause')


右击运行代码,输入你想要查询的域名主题或者公司名称,即可成功的打印出相关的备案信息了。代码获取后台回复icp备案查询



标签:info,domain,gov,cn,Python,一键,json,miit,ICP
From: https://blog.51cto.com/u_15924937/5975840

相关文章

  • 使用Python的asyncio模块异步下载整站壁纸
    这篇文章主要给大家介绍关于Python中asyncio模块的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学......
  • 使用python爬取B站视频
    B站之所以火,是因为趣味与知识并存。正如一句“你在B站看番,我在B站学习”,B站还是有一些质量比较好的学习视频。当你在B站上看到喜欢的视频想保存下来时,怎么办呢?我相信很多逛B......
  • Python 爬取人人视频
    hello,小伙伴们,又见面了,距离上一次发布文章的时间,也算是久别重逢了。期间也发生了很多的事情,导致博文断更,也是笔者不愿意的,但是确实是比较忙,不再过多赘述,希望大家能够体谅。......
  • Python爬取快手博主所有视频
    随着互联网经济的快速发展和自媒体行业的普及,越来越多的视频创作者加入了短视频平台,不仅快速的推动了短视频平台行业的发展,也给大众带来了更多新鲜有趣的知识和内容。据最新......
  • sublime安装REPL无法执行python3.7版本
    一、下载sublime最新版本地址:SublimeText-TextEditing,DoneRight单击DOWNLOADFORWINDOWS需要等一会儿自己就下载了。  安装就是下一步就可以了。二、安装......
  • python 使用thread多线程执行耗时代码
    python使用thread多线程执行耗时代码1、引入所需要的包importqueueimportthreadingimporttraceback2、定义线程类:classThreadService(threading.Thread):  de......
  • Python对象的比较和拷贝
    Python对象的比较和拷贝本文内容存在主观理解,详细请查阅官网文档比较(==VSis)==操作符是比较对象的值是否相等,而is比较的事对象的身份标识是否相等,即它们是否是同一......
  • tensorflow_probability.python.bijectors的一些使用
      网上见到一个TensorFlow的代码,没见过这个形式的,是概率编程的代码:#coding=utf-8#Copyright2020TheTF-AgentsAuthors.##LicensedundertheApacheLicens......
  • python中global 和 nonlocal 的作用域
    python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量。一globalglobal关键字用来在函数或其他局部作用域中使用全局变量。......
  • 【leetcode】3: 无重复字串的最长子串(python)
    给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3......