"""
1. 第一次请求网站,服务器返回的 Set-Cookie 中携带 jsluid_s 参数,将获取到的响应内容解密拿到第一次 jsl_clearance_s 参数的值;
2. 携带第一次请求网站获取到的 Cookie 值再次访问网站,将获取到的响应内容解混淆逆向拿到第二次 jsl_clearance_s 参数的值;
3. 使用携带 jsluid_s 和 jsl_clearance_s 参数的 Cookie 再次访问网站,获取到真实的 HTML 页面内容,继而采集数据。
参考:https://mp.weixin.qq.com/s/5N0Kp35XGJAuJSiIyLQt1g
"""
import execjs
import re
import requests
import json
import hashlib
cookies = {}
url = "https://yellowpage.luosi.com/companylist-cate-4.html"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41"
}
def str2dict(string: str):
dic = {}
for i in string.split(";"):
k, v = i.split("=", 1)
dic[k] = v
return dic
def resolve_cookie(data):
data = json.loads(data)
chars = len(data["chars"])
for i in range(chars):
for j in range(chars):
clearance = data["bts"][0] + data["chars"][i] + data["chars"][j] + data["bts"][1]
encrypt = None
if data["ha"] == "md5":
encrypt = hashlib.md5()
elif data["ha"] == "sha1":
encrypt = hashlib.sha1()
elif data["ha"] == "sha256":
encrypt = hashlib.sha256()
encrypt.update(clearance.encode())
result = encrypt.hexdigest()
if result == data["ct"]:
return {"__jsl_clearance_s": clearance}
def get_first_cookie():
global cookies
resp1 = requests.get(url, headers=headers)
cookies.update(dict(resp1.cookies))
content = re.findall(r"document.cookie=(.*?);location", resp1.text)[0]
jsl_clearance_s = execjs.eval(content).split(";")[0]
cookies.update(str2dict(jsl_clearance_s))
print(cookies)
def get_second_cookie():
global cookies
resp_second = requests.get(url=url, headers=headers, cookies=cookies)
go_params = re.findall(";go\((.*?)\)</script>", resp_second.text)[0]
cookies.update(resolve_cookie(go_params))
print(cookies)
if __name__ == "__main__":
get_first_cookie()
get_second_cookie()
resp_third = requests.get(url=url, headers=headers, cookies=cookies)
resp_third.encoding = "utf-8"
print(resp_third.text)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2022-02-16 FastAPI 请求体 + 路径参数 + 查询参数