Ë
    É0€jQ)  ã                   óŽ  — 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
Z
dZedz   ZdZdZdZej                   j#                  d	d
«      ZddiZdZ eej,                  «      D ]=  \  ZZedk(  sŒedz    eej,                  «      k  sŒ% eej,                  edz      «      Z n dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)u-   é“œä»�å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - ä¸�äºˆæ‰¹å‡†å…¬å‘Šé    N)ÚBeautifulSoupzhttps://sthjj.trs.gov.cnz/xzsp/bypzgg/u   é“œä»�å¸‚-ä¸�äºˆæ‰¹å‡†å…¬å‘Šu   é“œä»�å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€u   çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z--pagesé   c                 óÊ  — 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data:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r	   r   r   s           ú%/root/gov_crawler/crawl_trs_bypzgg.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                  | t        ¬«      }	 t         j                  j	                  |d¬«      j                  «       j                  dd¬«      S # t        $ r+}t        d| › d|› �t        j                  ¬	«       Y d }~y
d }~ww xY w)N)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsz[WARN] fetch failed: ú - ©Úfiler
   )r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r   Úfetchr5   $   sƒ   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   §?A' Á'	BÁ0!BÂBc                 ó´  — t        | d«      }g }|j                  d«      D ]µ  }|j                  dd¬«      }|sŒ|d   j                  «       }|j	                  dd«      xs |j                  d¬	«      }|j                  d
«      }|r|j                  d¬	«      nd}|j                  d«      s	t        |z   }|j                  |j                  «       ||dœ«       Œ· |S )zExtract items from a list pager   zul.NewsList > lir   T©r	   r	   Útitler
   ©ÚstripÚspanr   )r8   r2   Údate)	r   ÚselectÚfindr:   r   Úget_textr   ÚBASE_URLÚappend)	ÚhtmlÚsoupÚitemsÚlir   r	   r8   Ú	date_spanÚ	date_texts	            r   Úextract_itemsrH   ,   sÏ   € ä˜˜}Ó-€DØ€EØ�k‰kÐ,Ó-ò 
OˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ—G‘G˜F“Oˆ	Ù6?�I×&Ñ&¨TÐ&Ô2ÀRˆ	Ø�‰˜vÔ&Ü˜d‘?ˆDØ�‰˜uŸ{™{›}°TÀ9ÑMÕNð
Oð €Lr   c                 óh   — t        j                  d| «      }|rt        |j                  d«      «      S y)z*Get total pages from createPageHTML scriptz&createPageHTML\((\d+),\s*\d+,\s*"indexr   N)ÚreÚsearchÚintÚgroup)rB   Úms     r   Úget_total_pagesrO   =   s+   € ä
�	‰	Ð;¸TÓB€AÙÜ�1—7‘7˜1“:‹ÐØr   c                 ó(  ‡— t        | d«      }d}|j                  d«      }|r|j                  d¬«      }|s;|j                  dddi¬	«      }|r$|j	                  d
«      r|d
   j                  «       }|s0|j                  r$|j                  j                  j                  «       }d}|j                  dddi¬	«      }|r=|j	                  d
«      r,t        j                  d|d
   «      }|r|j                  d«      }|j                  dd¬«      }	|	s|j                  d«      }	|	s&|j                  d«      }
|
r|
j                  dd¬«      }	|	s|j                  d«      }	|	s||dg dœS g }g }|	j                  g d¢d¬«      D �]º  }|j                  dk(  r|j                  d«      rŒ%|j                  dk(  r|j                  d«      rŒF|j                  dk(  �rk|j                  dd¬«      }|j                  ddd¬«      D �])  }|d   j                  «       Š|j                  d¬«      xs |j	                  dd«      }|j	                  dd«      }|rK|j                  d«      r
t        |z   }nª|j                  d «      r|}n–|j!                  dd«      d!   dz   |z   }nz‰j                  d"«      r|j!                  dd«      d!   dz   ‰d#d$ z   }nJ‰j                  d«      r
t        ‰z   }n/‰j                  d «      r‰}n|j!                  dd«      d!   dz   ‰z   }|j#                  ||d%œ«       �Œ, |s�Œ®|j#                  |«       �ŒÁ|j                  dk(  r#t%        ||«      }|s�Œà|j#                  |«       �Œó|j                  d&k(  s�Œ|j	                  d'd«      }|j	                  d(d«      }|s�Œ,|j                  d)«      rd*|z   }nG|j                  d«      r
t        |z   }n,|j                  d «      s|j!                  dd«      d!   dz   |z   }|r|j#                  d+|› d,|› d-�«       �Œ¦|j#                  d+|› d.�«       �Œ½ |	j                  dd¬/«      D �]j  }|d   j                  «       Št        j                  d0‰t        j&                  «      sŒ=|j	                  d1«      rŒO|j                  d¬«      xs |j	                  dd«      }|sŒx‰d"k7  sŒ~t)        ˆfd2„|D «       «      rŒ“|j	                  dd«      }|r6|j                  d«      r	t        |z   n|j!                  dd«      d!   dz   |z   }nz‰j                  d"«      r|j!                  dd«      d!   dz   ‰d#d$ z   }nJ‰j                  d«      r
t        ‰z   }n/‰j                  d «      r‰}n|j!                  dd«      d!   dz   ‰z   }|j#                  ||d%œ«       �Œm t+        «       }g }|D ]/  }|d3   |vsŒ|j-                  |d3   «       |j#                  |«       Œ1 d4j/                  |«      }||||dœS )5zParse detail page contentr   r
   zdiv.ArticleTitleTr9   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})r   ÚfontÚZoom)Úidz	font#Zoomzdiv.Article_Conzdiv.trs_editor_view)r8   r<   rU   Úattachments)Úpr   r   )Ú	recursiver[   r   ú r   )r	   Úappendixr	   ÚdownloadÚOLDSRCú/r   r   z./é   N)r8   r2   r   r   Úaltr   zhttps:z	<a href="z" target="_blank">z</a>u   " target="_blank">å›¾ç‰‡</a>r7   z\.(pdf|docx?|xlsx?|rar|zip)$r^   c              3   ój   •K  — | ]*  }|d    j                  ‰j                  d«      d   «      –— Œ, y­w)r2   ra   éÿÿÿÿN)ÚendswithÚsplit)Ú.0Úattr	   s     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>¢   s0   øè ø€ Ò2sÐ`c°3°u±:×3FÑ3FÀtÇzÁzÐRUÃÐWYÑGZ×3[Ñ2sùs   ƒ03r2   z

)r   Ú
select_oner?   r>   r   r:   r8   ÚstringrJ   rK   rM   r   rR   Úfind_parentr   r@   ÚrsplitrA   r   ÚIÚanyÚsetÚaddÚjoin)rB   r2   rC   r8   Ú	title_divÚ
meta_titlerG   Ú	meta_daterN   ÚzoomÚcontent_divrZ   ÚpartsÚelÚtextr   ÚatitleÚoldsrcÚahrefÚtbl_htmlr   rc   ÚseenÚunique_attachmentsri   rU   r	   s                             @r   Úparse_detailr‚   D   sÀ  ø€ ä˜˜}Ó-€Dà€EØ—‘Ð 2Ó3€IÙØ×"Ñ"¨Ð"Ó.ˆÙØ—Y‘Y˜v¨f°nÐ-E�YÓFˆ
Ù˜*Ÿ.™.¨Ô3Ø˜yÑ)×/Ñ/Ó1ˆEÙ�T—Z’ZØ—
‘
×!Ñ!×'Ñ'Ó)ˆà€IØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØŸ™ ›
ˆIà�9‰9�V ˆ9Ó'€DÙØ�‰˜{Ó+ˆÙØ—o‘oÐ&7Ó8ˆÙØ×#Ñ# F¨vÐ#Ó6ˆDáØ�‰Ð4Ó5ˆáØ¨	¸bÐQSÑTÐTà€KØ€Eà�m‰mÒ1¸TˆmÓBó 1PˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9Øà�7‰7�c‹>Ø—;‘;˜s¨$�;Ó/ˆDØ—[‘[ ¨4¸$�[Ó?ó D�Ø˜‘y—‘Ó(�ØŸ™¨$˜Ó/ÒH°1·5±5¸ÀRÓ3H�ØŸ™˜x¨Ó,�ÙØ×(Ñ(¨Ô-Ü (¨6Ñ 1™Ø×*Ñ*¨6Ô2Ø &™à #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸fÑ D™à—‘ tÔ,Ø #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸dÀ1À2¸hÑ F™ØŸ™¨Ô-Ü (¨4¡™ØŸ™¨Ô0Ø $™à #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸dÑ B˜Ø×"Ñ"¨V¸EÑ#BÖCð)Dó* Ø—‘˜TÖ"à�W‰W˜ÒÜ)¨"¨cÓ2ˆHÛØ—‘˜XÖ&Ø�W‰W˜ÔØ—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÛØ—>‘> $Ô'Ø" S™.‘CØ—^‘^ CÔ(Ü" S™.‘CØŸ™¨Ô/ØŸ*™* S¨!Ó,¨QÑ/°#Ñ5¸Ñ;�CÙØ—L‘L 9¨S¨EÐ1CÀCÀ5ÈÐ!MÖNà—L‘L 9¨S¨EÐ1MÐ!NÖOðc1Pðf �]‰]˜3 Tˆ]Ó*ó DˆØ�‰y�‰Ó ˆÜ�9‰9Ð4°d¼B¿D¹DÕAÈ!Ï%É%ÐPZÕJ[Ø—Z‘Z d�ZÓ+ÒD¨q¯u©u°ZÀÓ/DˆFÚ˜$ $›,¬sÓ2sÐgrÔ2sÕ/sØŸ™˜x¨Ó,�ÙØ39×3DÑ3DÀSÔ3IœX¨Ò.ÐPS×PZÑPZÐ[^Ð`aÓPbÐcdÑPeÐhkÑPkÐntÑPt‘Eà—‘ tÔ,Ø #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸dÀ1À2¸hÑ F™ØŸ™¨Ô-Ü (¨4¡™ØŸ™¨Ô0Ø $™à #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸dÑ B˜Ø×"Ñ"¨V¸EÑ#BÖCð#Dô& ‹5€DØÐØò +ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø×%Ñ% cÕ*ð+ð
 �k‰k˜%Ó €GØ I¸'ÐRdÑeÐer   c                  ó*	  — t        t        «      } | s0t        dt        j                  ¬«       t        j
                  d«       t        | «      }|€rt        | d«      }d}|j                  d«      D ]P  }t        j                  d|j                  dd«      «      }|sŒ,t        |j                  d«      «      dz   }||kD  sŒO|}ŒR t        d	|› �t        j                  ¬«       t        r9|t        kD  r0t        d
t        › dt        › d�t        j                  ¬«       t        }g }t        |«      D ]¹  }|dk(  rt        }nt        › d|› d�}t        d|dz   › d|› d|› �t        j                  ¬«       t        |«      } | s"t        d|dz   › �t        j                  ¬«       Œqt!        | «      }	t        dt#        |	«      › d|dz   › �t        j                  ¬«       |j%                  |	«       Œ» t        dt#        |«      › �t        j                  ¬«       t'        j(                  t*        «      }
|
j-                  «       }d}d}d}|D �]Ú  }|j/                  d|d   f«       |j1                  «       rŒ+t        d|d   d d › d�t        j                  ¬«       t        |d   «      } | s"t        d|d   › �t        j                  ¬«       Œ‚t3        | |d   «      }|d   xs |d   }|d   xs |d   }|d   }|d    }t        j4                  d!d|«      }t        j4                  d"d#|«      j7                  «       }|r|d d$ nd}|s#|dz  }t        d%|› �t        j                  ¬«       d}|rVt        j                  d&|«      }|r>t        |j                  d«      |j                  d'«      z   |j                  d(«      z   «      }|rt9        j:                  |d)¬*«      nd+}	 |j/                  d,|t<        t>        |d   |||||f	«       |j@                  dkD  r|dz  }|t#        |«      z  }�ŒÝ |
jE                  «        |
jG                  «        t        d0t<        › d|› d1|› d2|› d3�	«       y # tB        $ r/}t        d-|d d. › d/|› �t        j                  ¬«       Y d }~�ŒNd }~ww xY w)4Nz[ERROR] Cannot fetch list pager&   r   r   z
div.page azindex_(\d+)\.htmlr	   r
   z[INFO] Total pages: z[INFO] Limiting to z pages (--pages=ú)r   Úindex_z.htmlz[INFO] Fetching page ra   z: z[WARN] Empty response for page z[INFO] Found z items on page z[INFO] Total items from list: z'SELECT id FROM gov_raw WHERE page_url=?r2   z[INFO] Fetching detail: r8   é2   z...z&[WARN] Cannot fetch detail, skipping: r<   rU   rZ   z<[^>]+>z\s+r]   éÈ   z[WARN] Empty content: z(\d{4})-(\d{2})-(\d{2})rb   é   F)Úensure_asciiz[]z™INSERT OR IGNORE INTO gov_raw (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?,?)z[ERROR] DB insert failed: r!   r%   z

[RESULT] z new, z empty content, z attachments)$r5   ÚLIST_URLr/   r0   r1   ÚexitrO   r   r=   rJ   rK   r   rL   rM   Ú_MAX_PGÚrangerH   ÚlenÚextendÚsqlite3ÚconnectÚDBÚcursorÚexecuteÚfetchoner‚   Úsubr:   ÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr.   ÚcommitÚclose)rB   Útotal_pagesrC   r   rN   r[   Ú	all_itemsÚpgr2   rD   ÚconnÚcÚ	new_countÚempty_contentÚtotal_attachmentsÚitemÚdetailr8   rG   rU   rZ   ÚplainÚsummaryÚ	date_rankÚatt_jsonr4   s                             r   Úmainr¬   ¼   sI  € Ü”‹?€DÙÜÐ.´S·Z±ZÕ@Ü�‰�Œä! $Ó'€KØÐÜ˜T =Ó1ˆØˆØ—‘˜\Ó*ò 	$ˆAÜ—	‘	Ð.°·±°f¸bÓ0AÓBˆAÚÜ˜Ÿ™ ›
“O aÑ'�Ø�{“?Ø"#‘Kð	$ô 
Ð   Ð
.´S·Z±ZÕ@å�;¤Ò(ÜÐ#¤G 9Ð,<¼W¸IÀQÐGÌcÏjÉjÕYÜˆà€IÜ�KÓ ò  ˆØ�Š7Ü‰Cä�J˜f R D¨Ð.ˆCÜÐ% b¨¡d V¨1¨[¨M¸¸C¸5ÐAÌÏ
É
ÕSÜ�S‹zˆÙÜÐ3°B°q±D°6Ð:ÄÇÁÕLØÜ˜dÓ#ˆÜ�œc %›j˜\¨¸¸A¹¸Ð?ÄcÇjÁjÕQØ×Ñ˜Õð ô 
Ð*¬3¨y«>Ð*:Ð
;Ä#Ç*Á*ÕMä�?‰?œ2Ó€DØ�‰‹€Aà€IØ€MØÐàó +TˆØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<ØäÐ(¨¨g©°s¸Ð);Ð(<¸CÐ@ÄsÇzÁzÕRÜ�T˜%‘[Ó!ˆÙÜÐ:¸4À¹;¸-ÐHÌsÏzÉzÕZØä˜d D¨¡KÓ0ˆà�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ˜]Ñ+ˆä—‘�z 2 wÓ/ˆÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙ!&�%˜˜‘+¨BˆáØ˜QÑˆMÜÐ*¨5¨'Ð2¼¿¹ÕDàˆ	ÙÜ—	‘	Ð4°iÓ@ˆAÙÜ §¡¨£
¨Q¯W©W°Q«ZÑ 7¸!¿'¹'À!»*Ñ DÓE�	áBM”4—:‘:˜k¸Õ>ÐSWˆð		TØ�I‰Ið lØœ	¤:¨t°E©{¸IÀwÐPWÐYaÐclÐmôð �z‰z˜AŠ~Ø˜Q‘�	Ø!¤S¨Ó%5Ñ5Ð!ùðS+TðZ 	‡K�K„MØ‡J�J„Lä	ˆKœ	�{ " Y K¨v°m°_ÐDTÐUfÐTgÐgsÐ
tÕuøô ò 	TÜÐ.¨u°S°b¨z¨l¸#¸a¸SÐAÌÏ
É
×SÓSûð	Tús   ÏAQÑ	RÑ#$RÒRÚ__main__)r
   )"Ú__doc__rJ   r0   Úosr—   Úurllib.requestr   Úurllib.errorÚbs4r   r�   r@   rŠ   r™   ÚSITE_DISPLAYrš   Úenvironr   r’   r*   rŒ   Ú	enumerateÚargvÚir   rŽ   rL   r   r5   rH   rO   r‚   r¬   Ú__name__© r   r   ú<module>rº      sá   ðá 3ß × ß #Ý Û à%€Ø�oÑ%€Ø*€	Ø)€Ø€
Ø‡Z�Z‡^�^�KÐ!2Ó3€ØÐWÐ
X€à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó
òòò"òufòp_vðD ˆzÒÙ…Fð r   