Ë
    Í«£jm  ã                   óà   — 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edz   ZdZdZd	xZZd
dddœZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r ej6                   e«       «       yy)uñ   
å�¤è”ºåŽ¿äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤ (hjbh2) çˆ¬è™«
CMS: è‡ªå®šä¹‰PHPæ”¿åºœä¿¡æ�¯å…¬å¼€å¹³å�°
åˆ—è¡¨: /zwgk/fdzdgknr/zdmsxx/hjbh2 (ç¬¬1é¡µ), /.../hjbh2_N (ç¬¬Né¡µ, N=2~37)
åˆ†é¡µ: 10æ�¡/é¡µ, å…±365æ�¡/37é¡µ
è¯¦æƒ…: /.../hjbh2/content_XXXXX
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.gulin.gov.cnz/zwgk/fdzdgknr/zdmsxx/hjbh2z/root/search.dbu   å�¤è”ºåŽ¿-çŽ¯å¢ƒä¿�æŠ¤u   çŽ¯è¯„zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageé   é   c                  óZ   — t        j                  t        «      } | j                  d«       | S )NzPRAGMA journal_mode=WAL)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    úcrawl_gulin_hjbh.pyÚinit_dbr      s"   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø€Kó    c           
      óH  — t        d«      D ]7  }	 t        j                  | t        t        ¬«      }d|_        |j                  c S  y # t        $ rQ}|dk(  r-t        d|dz   › d| › d|› �t        j                  ¬	«       Y d }~ y
t        j                  d«       Y d }~Œ�d }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8é   u     [WARN] èŽ·å�–å¤±è´¥ (é   z/3): ú - ©ÚfileÚ )ÚrangeÚrequestsÚgetÚHEADERSÚTIMEOUTÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚattemptÚrÚes       r   Úfetchr,   $   sŽ   € Ü˜“8ò 	ˆð	Ü—‘˜S¬'¼7ÔCˆAØ ˆAŒJØ—6‘6ŠMñ		øô
 ò 	Ø˜!Š|ÜÐ/°¸±	¨{¸%À¸uÀCÈÀsÐKÔRU×R\ÑR\Õ]ÝÜ�J‰J�q�M‰Mûð		ús   �2AÁ	B!Á,BÂBÂB!c                 óh  — g }t        | d«      }|j                  d«      D ]�  }|j                  dd«      }d|vrŒ|j                  d¬«      }|sŒ/|j	                  d«      }d}|r(|j                  d	«      }|r|d
   j                  d¬«      }t        t        |«      }	|j                  |	||f«       Œ‘ |S )Núhtml.parserzul li aÚhrefr   Úcontent_T©ÚstripÚliÚspanéÿÿÿÿ)	r   Úselectr   Úget_textÚfind_parentÚfind_allr   ÚBASE_URLÚappend)
ÚhtmlÚitemsÚsoupÚar/   Útitler3   ÚdateÚspansÚfull_urls
             r   Úextract_list_itemsrD   1   sÀ   € Ø€EÜ˜˜}Ó-€DØ�[‰[˜Ó#ò .ˆØ�u‰u�V˜RÓ ˆØ˜TÑ!ØØ—
‘
 �
Ó&ˆÙØØ�]‰]˜4Ó ˆØˆÙØ—K‘K Ó'ˆEÙØ˜R‘y×)Ñ)°Ð)Ó5�Üœ8 TÓ*ˆØ�‰�h  tÐ,Õ-ð.ð €Lr   c                 óÒ  — t        | d«      }|j                  d«      }d}|r8|j                  d¬«      }|j                  d«      }|r|d   j	                  «       }|s8|j                  d«      }|r%|j                  d	«      }|r|j                  d¬«      }d}t        j                  d
| «      }	|	r|	j                  d«      }d}
g }|j                  d«      }|�rg }|j                  d«      D ]å  }|j                  d¬«      }|r|dv rŒ|j                  d«      D ]r  }|j                  dd«      }|j                  d«      sŒ'|j                  d¬«      xs |j                  d«      d   }t        t        |«      }|j                  ||dœ«       Œt |sŒ¥t        |«      dk  r"t        d„ |j                  d«      D «       «      rŒÕ|j                  |«       Œç dj!                  |«      }
|||
|fS )Nr.   r@   r   Tr1   Ú_r   ÚarticleÚh2u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   Úp)u   ã€�å­—ä½“ï¼šu   å°�u   å¤§u   ã€‘r?   r/   ú.pdfú/r5   )Únamer(   r   c              3   ó^   K  — | ]%  }|j                  d d«      j                  d«      –— Œ' y­w)r/   r   rJ   N)r   Úendswith)Ú.0Úa_tags     r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>l   s(   è ø€ Ò2wÐ^c°5·9±9¸VÀRÓ3H×3QÑ3QÐRX×3YÑ2wùs   ‚+-z

)r   Úfindr7   Úsplitr2   ÚreÚsearchÚgroupr9   r   rN   r   r:   r;   ÚlenÚanyÚjoin)r<   r>   Ú	title_tagr@   ÚrawÚpartsrG   rH   rA   Ú
date_matchÚcontentÚattachmentsrI   r!   rP   r/   ÚfnamerC   s                     r   Úextract_detailra   F   s×  € Ü˜˜}Ó-€Dà—	‘	˜'Ó"€IØ€EÙØ× Ñ  tÐ Ó,ˆØ—	‘	˜#“ˆÙØ˜!‘H—N‘NÓ$ˆEáØ—)‘)˜IÓ&ˆÙØ—‘˜dÓ#ˆBÙØŸ™¨$˜Ó/�à€DÜ—‘ÐFÈÓM€JÙØ×Ñ Ó"ˆà€GØ€KØ�i‰i˜	Ó"€GÚØˆØ×!Ñ! #Ó&ò 	#ˆAØ—:‘: D�:Ó)ˆDÙ˜4Ð#HÑHØØŸ™ C›ò I�Ø—y‘y ¨Ó,�Ø—=‘= Õ(Ø!ŸN™N°˜NÓ6ÒM¸$¿*¹*ÀS»/È"Ñ:M�EÜ&¤x°Ó6�HØ×&Ñ&°¸hÑ'GÕHðIò œS ›Y¨š]¬sÑ2wÐgh×gqÑgqÐruÓgvÔ2wÕ/wØ—‘˜TÕ"ð	#ð —+‘+˜eÓ$ˆà�$˜ Ð,Ð,r   c                 ó°  — d}d}|D ]Ž  \  }}}}}|rt        j                  |d¬«      nd}	|r|d d j                  dd«      n|}
|s|rdj                  d„ |D «       «      }	 | j	                  d	||t
        ||||
|	f«       | j                  r|d
z  }n|d
z  }Œ� ||fS # t        $ r0}t        d|› d|› �t        j                  ¬«       |d
z  }Y d }~ŒÉd }~ww xY w)Nr   F)Úensure_asciir   éÈ   ú
ú c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)ú[rL   z](r(   ú)N© )rO   r?   s     r   rQ   zpush_to_db.<locals>.<genexpr>{   s'   è ø€ ÒRÀ ! A f¡I ;¨b°°5±°
¸!Ô <ÑRùs   ‚z¸INSERT OR IGNORE INTO gov_raw
                   (page_url, title, site_name, publish_date, content, date_rank, summary, attachments)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?)r   u     [ERR] DBå†™å…¥å¤±è´¥: r   r   )ÚjsonÚdumpsÚreplacerY   r   Ú	SITE_NAMEÚtotal_changesr"   r#   r$   r%   )r   r=   ÚsavedÚskippedr(   r@   rA   r^   r_   Úattachments_jsonÚsummaryr+   s               r   Ú
push_to_dbrt   s   sÿ   € Ø€EØ€GØ27ò Ñ.ˆˆU�D˜' ;ÙJUœ4Ÿ:™: kÀÕFÐ[]ÐÙ6=�'˜$˜3�-×'Ñ'¨¨cÔ2À5ˆá™;Ø—i‘iÑRÀkÔRÓRˆGð	Ø�L‰Lð6ð �eœY¨¨g°t¸WÐFVÐWô	ð ×!Ò!Ø˜‘
‘à˜1‘�øð#ð* �'ˆ>Ðøô ò 	ÜÐ,¨S¨E°°Q°CÐ8¼s¿z¹zÕJØ�q‰L�Gûð	ús   Á!5BÂ	CÂ%&CÃCc            
      óB  — t         } t        t        j                  «      D ]K  \  }}|dk(  sŒ|dz   t	        t        j                  «      k  sŒ,t        t        j                  |dz      «      }  n t        «       }g }t        g}|j                  d„ t        d| dz   «      D «       «       t        d| › d�«       t        |d«      D �]  \  }}t        d|› d| › d	|› �«       t        |«      }|sŒ)t        |«      }	|	st        d
«        nÎt        dt	        |	«      › d�«       |	D ]®  \  }
}}t        j                  d«       t        dt	        |«      dz   › d	|d d › d�dd¬«       t        |
«      }|st        d«       ŒYt        |«      \  }}}}|s|}|s|}d|v sd|v rdnd}|j!                  |
||||f«       t        |rdt	        |«      › d�nd«       Œ° �Œ |r<t#        ||«      \  }}|j%                  «        t        d|› d|› dt	        |«      › �«       |j'                  «        y)Nz--pagesr   c              3   ó2   K  — | ]  }t         › d |› �–— Œ y­w)rF   N)Ú
LIST_FIRST)rO   Úns     r   rQ   zmain.<locals>.<genexpr>˜   s   è ø€ ÒF¨Qœ
�| 1 Q CÔ(ÑFùs   ‚r   u   å�¤è”ºåŽ¿-çŽ¯å¢ƒä¿�æŠ¤: çˆ¬å�– u    é¡µu     [åˆ—è¡¨é¡µ rK   z] u       â†’ æ— æ•°æ�®ï¼Œå�œæ­¢u       â†’ æ‰¾åˆ° u    æ�¡g      à?z    [é(   z...rf   T)ÚendÚflushu   âš  èŽ·å�–å¤±è´¥u   è¡¨æ ¼z<tabler   u   âœ… (u   å­—)u   âš  ç©ºæ­£æ–‡u   
å®Œæˆ�! æ–°å¢ž: u
   , è·³è¿‡: u
   , æ€»å…±: )Ú	MAX_PAGESÚ	enumerater$   ÚargvrW   Úintr   rw   Úextendr   r#   r,   rD   r&   r'   ra   r;   rt   ÚcommitÚclose)ÚpagesÚir?   r   Ú	all_itemsÚ	list_urlsÚidxÚlist_urlr<   r=   Úitem_urlÚ
item_titleÚ	item_dateÚdetail_htmlr@   rA   r^   r_   Ú	has_tablerp   rq   s                        r   ÚmainrŽ   Ž   s/  € Ü€EÜœ#Ÿ(™(Ó#ò ‰ˆˆ1Ø�	‹>˜a !™e¤c¬#¯(©(£mÓ3ÜœŸ™  Q¡™Ó(ˆEÙðô
 ‹9€DØ€IÜ�€IØ×ÑÑF´%¸¸5À1¹9Ó2EÔFÔFä	Ð+¨E¨7°$Ð
7Ô8ä" 9¨aÓ0ó N‰ˆˆXÜ�˜c˜U ! E 7¨"¨X¨JÐ7Ô8Ü�X‹ˆÙØä" 4Ó(ˆÙÜÐ.Ô/Ùä�¤ E£
˜|¨4Ð0Ô1à/4ò 	NÑ+ˆH�j )Ü�J‰J�sŒOÜ�Eœ#˜i›.¨Ñ*Ð+¨2¨j¸¸"¨oÐ->¸cÐBÈÐSWÕXÜ ›/ˆKÙÜÐ(Ô)Øä0>¸{Ó0KÑ-ˆE�4˜ +ÙØ"�ÙØ �à%¨Ñ0°HÀÑ4K™ÐQRˆIà×Ñ˜h¨¨t°W¸kÐJÔKÜ±�Eœ#˜g›,˜ tÑ,¸_ÕMò#	NðNñ@ Ü# D¨)Ó4‰ˆˆwØ�‰ŒÜÐ" 5 '¨°G°9¸JÄsÈ9Ã~ÐFVÐWÔXà‡J�J„LØr   Ú__main__)Ú__doc__rT   r$   rk   r&   r   r	   Úbs4r   Úurllib.parser   r:   rw   r   rn   ÚCATEGORYÚGROUPr   r|   r   r   r,   rD   ra   rt   rŽ   Ú__name__Úexitrj   r   r   ú<module>r—      s�   ðñ÷ .× -× -Ý Ý  à%€ØÐ5Ñ5€
Ø
€Ø$€	ØÐ €ˆ5ð DØZØ0ñ€ð
 €	Ø
€òò
òò**-òZò64ðn ˆzÒØ€C‡H�H‰T‹VÕð r   