wechat-article-fetch · 공식 계정 기사 가져오기
핵심 사실(테스트 완료, 직접 실행 가능)
- UA가 유일한 진입 장벽: 스크립트 내장 브라우저 UA 사용. UA 없이 / curl / python-requests / MicroMessenger → 모두 302
- 본문 매우 쉽게 획득: 서버 사이드 렌더링,
<div id="js_content">에 존재, GET만으로 가능, JS/Cookie/로그인 불필요 - 이미지 무방어 링크: 실제 주소는
data-src - 발견 계층: 원문은 검색 엔진에 수집되지 않음; Sogou는 암호화된 리디렉션 체인 제공, 클린 상태의 순수 HTTP로 서명 링크 추출 가능(윈도우 ≥1시간, 빠르게 가져오기); ⚠️ 약 15~20개 요청/30분 연속 발생 시 IP 레벨 캡차 트리거(수동 필요, 브라우저로 해결 불가) → 낮은 빈도로 직렬 실행, 트리거 시 중지
UA 예시(직접 스크립트 작성 시 사용): Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
사용법(스크립트와 동일 디렉토리, 의존성 없음, CLI+라이브러리 이중 모드, 오류 구조화 WeChatError)
python wechat_fetch.py "<url>" [--format md|json|text] [--out FILE] # 본문 가져오기
python wechat_discover.py "키워드" [--format table|json] # 메타데이터 검색(리디렉션 체인 해제 방법은 채널 상태 참조)
python batch_fetch.py urls.txt [--min-delay 3] [--max-delay 8] [--daily-limit 500] # 배치: 속도 제한/중단점 재개/캡차 정지
채널 상태(2026-08 테스트, 잘못된 사용 방지)
| 채널 | 상태 |
|---|---|
| 공개 기사 페이지 직접 가져오기 | ✅ 장기 안정(본 스킬의 핵심) |
| Sogou 검색 | ✅ 최근 메타데이터만(클린 상태); 리디렉션 체인은 순수 HTTP 서명 URL(윈도우 ≥1시간, 빠르게 가져오기); ⚠️ 약 15-20개 요청/30분 연속 발생 시 IP 캡차 트리거, 수동 필요 |
| 컬렉션(앨범) 페이지 | ⚠️ 익명으로 탐색 가능, 컬렉션 내 기사만 |
| 공식 계정 홈페이지 이전 목록 | ❌ 익명 차단됨「微信客户端에서 링크 열기」; getmsg는 최근 ~10개만 |
| 공식 계정 백엔드 계정 간 검색 | ❌ 종료됨(2026-07-30 WeChat 종료, 업계 도구 모두 마비) |
결론: 가져오기 계층 안정; 발견 계층 상한 = Sogou 최근 + 컬렉션(⚠️ 동적 속도 제한, 낮은 빈도); 전체 이력은 적합한 채널 없음.
프로세스
- 링크 있음 → GET(브라우저 UA) →
#js_content가져오기 → 출력. 실패 시 진단표에 따라 처리, 맹목적 재시도 금지 - 키워드만 있음 → Sogou에서 메타데이터 획득; 본문 필요 시 순수 HTTP로 리디렉션 체인 해제, JS로 조합하여 서명 URL 획득 후 가져오기 프로세스로 복귀(실패/안티크롤러 트리거 시 브라우저로 대체; 또는 재게시 미러 찾기, 사용자에게 수정/삭제 가능성 알림). 홈페이지 이전, 백엔드 검색 시도 금지(종료/차단됨)
구문 분석(직접 정규식 작성 시에만 필요, 스크립트 사용 시 생략 가능)
앵커: var msg_title / nickname / ct + #js_content. ⚠️ msg_title/nickname은 .html(false)/htmlDecode() 래퍼 존재 — 정규식은 등호 뒤 첫 번째 따옴표 문자열만 일치, 그렇지 않으면 모두 비워짐; 이미지는 src가 아닌 data-src에서 가져옴.
실패 진단(맹목적 재시도 금지)
| 현상 | 원인 | 조치 |
|---|---|---|
| 302 | UA 부적합 | 브라우저 UA로 변경 |
| 200 + 매개변수 오류 | 링크 무효 | 중지, 링크 확인 |
| 302 → antispider | Sogou 측 차단(IP 레벨 캡차, 2026-08-13 테스트 결과 수동 필요) | 중지, 우회하지 않음; 낮은 빈도로 재시도 또는 복구 대기(브라우저도 차단됨) |
| 302 → appmsgcaptcha | 링크 이상/캡차 트리거 | 중지, 우회하지 않음 |
| 200 + 해당 페이지 없음 | UA가 크롤러로 판단 | 브라우저 UA로 변경 |
| 200 + 微信客户端에서 열기 | 로그인 필요한 페이지 | 해당 채널 사용 불가, Sogou/컬렉션으로 전환 |
| 200 + 삭제됨/위반 | 기사 처리됨 | 건너뛰기, 이유 기록 |
하드 제약(위반 시 중지)
- 로그인 상태 건드리지 않음: 개인 WeChat/공식 계정 백엔드 Cookie, QR 코드 상태 모두 사용 금지(계정 정지 + 계약 위반)
- 캡차 우회하지 않음: 트리거 시 전체 중지(캡차 우회 기술은 중국 형법 285조 위반)
- 대규모 수집 금지: robots 전체 Disallow, 개인 연구 소량 사용 목적; 직렬 실행 + 초 단위 간격, 일일 ≤500개
- 상업적 사용/배포 금지: 기사는 저작권 보호, 개인 학습 연구는 합법적 사용(전제: 배포 금지, 상업적 사용 금지, 저작자 표시 유지)
- 발견 계층은 동적 속도 제한 적용(2026-08-13 테스트:
1520개 요청/30분 시 IP 캡차 트리거, 시간 단위로 자동 해제되지 않음): 낮은 빈도 직렬 실행(30분 ≤10회 권장), 트리거 시 전체 중지, 복구 대기, 우회 시도 금지