#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""probe_jcx.py —— jcx.gov.cn /xwzx/tzgg.htm 结构探测"""
import re
import urllib.parse
from collections import Counter

import requests

requests.packages.urllib3.disable_warnings()
URL = "https://www.jcx.gov.cn/xwzx/tzgg.htm"
UA = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
      "(KHTML, like Gecko) Chrome/124.0 Safari/537.36")
H = {"User-Agent": UA, "Accept-Language": "zh-CN,zh;q=0.9"}

print("=" * 92)
r = requests.get(URL, headers=H, timeout=30, verify=False, allow_redirects=True)
r.encoding = r.apparent_encoding or "utf-8"
html = r.text
print("HTTP:", r.status_code, "| 最终URL:", r.url, "| 字节:", len(html))
m = re.search(r"<title[^>]*>(.*?)</title>", html, re.S | re.I)
print("<title>:", (m.group(1).strip()[:130] if m else "(无)"))

print("\n--- CMS 指纹 ---")
for k, pats in {
    "TRS": ["trs_editor", "createPageHTML", "dynclicks", "TRS_Editor"],
    "JPAAS": ["unitbuild", "paramJson", "jpaas"],
    "Lonsun": ["label/8888", "site/label"],
    "Hanweb": ["dataproxy.jsp", "jpage"],
    "UCAP": ["UCAPCONTENT", "zoomcon"],
    "jsp/asp/php": [".jsp", ".aspx", ".php", "__VIEWSTATE"],
    "静态htm": [".htm"],
    "es-search": ["es-search", "lmCode", "channelId"],
}.items():
    hit = [p for p in pats if p in html]
    if hit:
        print("  %-12s → %s" % (k, hit))

print("\n--- 分页线索 ---")
for pat in [r'createPageHTML\([^)]*\)', r'index_\d+\.htm', r'page[_-]?\d+\.htm', r'"totalpage"',
            r'totalPage', r'pageCount', r'pagecount', r'共\s*\d+\s*页', r'cur_page', r'\.jpage',
            r'startrecord', r'data-total']:
    mm = re.findall(pat, html, re.I)
    if mm:
        print("  %-26s → %s" % (pat[:26], list(dict.fromkeys(mm))[:6]))

print("\n--- 条目候选 ---")
lis = re.findall(r"<li[^>]*>.*?</li>", html, re.S | re.I)
print("  <li> 数:", len(lis))
n = 0
for li in lis:
    if re.search(r"20\d{2}[-/.]\d{1,2}[-/.]\d{1,2}", li) and "<a" in li:
        n += 1
        if n <= 4:
            print("   ", re.sub(r"\s+", " ", li)[:280])
print("  含日期+链接的 li:", n)

print("\n--- 日期样例 ---")
print(" ", sorted(set(re.findall(r"20\d{2}[-/年.]\d{1,2}[-/月.]\d{1,2}日?", html)))[:10])

print("\n--- 容器 class 前 18 ---")
cls = re.findall(r'class=["\']([^"\']+)["\']', html)
for c, k in Counter([x.strip() for s in cls for x in s.split()]).most_common(18):
    print("   %-30s %d" % (c, k))

print("\n--- 条目 URL 形态（去数字）---")
hrefs = re.findall(r'href=["\']([^"\']+)["\']', html)
pats = Counter()
for h in hrefs:
    if h.startswith(("javascript:", "#", "mailto:", "http://www.w3.org")):
        continue
    pats[re.sub(r"\d+", "N", h)[:64]] += 1
for p, c in pats.most_common(14):
    print("   %-66s %d" % (p, c))

print("\n--- 分页块原文 ---")
for kw in ["createPageHTML", "分页", "下一页", "page"]:
    i = html.find(kw)
    if i >= 0:
        print("  【%s】" % kw, re.sub(r"\s+", " ", html[max(0, i - 250):i + 450])[:650])
        break
print()
print("--- 首条链接前后上下文 ---")
i = html.find("<li")
j = html.find("20")
seg = html[max(0, j - 900):j + 300] if j > 0 else ""
print(" ", re.sub(r"\s+", " ", seg)[:900])
