#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""probe_jcx2.py —— 分页块 + 详情页结构"""
import re
import urllib.parse

import requests

requests.packages.urllib3.disable_warnings()
LIB = "https://www.jcx.gov.cn"
URL = LIB + "/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"}


def get(u):
    r = requests.get(u, headers=H, timeout=30, verify=False)
    r.encoding = r.apparent_encoding or "utf-8"
    return r.status_code, r.text


_, h = get(URL)

print("=== ① 分页块（PrevDisabled / Next / tzgg/N.htm 周围）===")
for kw in ["PrevDisabled", "Next", "tzgg/"]:
    i = h.find(kw)
    if i >= 0:
        print("\n  【%s】位置 %d:" % (kw, i))
        print("   ", re.sub(r"\s+", " ", h[max(0, i - 600):i + 600])[:1100])

print("\n=== ② 页脚/页数线索 ===")
for pat in [r'"totalpage"\s*[:=]\s*\d+', r'totalpage', r'\d+\s*/\s*\d+', r'共\d+页',
            r'pageCount', r'dynclicks_u9', r'line_u9_']:
    mm = re.findall(pat, h, re.I)
    print("  %-22s → %d 次 %s" % (pat[:22], len(mm), list(dict.fromkeys(mm))[:4]))

print("\n=== ③ 试各分页 URL 猜法 ===")
for cand in ["/xwzx/tzgg/1.htm", "/xwzx/tzgg/2.htm", "/xwzx/tzgg/7.htm", "/xwzx/tzgg/28.htm",
             "/xwzx/tzgg2.htm", "/xwzx/tzgg_2.htm", "/xwzx/tzgg/1.html", "/xwzx/tzgg.htm?page=2"]:
    try:
        c, hh = get(LIB + cand)
        n = len(re.findall(r'<li id="line_u9_\d+"', hh))
        first = re.search(r'<b class="date">(20\d\d-\d\d-\d\d)</b>', hh)
        print("  %-28s HTTP %s li=%s 首日期=%s" % (cand, c, n, first.group(1) if first else "-"))
    except Exception as e:
        print("  %-28s ❌ %s" % (cand, str(e)[:36]))

print("\n=== ④ 详情页结构 ===")
m = re.search(r'<a href="(\.\./info/\d+/\d+\.htm)"[^>]*title="([^"]*)"', h)
if m:
    d = urllib.parse.urljoin(URL, m.group(1))
    print("  探测:", d)
    c, hd = get(d)
    print("  HTTP:", c, "| 字节:", len(hd))
    mt = re.search(r"<title[^>]*>(.*?)</title>", hd, re.S | re.I)
    print("  <title>:", (mt.group(1).strip()[:110] if mt else "(无)"))
    for k in ["ArticleTitle", "PubDate", "ColumnName", "ContentSource", "SiteName", "Author"]:
        mm = re.findall(r'<META[^>]*Name="%s"[^>]*>' % k, hd, re.I)
        if mm:
            print("  meta %-14s → %s" % (k, mm[0][:150]))
    print("  各容器 <p> 数 / 文本:")
    blocks = re.findall(r'<div[^>]*class=["\']([^"\']+)["\'][^>]*>(.*?)</div>\s*(?=<div|</body)', hd, re.S | re.I)
    stats = [(b.count("<p"), len(re.sub(r"<[^>]+>", "", b)), cl[:36]) for cl, b in blocks]
    for pc, tx, cl in sorted(stats, reverse=True)[:12]:
        print("    p=%-3d 文本=%-6d %s" % (pc, tx, cl))
    print("  id=zoom:", 'id="zoom"' in hd or "id=zoom" in hd, "| vsbcontent:", "vsbcontent" in hd.lower())
    print("  含 trs_editor:", "trs_editor" in hd.lower(), "| 含 <table>:", "<table" in hd.lower())
    atts = re.findall(r'href="([^"]+\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd))"', hd, re.I)
    print("  文件链接:", len(atts), atts[:4])
    # 正文标记
    for mark in ["<!--ZJEG_RSS", "ContentStart", "vsb_content", "TRS_Editor", "article", "content"]:
        if mark.lower() in hd.lower():
            print("   标记命中:", mark)
