Ë
    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dlZddlmZ dZ	dZ
dZdZd	d
dœZdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u�   
çˆ¬è™«: æ·®å®‰åŒºäººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š
http://www.zghaq.gov.cn/col/829_518352/index.html
CMS: æ·®å®‰åŒºæ”¿åºœç½‘ç«™ç³»ç»Ÿ
é    N)ÚBeautifulSoup)Údatetimez/root/search.dbzhttp://www.zghaq.gov.cnz1http://www.zghaq.gov.cn/col/829_518352/index.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_zghaq.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                  óš   — t        j                  «       } | j                  j                  t        «       | j                  t        d¬«       | S )z(Get a session with cookies to bypass WAFé   ©Útimeout)ÚrequestsÚSessionÚheadersÚupdateÚHEADERSr   ÚLIST_URL)Úss    r   Úget_sessionr(   )   s7   € ä×ÑÓ€AØ‡I�I×Ñ”WÔà‡E�EŒ(˜B€EÔØ€Hr   c                 óÜ  — g }t        d|dz   «      D �]“  }|dk(  rt        }ndj                  |«      }	 | j                  |d¬«      }d|_        |j
                  dk7  r6t        dj                  ||j
                  «      t        j                  ¬«       Œ�t        |j                  d	«      }|j                  d
«      }|s-t        dj                  |«      t        j                  ¬«        |S d}|D ]z  }	|	j                  d«      }
|
sŒ|
j                  d«      sŒ)|
d   }|j                  d«      s&|j                  d«      r	t        |z   nt        dz   |z   }|j                  |«       |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é   z4http://www.zghaq.gov.cn/col/829_518352/index_{}.htmlr   r   úutf-8éÈ   z  Page {}: HTTP {}©Úfiler   zdiv.list-lb ul liz  Page {}: no itemsr   r   r   r
   ú/z  Page {}: {} itemsé   z  Page {} error: {}N)Úranger&   Úformatr   ÚencodingÚstatus_codeÚprintÚsysÚstderrr   ÚtextÚselectÚfindr   ÚBASE_URLÚappendÚlenÚ	Exception)ÚsessionÚ	max_pagesÚurlsÚpageÚurlÚrÚsoupÚitemsÚcountÚlir   r   Úes                r   Úget_list_urlsrJ   2   sÂ  € à€DÜ�a˜ Q™Ó'ó  ˆØ�1Š9Ü‰CàH×OÑOÐPTÓUˆCð	Ø—‘˜C¨�Ó,ˆAØ ˆAŒJØ�}‰} Ò#ÜÐ*×1Ñ1°$¸¿¹ÓFÌSÏZÉZÕXØÜ  §¡¨Ó7ˆDØ—K‘KÐ 3Ó4ˆEÙÜÐ+×2Ñ2°4Ó8¼s¿z¹zÕJØð" €Kð! ˆEØò �Ø—G‘G˜C“L�Ú˜Ÿ™˜v�Ø˜V™9�DØŸ?™?¨6Ô2Ø26·/±/À#Ô2Fœx¨$šÌHÐWZÉNÐ]aÑLa˜Ø—K‘K Ô%Ø˜Q‘J‘Eðô Ð'×.Ñ.¨t°UÓ;Ä#Ç*Á*ÕMä�5‹z˜AŠ~Øð €Kñ ð9 ðB €Køô ò 	ÜÐ'×.Ñ.¨t°QÓ7¼c¿j¹jÕIÜØ€Kûð	ús2   ´AF+ÂAF+Ã)F+ÄF+ÄBF+Æ+	G+Æ4+G&Ç&G+c           
      ó  ‡— 	 | j                  |d¬«      }d|_        |j                  dk7  ryt        |j                  d«      }d|j                  v s"d|j                  v s|j                  d	d
di«      €Wt        «       }|j                  |d¬«      }d|_        t        |j                  d«      }d|j                  v sd|j                  v ryd}|j                  d«      }|r|j                  d¬«      }|s(|j                  d	d
di«      }|r|j                  dd«      }d}|j                  d«      }	|	r;|	j                  d¬«      }
t        j                  d|
«      }|r|j                  d«      }|sQ|j                  d	d
di«      }|r;|j                  dd«      }t        j                  d|«      }|r|j                  d«      }d}|j                  d«      }|rÁg }|j                  D ]Ÿ  }|j                  dk(  r(|j                  dd¬«      }
|
sŒ(|j                  |
«       Œ:|j                  dk(  r!t        ||«      }|sŒX|j                  |«       Œj|j                  dv sŒy|j                  dd¬«      }
|
sŒ�|j                  |
«       Œ¡ dj!                  |«      }g }|j#                  d«      D ]‘  }|j                  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#œ«       Œ“ t/        |j1                  «       «      d$k  rVd%j3                  ||«      }|r=d&j!                  |D �cg c]  }d'j3                  |d
   |d(   «      ‘Œ c}«      }|d)|z   z  }|d*z  }||||t4        d|d+œ}|S c c}w # t6        $ r5}t9        d,j3                  ||«      t:        j<                  ¬-«       Y d}~yd}~ww xY w).zParse a detail pager   r   r+   r,   Nr   u   çŸ¥é�“åˆ›å®‡u   æ‹¦æˆªÚmetaÚnameÚArticleTitler	   z.nr-btT)ÚstripÚcontentz.nr-timez(\d{4}-\d{2}-\d{2})r*   ÚPubDatez.nr-zwÚpú )Ú	separatorrO   r   )ÚdivÚspanz

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
   r/   éÿÿÿÿ)rM   rC   é   z<p><a href="{}">{}</a></p>ú
z - [{}]({})rC   u   

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

ï¼ˆPDFæ–‡æ¡£ï¼Œè¯·ç‚¹å‡»åŽŸæ–‡é“¾æŽ¥æŸ¥çœ‹ï¼‰)ÚtitlerC   ÚdaterP   Ú	site_nameÚsourceÚattachmentsz  Error parsing {}: {}r-   )r   r3   r4   r   r8   r:   r(   Ú
select_oneÚget_textÚreÚsearchÚgroupÚchildrenrM   r<   r   Újoinr   Úanyr   r;   ÚlstripÚsplitr=   rO   r2   Ú	SITE_NAMEr>   r5   r6   r7   )r?   rC   rD   rE   Ús2r_   Únr_btrL   r`   Únr_timeÚtxtÚmrP   Únr_zwÚpartsÚchildÚtbl_htmlrc   r   Úattachment_linksÚresultrI   r   s                         @r   Úparse_detailrz   Y   s×  ø€ ð`Ø�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�=‰=˜CÒØÜ˜QŸV™V ]Ó3ˆð ˜QŸV™VÑ# x°1·6±6Ñ'9¸T¿Y¹YÀvÐPVÐXfÐOgÓ=hÐ=pä“ˆBØ—‘�s B�Ó'ˆAØ ˆAŒJÜ  §¡¨Ó7ˆDØ §¡Ñ'¨8°q·v±vÑ+=Øð ˆØ—‘ Ó)ˆÙØ—N‘N¨�NÓ.ˆEÙØ—9‘9˜V f¨nÐ%=Ó>ˆDÙØŸ™ ¨BÓ/�ð ˆØ—/‘/ *Ó-ˆÙØ×"Ñ"¨Ð"Ó.ˆCÜ—	‘	Ð0°#Ó6ˆAÙØ—w‘w˜q“z�ÙØ—9‘9˜V f¨iÐ%8Ó9ˆDÙØŸ(™( 9¨bÓ1�Ü—I‘IÐ4°gÓ>�ÙØŸ7™7 1›:�Dð ˆØ—‘ Ó)ˆÙØˆEØŸ™ò *�Ø—:‘: Ò$ØŸ.™.°3¸d˜.ÓC�CÚØŸ™ SÕ)Ø—Z‘Z 7Ò*Ü1°%¸Ó=�HÚØŸ™ XÕ.Ø—Z‘Z ?Ò2ØŸ.™.°3¸d˜.ÓC�CÚØŸ™ SÕ)ð*ð —k‘k %Ó(ˆGð ˆØ—‘˜sÓ#ò 		ˆAØ—5‘5˜ Ó$ˆ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ÜûðúsV   ƒ)O ­BO Ã
D>O È	/O È9 O ÉO É0A2O Ë#BO Í:N=Î#O Î=O Ï	P Ï+O;Ï;P c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)r   )r   ÚargsÚkwargss      r   Útable_to_markdownr~   ¾   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=?rC   rc   r	   z²INSERT OR REPLACE INTO gov_raw
               (page_url, title, content, summary, site_name, publish_date, source_url, attachments)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?)rP   Nr,   ra   r`   rb   r*   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecutern   Ú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‰‰ð5ð6 	‡K�K„MØ‡J�J„LØ€Or   c            	      ó:  — d} t        t        j                  «      dkD  r	 t        t        j                  d   «      } t        dj                  t        t        | «      t        j                  ¬«       t        «       }t        dt        j                  ¬«       t        || «      }t        dj                  t        |«      «      t        j                  ¬«       t        dt        j                  ¬«       g }t        |«      D ]]  \  }}t        dj                  |dz   t        |«      |«      t        j                  ¬«       t        ||«      }|sŒM|j                  |«       Œ_ 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)Né   r*   z"Starting crawl: {} - {} ({} pages)r-   zFetching list pages...zTotal URLs: {}zFetching detail pages...z  [{}/{}] {}zParsed: {}/{} articleszInserted: {} new articleszDone.z
Article count for config: {})r=   r6   ÚargvÚintÚ
ValueErrorr5   r2   rn   r&   r7   r(   rJ   Ú	enumeraterz   r<   rŽ   )r@   r?   rA   rˆ   ÚirC   rŒ   r‹   s           r   Úmainr–   ç   sˆ  € Ø€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
Ð
.×
5Ñ
5´iÄÈ9Ó
UÔ\_×\fÑ\fÕgä‹m€Gô 
Ð
"¬¯©Õ4Ü˜ )Ó,€DÜ	Ð
×
!Ñ
!¤# d£)Ó
,´3·:±:Õ>ô 
Ð
$¬3¯:©:Õ6Ø€HÜ˜D“/ò !‰ˆˆ3Üˆn×#Ñ# A¨¡E¬3¨t«9°cÓ:ÄÇÁÕLÜ˜7 CÓ(ˆÚØ�O‰O˜CÕ ð	!ô 
Ð
"×
)Ñ
)¬#¨h«-¼¸T»Ó
CÌ#Ï*É*ÕUô ˜(Ó#€HÜ	Ð
%×
,Ñ
,¨XÓ
6¼S¿Z¹ZÕHÜ	ˆ'œŸ
™
Õ#ô 
Ð
*×
1Ñ
1´#°d³)Ó
<Õ=øô; ò 	Úð	ús    H È	HÈHÚ__main__)r	   )r�   )Ú__doc__r!   Úbs4r   r€   rf   r6   Úosr   r‚   r;   r&   rn   r%   r   r(   rJ   rz   r~   rŽ   r–   Ú__name__© r   r   ú<module>r�      s�   ðñó Ý Û Û 	Û 
Û 	Ý à
€Ø$€Ø>€Ø#€	ð DØ'ñ€óòó$òNbòJò"òJ">ðJ ˆzÒÙ…Fð r   