#!/usr/bin/env python3 """全面爬取所有已发现的指引URL""" import requests, re, time, json, os from urllib.parse import urljoin HEADERS = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'} BASE_DIR = '/root/.openclaw/workspace/知识库/律师业务操作指引/上海律协' QUANGUO_DIR = '/root/.openclaw/workspace/知识库/律师业务操作指引/全国律协' os.makedirs(BASE_DIR, exist_ok=True) os.makedirs(QUANGUO_DIR, exist_ok=True) s = requests.Session() s.headers.update(HEADERS) def fetch(url, timeout=30): try: r = s.get(url, timeout=timeout) r.raise_for_status() r.encoding = r.apparent_encoding or 'utf-8' return r.text except Exception as e: print(f' ERR {url}: {e}') return '' def save_g(html, url, save_dir, title_override=''): h = re.sub(r']*>.*?', '', html, flags=re.DOTALL) h = re.sub(r']*>.*?', '', h, flags=re.DOTALL) h = re.sub(r']*>.*?', '', h, flags=re.DOTALL) h = re.sub(r']*>.*?', '', h, flags=re.DOTALL) title_m = re.search(r'([^<]+)', html) title = title_m.group(1).strip() if title_m else '未知' title = title.replace('_业务指引', '').replace('_东方律师网', '').replace('_中国律师网', '').strip()[:150] if title_override: title = title_override date_m = re.search(r'(\d{4}-\d{2}-\d{2})', html) date = date_m.group(1) if date_m else '' paras = re.findall(r']*>([^<]+)

', h) content = '\n\n'.join([p.strip() for p in paras if len(p.strip()) > 10]) if len(content) < 200: text = re.sub(r'<[^>]+>', ' ', h) text = re.sub(r'\s+', ' ', text).strip() content = text content = re.sub(r'\s+', ' ', content)[:500000] safe = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9()\(\)·\-]', '_', title) safe = re.sub(r'_+', '_', safe).strip('_')[:80] fp = os.path.join(save_dir, f'{safe}.md') n = 1 while os.path.exists(fp): fp = os.path.join(save_dir, f'{safe}_{n}.md') n += 1 with open(fp, 'w', encoding='utf-8') as f: f.write(f"# {title}\n\n") if date: f.write(f"**发布日期:** {date}\n\n") f.write(f"**来源:** {url}\n\n") f.write("---\n\n") f.write(content) sz = os.path.getsize(fp) print(f' [{len(content)}字] {os.path.basename(fp)}') return fp # 有效上海律协URL列表(所有确认有效的URL) SHANGHAI = [ ('https://www.lawyers.org.cn/info/bbd6c6bcd42b4fb0a136f497230d38d3','律师办理走私刑事案件辩护业务操作指引(2026)(试行)'), ('https://www.lawyers.org.cn/info/dd4adc2125484e4aa59457f53e3c3825','律师办理企业税务合规业务操作指引(2026)(试行)'), ('https://www.lawyers.org.cn/info/660420d6f6fc4b62a432dfdebf65563d','律师办理私募基金涉税业务操作指引(2026)(试行)'), ('https://www.lawyers.org.cn/info/2cbd80fdfe7548eab4dd3c84b473420e','律师办理海关归类预裁定业务操作指引(2025)(试行)'), ('https://www.lawyers.org.cn/info/fc1f36438b6b43e3bdc13c8b0623259ff','律师办理间接股权转让涉税业务操作指引(2025)(试行)'), ('https://www.lawyers.org.cn/info/85f8b2624a6b44e3814bfe18f084cc3b','律师办理居民企业并购重组业务涉税事项操作指引(2025)(试行)'), ('https://www.lawyers.org.cn/info/bfa2a4b3d6e44f8ebc9e69b9ae7a80db','律师从事关税法律业务操作指引(2025)(试行)'), ('https://www.lawyers.org.cn/info/8860d61369084652959ae0fef0a51e17','律师办理以个人为承租人的汽车融资租赁合同(直接租赁)业务操作指引(2022)'), ('https://www.lawyers.org.cn/info/c29fb4d1e3a140e7b0bf2eea6a7fae00','律师事务所营业税改征增值税试点实务操作指引(2012)'), ('https://www.lawyers.org.cn/info/67ee89fce62d42bc8e2a473597d515ff','律师办理创业投资企业知识产权尽职调查的操作指引(2024)'), ('https://www.lawyers.org.cn/info/bfff79ae40ef45368188677d9a89569d','律师提供商标法律服务业务操作指引(2009)'), ('https://www.lawyers.org.cn/info/2595d028390442588bfcb254f65484f9','律师提供商业秘密法律服务业务操作指引(2009)'), ('https://www.lawyers.org.cn/info/1f0bdb1126a840028eaeac6d63d28c70','律师提供著作权法律服务业务操作指引(2009)'), ('https://www.lawyers.org.cn/info/94e7d313ba2244059c46261bbf97ebfd','律师提供专利法律服务业务操作指引(2009)'), ('https://www.lawyers.org.cn/info/10f527052faf4bbca7376638de0e8b25','律师办理反不正当竞争纠纷案件业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/48147d36d95448798e338d6c345da216','律师提供专利法律服务业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/c0f8d39ecf0e4617a9dca64b55dd7118','律师提供商标法律服务业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/a977658b951d46e78ce9161731f75e02','律师提供著作权法律服务业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/429604578f2a45aa85b579b54e801965','律师提供商业秘密法律服务业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/32a9e69daf2747b683f49eec1942c7a6','律师办理并购重组法律尽职调查业务操作指引(2024)'), ('https://www.lawyers.org.cn/info/8c1488eac0ce44faa747739daea400d8','律师从事婚姻家事案件调解业务操作指引(2024)'), ('https://www.lawyers.org.cn/info/aac1bba1a92b4bb9b02cffdcbbb5c9a9','律师从事金融(消费)纠纷案件调解业务操作指引(2024)'), ('https://www.lawyers.org.cn/info/fa60392077774d19b9a2e536ccba3e9d','律师从事劳动争议调解业务操作指引(2024)'), ('https://www.lawyers.org.cn/info/57efbd25889341f7b65cea305eb2efca','律师从事调解业务操作指引(2021)'), ('https://www.lawyers.org.cn/info/9f28726a52884adcb8203eff1121a6d6','律师办理城市房屋拆迁、征地拆迁法律业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/a117d99d896e4e7598b7a07d7dc87206','律师办理国有土地使用权法律业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/14bff07c09c64ce1ab90698e3496522c','律师办理商品房交易业务操作指引(2007)'), ('https://www.lawyers.org.cn/info/bfa6aa5f1443487e856e61f80b8aa88f','律师办理融资租赁业务标准合同(直租)'), ('https://www.lawyers.org.cn/info/4b69eb9c158a49f0af3315af3cb1355e','律师办理融资租赁业务标准合同(回租)'), ('https://www.lawyers.org.cn/info/b35efb8e54e14e6aa43ba501e5ed7b56','律师代理海事证据保全和海事强制令案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/573393d26d0d498a93a18cf8b0f95090','律师代理海上污染损害赔偿案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/4f41cbbe209e4b3b92303bb17264167d','律师代理诉前扣押船舶案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/16e3cc8372b047a7a5be7a626c284d53','律师代理国际货物运输纠纷案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/43898c9d974e4b1db56e9fc5be0db8ff','律师代理船舶碰撞案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/40df0679c45042e7a14ee9179b3c22fb','律师代理货物运输保险代位求偿案件业务指引(2006)'), ('https://www.lawyers.org.cn/info/d692f983efad4dd0a5154158dae02df8','律师办理私募投资基金合规法律业务操作指引(2024)'), ('https://www.lawyers.org.cn/info/2fd59ef130d940f0aee8ccda3440cfc3','律师办理私募基金管理人异常经营专项法律意见书业务操作指引(2023)'), ('https://www.lawyers.org.cn/info/e3ac177654b1403dab5b5cbad814824f','律师办理私募投资基金法律业务操作指引(2020)'), ('https://www.lawyers.org.cn/info/0eb8fd9c21b343cd8330897fcec119f9','律师办理私募投资基金法律业务操作指引(2018)'), ('https://www.lawyers.org.cn/info/b5c6aa9f4e574bca9f470d0cd64afb97','律师办理私募投资基金法律业务操作指引(2016)'), ('https://www.lawyers.org.cn/info/1fadea825f34420ca1b73bb1c3ce9df8','律师签发律师函业务操作指引(2021)'), ('https://www.lawyers.org.cn/info/95961cb950dc4464be3a2f943885b529','律师办理继承法律业务操作指引(2009)'), ('https://www.lawyers.org.cn/info/7a4bfbc4dd9546d6ad7b21f0bacbf50f','律师办理民事案件聘请律师合同操作指引(2009)'), ('https://www.lawyers.org.cn/info/d55b2448f47542ddb0a88124406ae22b','上海市律师见证业务操作指引(2008)'), ] QUANGUO = [ ('https://www.acla.org.cn/info/6ac4bfc62cdf427a8bb9822bfe3ce1f7','律师从事税法服务业务操作指引'), ('https://www.acla.org.cn/info/c8e2a90999394156a9bf57a459e74299','律师办理商业秘密法律业务操作指引'), ('https://www.acla.org.cn/info/db55cc94958f4f8eaebeae94e37a77a5','律师办理婚姻家庭法律业务操作指引'), ] print("="*60) print("爬取上海律协指引") print("="*60) # 去重 existing files existing = set() for f in os.listdir(BASE_DIR): if f.endswith('.md'): existing.add(f.replace('.md','')) saved = 0 for i, (url, title) in enumerate(SHANGHAI): safe = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9()\(\)·\-]', '_', title) safe = re.sub(r'_+', '_', safe).strip('_')[:80] if safe in existing or f'{safe}_1.md' in existing or f'{safe}_2.md' in existing: print(f'[{i+1}] 已存在: {title[:50]}') continue print(f'\n[{i+1}/{len(SHANGHAI)}] {title[:60]}') html = fetch(url) if html and len(html) > 1000: save_g(html, url, BASE_DIR, title) saved += 1 time.sleep(0.3) print(f'\n上海律协: 新增 {saved} 个') print("\n" + "="*60) print("爬取全国律协指引") print("="*60) eq = set() for f in os.listdir(QUANGUO_DIR): if f.endswith('.md'): eq.add(f.replace('.md','')) q_saved = 0 for i, (url, title) in enumerate(QUANGUO): safe = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9()\(\)·\-]', '_', title) safe = re.sub(r'_+', '_', safe).strip('_')[:80] if safe in eq: print(f'[{i+1}] 已存在: {title}') continue print(f'\n[{i+1}/{len(QUANGUO)}] {title}') html = fetch(url) if html and len(html) > 1000: save_g(html, url, QUANGUO_DIR, title) q_saved += 1 time.sleep(0.3) print(f'\n全国律协: 新增 {q_saved} 个') shanghai_total = len([f for f in os.listdir(BASE_DIR) if f.endswith('.md')]) quanguo_total = len([f for f in os.listdir(QUANGUO_DIR) if f.endswith('.md')]) print(f"\n总计: 上海律协 {shanghai_total} 个, 全国律协 {quanguo_total} 个")