Ë
    ~¿£j,  ã                   óŽ  — 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/slgs/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           úcrawl_tongren.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   Úfetchr6   #   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   )r9   r3   Údate)	r   ÚselectÚfindr;   r   Úget_textr   ÚBASE_URLÚappend)	ÚhtmlÚsoupÚitemsÚlir   r	   r9   Ú	date_spanÚ	date_texts	            r   Úextract_itemsrI   +   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)rC   Úms     r   Úget_total_pagesrP   <   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/t        d|› �t        j                  ¬«       |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)                  d0|› d/�«       �Œ½ |	j                  dd¬1«      D �]j  }|d   j                  «       Št        j                  d2‰t        j,                  «      sŒ=|j	                  d3«      rŒO|j                  d¬«      xs |j	                  dd«      }|sŒx‰d$k7  sŒ~t/        ˆfd4„|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 t1        «       }g }|D ]Q  }t3        |t4        «      s|j)                  |«       Œ%|d5   |vsŒ-|j7                  |d5   «       |j)                  |«       ŒS d6j9                  |«      }||||dœS )7zParse detail page contentr   r
   zdiv.ArticleTitleTr:   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})r   ÚfontÚZoom)Úidz	font#Zoomzdiv.Article_Conz#[WARN] No content container found: r'   zdiv.trs_editor_view)r9   r=   rV   Úattachments)Úpr   r   )Ú	recursiver\   r   ú r   )r	   Úappendixr	   ÚdownloadÚOLDSRCú/r   r   z./é   N)r9   r3   r   r   Úaltr   zhttps:z![z](ú)z![](r8   z\.(pdf|docx?|xlsx?|rar|zip)$r_   c              3   ój   •K  — | ]*  }|d    j                  ‰j                  d«      d   «      –— Œ, y­w)r3   rb   éÿÿÿÿ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r3   z

)r   Ú
select_oner@   r?   r   r;   r9   ÚstringrK   rL   rN   r0   r1   r2   r   rS   Úfind_parentr   rA   ÚrsplitrB   r   ÚIÚanyÚsetÚ
isinstanceÚdictÚaddÚjoin)rC   r3   rD   r9   Ú	title_divÚ
meta_titlerH   Ú	meta_daterO   ÚzoomÚcontent_divr[   ÚpartsÚelÚtextr   ÚatitleÚoldsrcÚahrefÚtbl_htmlr   rd   ÚseenÚunique_attachmentsrk   rV   r	   s                             @r   Úparse_detailr†   C   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áÜÐ3°C°5Ð9ÄÇ
Á
ÕKà�‰Ð4Ó5ˆáØ¨	¸bÐQSÑTÐTà€KØ€Eà�m‰mÒ1¸TˆmÓBó 30ˆØ�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 2 c U¨"¨S¨E°Ð!3Ö4à—L‘L 4¨ u¨A Ö/ðg30ðl �]‰]˜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ØÐØò +ˆÜ˜#œtÔ$Ø×%Ñ% cÔ*ØØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø×%Ñ% cÕ*ð+ð �k‰k˜%Ó €GØ I¸'ÐRdÑeÐer   c                  ó2	  — t        t        «      } | s0t        dt        j                  ¬«       t        j
                  d«       t        | «      }|€st        | d«      }d}|j                  d«      D ]P  }t        j                  d|j                  dd«      «      }|sŒ,t        |j                  d«      «      dz   }||kD  sŒO|}ŒR n	 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*        d¬«      }
|
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        d2t<        › d|› d3|› d4|› d5�	«       y # tB        $ r/}t        d/|d d0 › d1|› �t        j                  ¬«       Y d }~�ŒNd }~ww xY w)6Nz[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=re   r   Úindex_z.htmlz[INFO] Fetching page rb   z: z[WARN] Empty response for page z[INFO] Found z items on page z[INFO] Total items from list: é<   r"   z'SELECT id FROM gov_raw WHERE page_url=?r3   z[INFO] Fetching detail: r9   é2   z...z&[WARN] Cannot fetch detail, skipping: r=   rV   r[   z<[^>]+>z\s+r^   éÈ   z[WARN] Empty content: z(\d{4})-(\d{2})-(\d{2})rc   é   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)$r6   ÚLIST_URLr0   r1   r2   ÚexitrP   r   r>   rK   rL   r   rM   rN   Ú_MAX_PGÚrangerI   ÚlenÚextendÚsqlite3ÚconnectÚDBÚcursorÚexecuteÚfetchoner†   Úsubr;   ÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr/   ÚcommitÚclose)rC   Útotal_pagesrD   r   rO   r\   Ú	all_itemsÚpgr3   rE   ÚconnÚcÚ	new_countÚempty_contentÚtotal_attachmentsÚitemÚdetailr9   rH   rV   r[   ÚplainÚsummaryÚ	date_rankÚatt_jsonr5   s                             r   Úmainr°   Ç   sP  € Ü”‹?€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 rÔ*€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Ð!ùðU,Tð\ 	‡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__rK   r1   Úosr›   Úurllib.requestr   Úurllib.errorÚbs4r   r”   rA   rŽ   r�   ÚSITE_DISPLAYrž   Úenvironr   r–   r+   r�   Ú	enumerateÚargvÚir   r’   rM   r   r6   rI   rP   r†   r°   Ú__name__© r   r   ú<module>r¾      sá   ðá -ß × ß #Ý Û à%€Ø�mÑ#€Ø$€	Ø)€Ø€
Ø‡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Ó&ˆÙðó
òòò"òAfòHcvðL ˆzÒÙ…Fð r   