Ë
    ¸¬ujU'  ã                   óÎ   — d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 dZdZedz   ZdZd	Zd
ZdZdZdZedz   Zdedz   dœZd„ Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)u  è¿žäº‘æ¸¯ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº â€” é€šçŸ¥å…¬å‘Šçˆ¬è™«
URL: http://www.lda.gov.cn/lygjjjskfq/tzgg/tzgg.html
CMS: TrueCMS (jpage AJAXåˆ†é¡µ)
åˆ—è¡¨: AJAXæŽ¥å�£ /TrueCMS/messageController/getMessage.do
  jsonpCallback å¿…éœ€(ç¼ºåˆ™404), å�‚æ•° startrecord/endrecord/perpage=15, columnIdå›ºå®š
  totalRecord=946, 63é¡µ
è¯¦æƒ…: /lygjjjskfq/tzgg/content/{UUID}.html
  æ ‡é¢˜: meta ArticleTitle / div.pp1>h1
  æ—¥æœŸ: meta PubDate / div.pp2 "å�‘å¸ƒæ—¶é—´ï¼š2026-07-16 17:15"
  æ�¥æº�: div.pp2 "ä¿¡æ�¯æ�¥æº�ï¼šç”Ÿæ€�çŽ¯å¢ƒå±€"
  æ­£æ–‡: div#zoom
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbzhttp://www.lda.gov.cnz/lygjjjskfq/tzggu   è¿žäº‘æ¸¯ç»�å¼€åŒº-é€šçŸ¥å…¬å‘Šu   æ±Ÿè‹�zcrawl_lda_tzgg.pyé?   é   z$75b959b9-e957-4642-996b-16ef4602f58fz(/TrueCMS/messageController/getMessage.doz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36z
/tzgg.html)z
User-AgentÚRefererc                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    ú#/root/gov_crawler/crawl_lda_tzgg.pyÚlogr   #   s   € Ü	ˆ#”C—J‘J dÖ+ó    c                 ó  — |xs t         }t        |«      D ]/  }	 t        j                  | |d¬«      }d|_        |j
                  c S  y
# t        $ r9}t        d| › d|dz   › d|› d|› �«       t        j                  d	«       Y d }~Œpd }~ww xY w)Né   )ÚheadersÚtimeoutúutf-8z	  [WARN] u    è¯·æ±‚å¤±è´¥(é   ú/z): é   Ú )
ÚHEADERSÚrangeÚrequestsÚgetÚencodingÚtextÚ	Exceptionr   ÚtimeÚsleep)Úurlr   ÚretriesÚhÚattemptÚrÚes          r   Úfetchr*   '   s�   € ØÒ”7€AÜ˜“>ò ˆð	Ü—‘˜S¨!°RÔ8ˆAØ ˆAŒJØ—6‘6ŠMð	ð øô ò 	Ü�)˜C˜5 ¨w°q©y¨k¸¸7¸)À3ÀqÀcÐJÔKÜ�J‰J�q�M‰Mûð	ús   š*A	Á		BÁ/BÂBc           	      óz  — | dz
  t         z  dz   }| t         z  }||t         t        dt        t        j                  «       dz  «      › �dœ}	 t	        j
                  t        t        |d¬«      }d|_        |j                  «       }|j                  dd«      }t        j                  d|t        j                  «      }g }	|D ]Ñ  }
t        j                  d|
«      }t        j                  d|
«      }|sŒ2|j!                  d«      }|j#                  d«      st%        t&        |«      }|j!                  d«      j)                  «       }t        j*                  dd|«      j)                  «       }|r|j!                  d«      nd}|	j-                  |||dœ«       ŒÓ |	S # t        $ r}t        d| › d	|› �«       g cY d
}~S d
}~ww xY w)u0   AJAXåˆ†é¡µæŠ“åˆ—è¡¨, è¿”å›ž [{title, url, date}]r   Úcallbackiè  )ÚstartrecordÚ	endrecordÚperpageÚcolumnIdÚjsonpCallbackr   )r   Úparamsr   r   z  [WARN] AJAX u   é¡µå¤±è´¥: NÚresultr   z <record>\s*<!\[CDATA\[(.*?)\]\]>z\[(20\d{2}-\d{2}-\d{2})\]z href="([^"]*)"\s+title="([^"]*)"Úhttpr   u   ^(?:&middot;|Â·|&nbsp;|\s)+)Útitler$   Údate)ÚPER_PAGEÚ	COLUMN_IDÚintr"   r   r   ÚAJAX_URLr   r   Újsonr!   r   ÚreÚfindallÚSÚsearchÚgroupÚ
startswithr   ÚBASEÚstripÚsubÚappend)Úpgr-   r.   r2   r(   Údatar)   r3   ÚrecordsÚitemsÚrecÚdmÚamÚhrefr5   r6   s                   r   Ú
crawl_listrN   4   sŒ  € à˜‘6œXÑ%¨Ñ)€KØ”X‘€Ià"ØÜÜØ#¤C¬¯	©	«°DÑ(8Ó$9Ð#:Ð;ñ€FðÜ�L‰Lœ¬7¸6È2ÔNˆØˆŒ
Ø�v‰v‹xˆð �X‰X�h Ó#€FÜ�j‰jÐ<¸fÄbÇdÁdÓK€GØ€EØò Bˆä�Y‰YÐ3°SÓ9ˆÜ�Y‰YÐ:¸CÓ@ˆÙØØ�x‰x˜‹{ˆØ�‰˜vÔ&Üœ4 Ó&ˆDØ—‘˜“×!Ñ!Ó#ˆä—‘Ð5°r¸5ÓA×GÑGÓIˆÙ ˆr�x‰x˜Œ{ bˆØ�‰˜u¨T¸4Ñ@ÕAðBð €Løô) ò Üˆn˜R˜D ¨A¨3Ð/Ô0Ø�	ûðús   Á8F Æ	F:ÆF5Æ/F:Æ5F:c                 ó–  ‡‡— t        | «      }|syt        |d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j	                  «       }|sG|j                  d	d
¬«      }|r2|j                  d«      r!|j                  d«      j                  d¬«      }d}|j                  dddi¬«      }|r=|j                  d«      r,t        j                  d|d   «      }|r|j                  d«      }d}	|j                  d	d¬«      }
|
�r5g }t        «       Š|
j                  dd¬«      D ]Ž  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d«      st        t        |«      }|j                  d¬«      xs d}|‰vsŒj‰j                  |«       |j!                  ||dœ«       Œ� g }|
j                  g d¢d¬«      D �]Ÿ  }|j"                  dk7  r|j%                  d«      rŒ%|j"                  d	k(  r|j                  d«      dv rŒH|j%                  d	d ¬«      rŒ\|j%                  d!¬«      s$|j                  d"«      rd!|j                  d"«      v rŒ“|j"                  d#k(  r+d$„ Št'        ˆˆfd%„|j                  dg«      D «       «      }|rŒÍt)        |«      j	                  «       }|sŒé|j"                  d#k(  rA|j                  d«      r�Œ|j                  d#d&¬«      }|rt)        |«      j	                  «       }|j"                  d	k(  r7|j%                  d	«      r&|j                  d#dg«      s|j!                  |«       �Œ|j"                  d'v s�Œ�|j!                  |«       �Œ¢ d(j+                  |«      j	                  «       }	g }|	j-                  d(«      D ]Q  }|j	                  «       }|sŒt        j.                  d)d|«      j	                  «       sŒ<||vsŒA|j!                  |«       ŒS d(j+                  |«      j	                  «       }	|r$d*j+                  d+„ |D «       «      }|	r|	d(z   |z   n|}	|||	fS ),u   è¿”å›ž (title, date, content))NNNzhtml.parserr   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚdivÚpp1)Úclass_Úh1T)rC   ÚPubDatez(20\d{2}-\d{2}-\d{2})r   Úzoom)ÚidÚa)rM   rM   z*\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|txt)$r4   u   é™„ä»¶)rQ   r$   )ÚprU   Útable)Ú	recursiver^   r[   )ÚxgwdPÚqrcoder`   ÚfilelinkÚclassr]   c                 ó’   — d}| j                   dk(  r| j                  dd«      }|r!|j                  d«      st        t        |«      }|S )Nr   r\   rM   r4   )rQ   r   rA   r   rB   )ÚelÚus     r   Ú_att_urlz extract_detail.<locals>._att_urlŽ   sA   € Ø�AØ—w‘w #’~ØŸF™F 6¨2Ó.˜Ù §¡¨fÔ!5Ü#¤D¨!Ó,˜Ø�Hr   c              3   óB   •K  — | ]  } ‰|«      r ‰|«      ‰v –— Œ y ­w)N© )Ú.0re   rg   Úseen_atts     €€r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>•   s*   øè ø€ ò Dà±h¸r´lñ ˜R“L HÔ,ñDùs   ƒF)r]   r^   z

ú<[^>]+>ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)z<p><a href="r$   z">rQ   z</a></p>Nri   )rj   Úatts     r   rl   z!extract_detail.<locals>.<genexpr>·   s(   è ø€ Ò!lÐY\ L°°U±°¸B¸sÀ6¹{¸mÈ8Ô"TÑ!lùs   ‚)r*   r   Úfindr   rC   Úget_textr<   r?   r@   ÚsetÚfind_allÚIrA   r   rB   ÚaddrE   rQ   Úfind_parentÚanyÚstrÚjoinÚsplitrD   )r$   ÚhtmlÚsoupr5   ÚmtrX   r6   ÚmdÚmrT   ÚdcÚattachmentsr\   rM   rQ   ÚpartsÚnodeÚhas_attÚhtml_strÚinner_pÚ
uniq_partsÚpartÚpart_strippedÚ	att_linksrg   rk   s                           @@r   Úextract_detailrŒ   Z   s÷  ù€ ä�‹:€DÙØÜ˜˜}Ó-€Dà€EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�u UˆYÓ+ˆÙ�"—'‘'˜$”-Ø—G‘G˜D“M×*Ñ*°Ð*Ó6ˆEà€DØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔÜ�I‰IÐ.°°9±Ó>ˆÙØ—7‘7˜1“:ˆDà€GØ	�‰�5˜VˆÓ	$€BÚ	àˆÜ“5ˆØ—‘˜S t�Ó,ò 	DˆAØ�V‘9ˆDÜ�y‰yÐFÈÌbÏdÉdÕSØ—‘ vÔ.Ü"¤4¨Ó.�DØ—z‘z¨�zÓ-Ò9°�Ø˜xÒ'Ø—L‘L Ô&Ø×&Ñ&°¸TÑ'BÕCð	Dð ˆØ—K‘KÒ 5À�KÓFó &	'ˆDà�y‰y˜GÒ#¨×(8Ñ(8¸Ô(AØØ�y‰y˜EÒ! d§h¡h¨t£nÐ8KÑ&KØØ×Ñ ¨'ÐÔ2ØØ×Ñ zÐÔ2°t·x±xÀÔ7HÈZÐ[_×[cÑ[cÐdkÓ[lÑMlØà�y‰y˜CÒòô ô Dà"Ÿm™m¨S¨EÓ2ôDó D�ñ ØÜ˜4“y—‘Ó(ˆHÙØà�y‰y˜CÒà—9‘9˜WÔ%ÙØŸ)™) C°5˜)Ó9�ÙÜ" 7›|×1Ñ1Ó3�HØ�y‰y˜EÒ! d×&6Ñ&6°uÔ&=ÀdÇiÁiÐQTÐV]ÐP^ÔF_Ø—‘˜XÖ&Ø—‘˜nÓ,Ø—‘˜XÖ&ðM&	'ðN —+‘+˜eÓ$×*Ñ*Ó,ˆàˆ
Ø—M‘M &Ó)ò 	1ˆDØ ŸJ™J›LˆMÙ Øä—6‘6˜* b¨-Ó8×>Ñ>Ô@ØØ JÒ.Ø×!Ñ! -Õ0ð	1ð —+‘+˜jÓ)×/Ñ/Ó1ˆÙØŸ	™	Ñ!lÐ`kÔ!lÓlˆIÙ6=�g Ñ&¨Ò2À9ˆGØ�$˜ÐÐr   c                  ó8  — dd l } | j                  «       }|j                  dt        d¬«       |j	                  «       }t        dt        |j                  t        «      «      }t        j                  t        d¬«      }|j                  d«       |j                  «       }|j                  d«       |j                  d	«       dx}x}}t        «       }	t        d|dz   «      D �]þ  }
t!        d
|
› d�«       t#        |
«      }|st!        d«        �nÔt!        dt%        |«      › d�«       |D �]³  }|d   |	v rŒ|	j'                  |d   «       |j                  d|d   f«       |j)                  «       r|dz  }ŒLt!        d|d   › d|d   d d › �«       t+        |d   «      \  }}}|s|d   }|s|d   }|r1t%        t-        j.                  dd|«      j1                  «       «      dk  r"t!        d|rt%        |«      nd› d�«       |dz  }ŒÛt-        j.                  dd|«      d d }t-        j.                  dd|«      j1                  «       }t-        j2                  d|«      rdnd}	 |j                  d||||d   |d   |t4        t6        t8        |df«      }|j:                  }|j                  d ||t4        |f«       |j=                  «        |dz  }tA        jB                  d!«       �Œ¶ �Œ tE        d"|› d#|› d$|› d%||z   |z   › �«       y # t        j>                  $ r |dz  }Y ŒSw xY w)&Nr   z--pagesr   )ÚtypeÚdefaultr   )r   zPRAGMA busy_timeout=10000a¬  CREATE TABLE IF NOT EXISTS gov_raw (id INTEGER PRIMARY KEY, site_name TEXT, source_url TEXT, page_url TEXT, title TEXT, publish_date TEXT, date_rank INTEGER DEFAULT 0, summary TEXT, status TEXT, category TEXT DEFAULT '', visits INTEGER DEFAULT 0, content TEXT DEFAULT '', tags TEXT DEFAULT '', industry TEXT DEFAULT 'other', attachments TEXT DEFAULT '', group_name TEXT, has_table INTEGER DEFAULT 0, script_name TEXT DEFAULT '')zgCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(title, site_name, summary, tokenize='trigram')u   --- ç¬¬u   é¡µ ---u   åˆ—è¡¨ä¸ºç©º, å�œæ­¢ç¿»é¡µu   æ‰¾åˆ°u   æ�¡r$   z'SELECT id FROM gov_raw WHERE page_url=?z  [r6   z] r5   é-   rm   r   é
   u       æ­£æ–‡è¿‡çŸ­(u	   ), è·³è¿‡éÈ   z\s+ú z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)g      à?u	   
æ–°å¢ž: u
     é‡�å¤�: u
     è¿‡çŸ­: u
     æ€»è®¡: )#ÚargparseÚArgumentParserÚadd_argumentr9   Ú
parse_argsÚmaxÚminÚpagesÚ	MAX_PAGESÚsqlite3ÚconnectÚDBÚexecuteÚcursorrs   r   r   rN   Úlenrv   ÚfetchonerŒ   r<   rD   rC   r?   ÚSITEÚSCRIPTÚGROUPÚ	lastrowidÚcommitÚIntegrityErrorr"   r#   r   )r”   ÚapÚargsrš   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚseenrF   rI   Úitemr5   r6   rT   ÚsummaryÚ	has_tableÚcurÚrids                       r   Úmainr¶   ¼   s  € ÛØ	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ3Ø�=‰=‹?€DÜ�”3�t—z‘z¤9Ó-Ó.€Eä�?‰?œ2 rÔ*€DØ‡L�LÐ,Ô-Ø�‰‹€AØ‡I�Ið  }ô  ~Ø‡I�IÐwÔxà)*Ð*€IÐ*�	˜JÜ‹5€DÜ�A�u˜q‘yÓ!ó 'ˆÜˆg�b�T˜Ð!Ô"Ü˜2“ˆÙÜÐ,Ô-ÚÜˆf”S˜“Z�L Ð$Ô%Øó  	ˆDØ�E‰{˜dÑ"ØØ�H‰H�T˜%‘[Ô!Ø�I‰IÐ?À$ÀuÁ+ÀÔPØ�z‰zŒ|Ø˜Q‘�	ØÜ�#�d˜6‘l�^ 2 d¨7¡m°C°RÐ&8Ð%9Ð:Ô;Ü#1°$°u±+Ó#>Ñ ˆE�4˜ÙØ˜W™�ÙØ˜F‘|�Ùœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOÜÐ'¹¬¨G¬ÀQÐ'GÀyÐQÔRØ˜a‘�
ØÜ—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGÜŸY™Y y°'Ô:™ÀˆIð
Ø—i‘ið AØ˜G W¨d°5©k¸4À¹;ÈÌdÔTZÔ\aÐclÐnoÐpór�ð —m‘m�Ø—	‘	ÐfØ ¤t¨WÐ5ô7à—‘”Ø˜Q‘�	ô �J‰J�sŽOòA 	ð'ôP 
ˆJ�y�k ¨I¨;°jÀÀÈJÐW`ÐajÑWjÐkuÑWuÐVvÐ
wÕxøô ×)Ñ)ò Ø˜Q‘’	ðús   ÉA*K>Ë>LÌLÚ__main__)Né   )Ú__doc__r   rœ   r<   r   r"   r;   Úbs4r   Úurllib.parser   rž   rB   ÚLIST_DIRr£   r¥   r¤   r›   r7   r8   r:   r   r   r*   rN   rŒ   r¶   Ú__name__ri   r   r   ú<module>r¾      s�   ðñ÷ .× -× -Ý Ý  à€Ø€ØÐ$Ñ$€Ø(€Ø€Ø	€Ø€	Ø€Ø2€	ØÐ<Ñ<€àoØ˜,Ñ&ñ€ò,ó
ò#òL_ òD7yðt ˆzÒÙ…Fð r   