Ë
    V_Šjæ  ã                   ó�   — d Z ddlZddlmZ ddlZddlZddlZdZdZdZ	dZ
dd	d
œZdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uu   
çˆ¬è™«: å¹³é¡¶å±±å°¼é¾™æ–°æ��æ–™å¼€å�‘åŒº - é€šçŸ¥å…¬å‘Š
http://www.zgnlc.gov.cn/channels/11920.html
CMS: è‡ªå®šä¹‰
é    N)ÚBeautifulSoupz/root/search.dbzhttp://www.zgnlc.gov.cnz+http://www.zgnlc.gov.cn/channels/11920.htmlu!   å¹³é¡¶å±±å°¼é¾™æ–°æ��æ–™å¼€å�‘åŒºzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Languagec                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r	   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r   r   r   s           ú /root/gov_crawler/crawl_zgnlc.pyÚhtml_table_to_htmlr      sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                 óH  — g }t        d| dz   «      D �]É  }|dk(  rt        }ndj                  |«      }	 t        j                  |dt
        ¬«      }d|_        |j                  dk7  r6t        dj                  ||j                  «      t        j                  ¬«       ŒŠt        |j                  d	«      }|j                  d
«      }|s-t        dj                  |«      t        j                  ¬«        |S d}|D ]§  }|j                  d«      }	|	sŒ|	j	                  d«      sŒ)|	d   }
|
j                  d«      s	t         |
z   }
|	j	                  dd«      j#                  «       }|j                  d«      }|r|j%                  d¬«      nd}|j'                  |
||f«       |dz  }Œ© t        dj                  ||«      t        j                  ¬«       t)        |«      dk  r |S �ŒÌ |S # t*        $ r7}t        dj                  ||«      t        j                  ¬«       Y d}~ |S d}~ww xY w)z$Get all article URLs from list pagesé   z.http://www.zgnlc.gov.cn/channels/11920_{}.htmlé   ©ÚtimeoutÚheadersúutf-8éÈ   z  Page {}: HTTP {}©Úfiler   zdiv.content-list liz  Page {}: no itemsr   r   r   r	   Útitler   ÚspanT©Ústripz  Page {}: {} itemsé   z  Page {} error: {}N)ÚrangeÚLIST_URLÚformatÚrequestsr   ÚHEADERSÚencodingÚstatus_codeÚprintÚsysÚstderrr   ÚtextÚselectÚfindr   ÚBASE_URLr)   Úget_textÚappendÚlenÚ	Exception)Ú	max_pagesÚurlsÚpageÚurlÚrÚsoupÚitemsÚcountÚlir   r   Ú
full_titleÚ	date_spanÚpub_dateÚes                  r   Úget_list_urlsrJ   '   sï  € à€DÜ�a˜ Q™Ó'ó 'ˆØ�1Š9Ü‰CàB×IÑIÈ$ÓOˆCð!	Ü—‘˜S¨"´gÔ>ˆAØ ˆAŒJØ�}‰} Ò#ÜÐ*×1Ñ1°$¸¿¹ÓFÌSÏZÉZÕXØä  §¡¨Ó7ˆDØ—K‘KÐ 5Ó6ˆEÙÜÐ+×2Ñ2°4Ó8¼s¿z¹zÕJØð0 €Kð- ˆEØò �Ø—G‘G˜C“L�Ú˜Ÿ™˜v�Ø˜V™9�DØŸ?™?¨6Ô2Ü'¨$™˜à!"§¡ w°Ó!3×!9Ñ!9Ó!;�Jà "§¡¨£�IÙAJ˜y×1Ñ1¸Ð1Ô=ÐPR�HØ—K‘K  z°8Ð <Ô=Ø˜Q‘J‘Eðô Ð'×.Ñ.¨t°UÓ;Ä#Ç*Á*ÕMÜ�5‹z˜AŠ~Øð
 €Kñ ðG'ðR €Køô	 ò 	ÜÐ'×.Ñ.¨t°QÓ7¼c¿j¹jÕIÜà€Kûð		ús2   ´A'G!ÂAG!Ã2G!ÄG!ÄB:G!Ç!	H!Ç*+HÈH!c           
      ó†  ‡— 	 t        j                  | dt        ¬«      }d|_        |j                  dk7  ryt        |j                  d«      }d}|j                  d«      }|r|j                  d	¬
«      }d}|j                  d«      }|r7t        j                  d|j                  «       «      }|r|j                  d«      }d}|j                  d«      }	|	r‹g }
|	j                  D ]i  }|j                  dk(  r(|j                  dd	¬«      }|sŒ(|
j                  |«       Œ:|j                  dk(  sŒJt!        || «      }|sŒY|
j                  |«       Œk dj#                  |
«      }g }|j%                  dd	¬«      D ]„  }|d   Š|j                  d	¬
«      }t'        ˆfd„dD «       «      sŒ/‰j)                  d«      st*        dz   ‰j-                  d«      z   Š|j                  |xs ‰j/                  d«      d   ‰dœ«       Œ† t1        |j3                  «       «      dk  rVdj5                  | |«      }|r=dj#                  |D �cg c]  }d j5                  |d!   |d"   «      ‘Œ c}«      }|d#|z   z  }|d$z  }|| ||t6        d|d%œ}|S c c}w # t8        $ r5}t;        d&j5                  | |«      t<        j>                  ¬'«       Y d}~yd}~ww xY w)(zParse a detail pager   r   r"   r#   Nr   r   Úh4Tr(   z	.maintextu(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   z.mainpÚpú )Ú	separatorr)   r   z

r   )r   r   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w)N)Úlower)Ú.0Úxr   s     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>ƒ   s   øè ø€ Òa¨�1˜Ÿ
™
›Ô$Ñaùs   ƒ)z.pdfz.docz.xlsz.zipz.docxz.xlsxr	   ú/éÿÿÿÿ)Únamer@   é   z<p><a href="{}">{}</a></p>ú
z - [{}]({})rW   r@   u   

é™„ä»¶ï¼š
u/   

ï¼ˆPDFæ–‡æ¡£ï¼Œè¯·ç‚¹å‡»åŽŸæ–‡é“¾æŽ¥æŸ¥çœ‹ï¼‰)r&   r@   ÚdateÚcontentÚ	site_nameÚsourceÚattachmentsz  Error parsing {}: {}r$   ) r.   r   r/   r0   r1   r   r5   r7   r9   Ú
select_oneÚreÚsearchÚgroupÚchildrenrW   r:   r   Újoinr   Úanyr   r8   ÚlstripÚsplitr;   r)   r-   Ú	SITE_NAMEr<   r2   r3   r4   )r@   rA   rB   r&   rL   rZ   ÚmaintextÚmr[   ÚmainpÚpartsÚchildÚtxtÚtbl_htmlr^   r   Úattachment_linksÚresultrI   r   s                      @r   Úparse_detailrr   V   s«  ø€ ðGÜ�L‰L˜ b´'Ô:ˆØˆŒ
Ø�=‰=˜CÒØä˜QŸV™V ]Ó3ˆð ˆØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEð ˆØ—?‘? ;Ó/ˆÙÜ—	‘	ÐEÀx×GXÑGXÓGZÓ[ˆAÙØ—w‘w˜q“z�ð ˆØ—‘ Ó)ˆÙØˆEØŸ™ò /�Ø—:‘: Ò$ØŸ.™.°3¸d˜.ÓC�CÚØŸ™ SÕ)Ø—Z‘Z 7Ó*Ü1°%¸Ó=�HÚØŸ™ XÕ.ð/ð —k‘k %Ó(ˆGð ˆØ—‘˜s¨�Ó.ò 		ˆAØ�V‘9ˆDØ—*‘* 4�*Ó(ˆCÜÓaÐ.`ÔaÕaØ—‘ vÔ.Ü# c™>¨D¯K©K¸Ó,<Ñ<�DØ×"Ñ"ØÒ6 4§:¡:¨c£?°2Ñ#6Øñ$õ ð		ô ˆw�}‰}‹Ó "Ò$Ø2×9Ñ9¸#¸uÓEˆGÙØ#'§9¡9ÐalÖ-mÐ\]¨m×.BÑ.BÀ1ÀVÁ9ÈaÐPUÉhÕ.WÒ-mÓ#nÐ ØÐ,Ð/?Ñ?Ñ?�ØÐJÑJˆGð ØØØÜ"ØØ&ñ
ˆð ˆùò .nøô ò ÜÐ&×-Ñ-¨c°1Ó5¼C¿J¹JÕGÜûðúsI   ƒ2J ¶CJ Ä
!J Ä,J Ä;A'J Æ#BJ È:I=É#J É=J Ê	K Ê+J;Ê;K c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)r   )r   ÚargsÚkwargss      r   Útable_to_markdownrv   ¢   s   € äˆu‹:Ðr   c                 óÒ  — t        j                  t        «      }|j                  «       }d}| D ]–  }|r|d   sŒ|j	                  d|d   t
        f«       |j                  «       rŒ7|d   rt        |d   «      nd}|j	                  d|d   |d   |d   |d   r|d   d	d
 nd|d   |d   |j                  dd«      |f«       |dz  }Œ˜ |j                  «        |j                  «        |S )zSave articles to search.dbr   r&   z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r@   r^   r   z²INSERT OR REPLACE INTO gov_raw
               (page_url, title, content, summary, site_name, publish_date, source_url, attachments)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?)r[   Nr#   r\   rZ   r]   r   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuterh   Úfetchoner   r   ÚcommitÚclose)ÚarticlesÚconnÚcÚinsertedÚartÚattachments_jsons         r   Ú
save_to_dbr†   ¦   s  € ä�?‰?œ7Ó#€DØ�‰‹€AØ€HØò ˆÙ˜#˜gš,ØØ	�	‰	ØDØ�‰ZœÐ#ô	
ð �:‰:Œ<ØØ69¸-Ò6Hœ3˜s =Ñ1Ô2ÈbÐØ	�	‰	ð2ð �E‘
Ø�G‘Ø�I‘Ø(+¨Iª��I‘˜t Ñ$¸BØ�KÑ Ø�F‘Ø—‘˜ "Ó%Ø ð	ô		
ð 	�A‰‰ð3ð4 	‡K�K„MØ‡J�J„LØ€Or   c            	      óZ  — d} t        t        j                  «      dkD  r	 t        t        j                  d   «      } t        dj                  t        t        | «      t        j                  ¬«       t        dt        j                  ¬«       t        | «      }t        dj                  t        |«      «      t        j                  ¬«       t        dt        j                  ¬«       g }t        |«      D ]x  \  }\  }}}t        dj                  |dz   t        |«      |«      t        j                  ¬«       t        |«      }|sŒP|d	   s|r||d	<   |d
   s|r||d
<   |j                  |«       Œz t        dj                  t        |«      t        |«      «      t        j                  ¬«       t        |«      }t        dj                  |«      t        j                  ¬«       t        dt        j                  ¬«       t        dj                  t        |«      «      «       y # t        $ r Y �Œíw xY w)Nr*   r   z"Starting crawl: {} - {} ({} pages)r$   zFetching list pages...zTotal URLs: {}zFetching detail pages...z  [{}/{}] {}r&   rZ   zParsed: {}/{} articleszInserted: {} new articleszDone.z
Article count for config: {})r;   r3   ÚargvÚintÚ
ValueErrorr2   r-   rh   r,   r4   rJ   Ú	enumeraterr   r:   r†   )	r=   Úurl_datar€   Úir@   Ú
list_titleÚ	list_dater„   rƒ   s	            r   Úmainr�   Ê   s¨  € Ø€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
Ð
.×
5Ñ
5´iÄÈ9Ó
UÔ\_×\fÑ\fÕgô 
Ð
"¬¯©Õ4Ü˜YÓ'€HÜ	Ð
×
!Ñ
!¤# h£-Ó
0´s·z±zÕBô 
Ð
$¬3¯:©:Õ6Ø€HÜ+4°XÓ+>ò 	!Ñ'ˆÑ'ˆC�˜YÜˆn×#Ñ# A¨¡E¬3¨x«=¸#Ó>ÄSÇZÁZÕPÜ˜3ÓˆÚà�w’<¡JØ)��G‘Ø�v’;¡9Ø'��F‘Ø�O‰O˜CÕ ð	!ô 
Ð
"×
)Ñ
)¬#¨h«-¼¸X»Ó
GÌcÏjÉjÕYô ˜(Ó#€HÜ	Ð
%×
,Ñ
,¨XÓ
6¼S¿Z¹ZÕHÜ	ˆ'œŸ
™
Õ#ä	Ð
*×
1Ñ
1´#°h³-Ó
@ÕAøô? ò 	Úð	ús    H È	H*È)H*Ú__main__)r   )r*   )Ú__doc__r.   Úbs4r   rx   r`   r3   rz   r8   r,   rh   r/   r   rJ   rr   rv   r†   r�   Ú__name__© r   r   ú<module>r–      sw   ðñó Ý Û Û 	Û 
à
€Ø$€Ø8€Ø/€	ð DØ'ñ€óó,ò^IòXò!òH$BðN ˆzÒÙ…Fð r   