Ë
    ¸¬uj  ã                   ó   — 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Zddl	Zddl
ZddlmZmZ ej                  j!                  dd«      ZdZdZdZe› d	�Zd
diZdZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)uH  
åŒ—äº¬å¸‚å¯†äº‘åŒºäººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
CMS: TRS WCM
åˆ—è¡¨: é�™æ€�åˆ†é¡µ index_N.html (<ul class="lm_lbsa">)
è¯¦æƒ…: requests + <div class="trs_editor_view TRS_UEDITOR">
WAF: jiasule (ä½†æœªæ‹¦æˆªæ ‡å‡†UA)

è¿�è¡Œ: python3 crawl_bjmy.py [--full]
  --full: å…¨é‡� (æ‰€æœ‰49é¡µ)
  ä¸�åŠ : ä»…ç¬¬1é¡µ (æ—¥è·‘å¢žé‡�)
é    N)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu+   åŒ—äº¬å¸‚å¯†äº‘åŒºäººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šu   åŒ—äº¬å¸‚å¯†äº‘åŒºäººæ°‘æ”¿åºœzhttps://www.bjmy.gov.cnz/zwgk/gsgg/z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36é1   é   )g333333Ó?g      à?c                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú/root/gov_crawler/crawl_bjmy.pyÚlogr   !   s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 óJ  — | dk(  rt         }nt         › d| › d�}t        j                  j                  |t        ¬«      }	 t        j                  j                  |d¬«      }|j                  «       j                  «       S # t        $ r}t        d| › d|› �«       Y d }~y d }~ww xY w)	Né   Úindex_z.html©Úheadersé   ©Útimeoutu
   åˆ—è¡¨é¡µ u    è¯·æ±‚å¤±è´¥: )
ÚLIST_URLÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	Exceptionr   )Úpage_noÚurlÚreqÚrespÚes        r   Ú
fetch_listr'   %   s”   € Ø�!‚|Ü‰ä�
˜&  	¨Ð/ˆÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ!Ó#Ð#øÜò Üˆj˜˜	 °°Ð4Ô5Üûðús   ¿>A> Á>	B"ÂBÂB"c                 ó  — g }t        j                  dt         j                  «      }|j                  | «      D ]Ð  }t        j                  d|«      }|sŒ|j                  d«      }t        j                  |j                  d«      j                  «       «      }t        j                  d|«      }|sŒx|j                  d«      }|j                  d«      r|dd  }|j                  d«      r|n
t        › d|› �}	|j                  |	||f«       ŒÒ |S )	Nz<li>(.*?)</li>z)<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"r   é   z <span>(\d{4}-\d{2}-\d{2})</span>z./Úhttpz
/zwgk/gsgg)ÚreÚcompileÚDOTALLÚfindallÚsearchÚgroupÚhtmlmodÚunescapeÚstripÚ
startswithÚBASE_URLÚappend)
Ú	html_textÚitemsÚpatternÚliÚa_mÚurl_pathÚtitleÚdate_mÚdateÚfull_urls
             r   Ú
parse_listrA   3   só   € Ø€EÜ�j‰jÐ*¬B¯I©IÓ6€GØ�o‰o˜iÓ(ò .ˆÜ�i‰iÐDÀbÓIˆÙØØ—9‘9˜Q“<ˆÜ× Ñ  §¡¨1£×!3Ñ!3Ó!5Ó6ˆä—‘Ð>ÀÓCˆÙØØ�|‰|˜A‹ˆð ×Ñ˜tÔ$Ø  �|ˆHØ'×2Ñ2°6Ô:‘8Ä8À*ÈJÐW_ÐV`Ð@aˆØ�‰�h  tÐ,Õ-ð!.ð" €Lr   c                 ó–  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |d¬«      }|j                  «       j                  «       }d }t        j                  d|t        j                  «      }|r |j                  d«      j                  «       }nSdD ]N  }	t        j                  d|	› d�|t        j                  «      }|sŒ/|j                  d«      j                  «       } n |r%t        j                  d	d
|«      j                  «       }| |||fS # t        $ r}| ||d fcY d }~S d }~ww xY w)Nr   r   r   zK<div class="trs_editor_view[^"]*TRS_UEDITOR[^"]*"[^>]*>(.*?)</div>\s*</div>r   )Ú
TRS_EditorÚneirongzarticle-contentz<div[^>]*class="[^"]*z[^"]*"[^>]*>(.*?)</div>z\s+ú )r   r   r   r   r   r   r    r!   r+   r/   r-   r0   r3   Úsub)
r#   r=   r?   r$   r%   Úhtmlr&   ÚcontentÚmÚclss
             r   Úfetch_detailrK   J   s+  € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€Cð(Ü�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ!Ó#ˆð
 €GÜ
�	‰	Ð`ÐbfÔhj×hqÑhqÓr€AÙØ—'‘'˜!“*×"Ñ"Ó$‰ð @ò 	ˆCÜ—	‘	Ð2°3°%Ð7NÐOÐQUÔWY×W`ÑW`ÓaˆAÚØŸ'™' !›*×*Ñ*Ó,�Ùð		ñ Ü—&‘&˜  gÓ.×4Ñ4Ó6ˆà�˜˜gÐ&Ð&øô' ò (Ø�U˜D $Ð'Õ'ûð(ús   §?D/ Ä/	EÄ8EÄ=EÅEc                 óŽ  — t        j                  t        «      }|j                  «       }d}d}| D ]F  \  }}}}	 |j	                  dt
        |||t        |xs df«       |j                  dkD  r|dz  }n|dz  }ŒH |j                  «        |j                  «        ||fS # t        $ r}	t        d|d d › d|	› �«       Y d }	~	Œ�d }	~	ww xY w)Nr   z�INSERT OR IGNORE INTO gov_raw
                   (site_name, title, page_url, publish_date, source_url, content)
                   VALUES (?, ?, ?, ?, ?, ?)Ú r   u   å…¥åº“å¤±è´¥: é2   z... )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuter   ÚSOURCEÚrowcountr!   r   ÚcommitÚclose)
ÚarticlesÚconnrR   ÚinsertedÚskippedr#   r=   r?   rH   r&   s
             r   Ú
save_to_dbr\   e   sÙ   € Ü�?‰?œ7Ó#€DØ�[‰[‹]€FØ€HØ€Gà%-ò 4Ñ!ˆˆU�D˜'ð	4Ø�N‰Nð0ô ˜E 3¨¬f°g²mÀÐDô	ð �‰ Ò"Ø˜A‘‘à˜1‘�øð4ð 	‡K�K„MØ‡J�J„LØ�WÐÐøô ò 	4Ü�.  S b  
¨$¨q¨cÐ2×3Ñ3ûð	4ús   ¹>BÂ	CÂ&B?Â?Cc                  ó^  — dt         j                  v } t        d| rdnd› d�«       g }| rt        dt        dz   «      ndg}|D ]’  }t        j                  t        j                  t        Ž «       t        |«      }|€t        d|› d�«       ŒIt        |«      }|st        d|› d	�«        n.t        d|› d
t        |«      › d�«       |j                  |«       Œ” t        dt        |«      › d�«       |st        d«       y t        dt        › d�«       g }t        t        ¬«      5 }t!        |«      D ��	�
�ci c]"  \  }\  }	}
}|j#                  t$        |	|
|«      |“Œ$ }}
}	}}d}t        |«      }t'        |«      D ]F  }|dz  }	 |j)                  |j+                  «       «       |dz  dk(  s||k(  sŒ6t        d|› d|› �«       ŒH 	 d d d «       t/        |«      \  }}t        d|› d|› �«       y c c}}
}	}w # t,        $ r& ||   }||   \  }	}
}|j)                  |	|
|d f«       Y Œ€w xY w# 1 sw Y   ŒcxY w)Nz--fullu   å¼€å§‹u   å…¨é‡�u   å¢žé‡�u	   çˆ¬å�–...r   u   ç¬¬ u
    é¡µè·³è¿‡u    é¡µä¸ºç©ºï¼Œç»“æ�Ÿu    é¡µ: u    æ�¡u
   å…±èŽ·å�– u    æ�¡åˆ—è¡¨æ•°æ�®u   æ²¡æœ‰æ•°æ�®ï¼Œé€€å‡ºu   å¼€å§‹å¤šçº¿ç¨‹çˆ¬å�–è¯¦æƒ… (u
   çº¿ç¨‹)...)Úmax_workersr   rN   u   è¯¦æƒ…è¿›åº¦: ú/u   å…¥åº“å®Œæˆ�: æ–°å¢ž u	   , è·³è¿‡ )ÚsysÚargvr   ÚrangeÚ	MAX_PAGESÚtimeÚsleepÚrandomÚuniformÚREQUEST_DELAYr'   rA   ÚlenÚextendÚNUM_THREADSr   Ú	enumerateÚsubmitrK   r   r6   Úresultr!   r\   )Úis_fullÚ	all_itemsÚpages_to_crawlr"   r7   r8   ÚresultsÚexecutorÚir#   ÚtÚdÚfuturesÚdoneÚtotalÚfÚidxrZ   r[   s                      r   Úmainr|      sA  € Øœ#Ÿ(™(Ð"€GÜˆ&™W‘¨(Ð3°9Ð=Ô>à€IÙ07”U˜1œi¨!™mÔ,¸a¸S€Nà!ò  ˆÜ�
‰
”6—>‘>¤=Ð1Ô2Ü˜wÓ'ˆ	ØÐÜ�$�w�i˜zÐ*Ô+ØÜ˜9Ó%ˆÙÜ�$�w�iÐ2Ð3Ô4ÙÜˆd�7�)˜6¤# e£* ¨TÐ2Ô3Ø×Ñ˜Õð ô ˆ*”S˜“^Ð$Ð$4Ð5Ô6áÜÐ#Ô$ØäÐ
'¬ }°JÐ?Ô@Ø€GÜ	¬Ô	4ð 5¸ÜU^Ð_hÓUi×jÑjÁ>À1ÁkÀsÈAÈq�8—?‘?¤<°°a¸Ó;¸QÑ>ÐjˆÓjØˆÜ�G“ˆÜ˜gÓ&ò 		5ˆAØ�A‰IˆDð2Ø—‘˜qŸx™x›zÔ*ð
 �b‰y˜AŠ~ ¨£Ü�n T F¨!¨E¨7Ð3Õ4ñ		5÷	5ô # 7Ó+Ñ€HˆgÜÐ
 ˜z¨°7°)Ð<Õ=ùõ køô ò 2Ø˜a‘j�Ø% c™N‘	��Q˜Ø—‘  Q¨¨4Ð0Ö1ð2ú÷5ð 5úsH   Ä"H#Ä3'G)Å%H#Æ G1ÆH#Æ-H#Ç)H#Ç1,H ÈH#ÈH È H#È#H,Ú__main__)!Ú__doc__r`   r+   rd   rf   rO   ÚosÚurllib.requestr   Úurllib.errorrG   r1   Úconcurrent.futuresr   r   ÚenvironÚgetrQ   r   rT   r5   r   r   rc   rk   rh   r   r'   rA   rK   r\   r|   Ú__name__© r   r   ú<module>r‡      s£   ðñ
÷ H× G× G× GÛ ß ?à
�*‰*�.‰.˜Ð&7Ó
8€Ø9€	Ø	)€à$€ØˆZ�{Ð#€àð  Dð€ð €	Ø€Ø€ò.òòò.'ò6ò4,>ð^ ˆzÒÙ…Fð r   