Ë
    V_Š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mZ ddlm	Z	 dZ
dZdZdd	iZd
Zd„ Zd„ Zd„ Zedk(  r e«       Z eded   › ded   › �«       yy)uB   Crawler for è´µå·žæ±‡æ™¯æ£®çŽ¯ä¿�å·¥ç¨‹æœ‰é™�å…¬å�¸ - å…¬å‘Šå…¬ç¤ºé    N)ÚBeautifulSoup)Úurljoinzhttp://www.huijingsen.cnz/index.php/lists/48.htmlz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36u   è´µå·žc                 óŒ   — | j                  d«      }|D ].  }|j                  d¬«      }t        j                  d|«      sŒ,|c S  y)zHExtract date from list item - <span>2026-06-23</span> in the footer areaÚspanT©Ústripz\d{4}-\d{2}-\d{2}N)Úfind_allÚget_textÚreÚmatch)ÚitemÚspansr   Útxts       ú%/root/gov_crawler/crawl_huijingsen.pyÚextract_date_from_itemr      sH   € à�M‰M˜&Ó!€EØò ˆØ�m‰m $ˆmÓ'ˆÜ�8‰8Ð(¨#Õ.ØŠJðð ó    c                 ó°  ‡— t        t        | «      }	 t        j                  |t        d¬«      }d|_        t        |j                  d«      }|j                  d	«      }|r|j                  d
¬«      nd}t        j                  dd|«      j!                  «       }|j#                  dd¬«      }d}|D ]  }	|	j                  dg «      }
d|
v sŒ|	} n |s|r|d   }|s t        dt        j                  ¬«       |dg fS g }|j#                  dd
¬«      D ]y  }|d   }t        j$                  d|t        j&                  «      sŒ.|j)                  d«      st        t        |«      n|}|j                  d
¬«      }|j+                  ||xs |f«       Œ{ |j#                  g d¢«      D ]!  }|j-                  |j                  «       «       Œ# t/        |«      }g Šˆfd„}t        j                  d||t        j0                  ¬«      }t        |d«      }|j                  dd
¬«      }t3        ‰«      D ]  \  }}|j5                  d |› d!�|«      }Œ |j7                  d«      }|D �cg c]#  }|j!                  «       sŒ|j!                  «       ‘Œ% }}d"j9                  |«      }|||fS # t        $ r0}t        d| › d|› �t        j                  ¬«       ddg fcY d}~S d}~ww xY wc c}w )#z4Get title, content, and attachments from detail pageé   ©ÚheadersÚtimeoutúutf-8z  FAIL fetch ú: ©ÚfileNúhtml.parserÚtitleTr   Ú uE   \s*-\s*å…¬å‘Šå…¬ç¤º\s*-\s*è´µå·žæ±‡æ™¯æ£®çŽ¯ä¿�å·¥ç¨‹æœ‰é™�å…¬å�¸\s*$ÚdivÚ	showkuang)Úclass_ÚclassÚmt15r   z  No content div foundÚa©Úhrefr&   z\.(pdf|doc|docx|xls|xlsx)$Úhttp)r   ÚbÚstrongÚfontÚemÚiÚuÚsc                 óf   •— t        ‰«      }‰j                  | j                  d«      «       d|› d�S )Nr   Ú__TABLE_Ú__)ÚlenÚappendÚgroup)ÚmÚidxÚtabless     €r   Ú
save_tablezget_detail.<locals>.save_tableN   s/   ø€ Ü�&‹kˆØ�‰�a—g‘g˜a“jÔ!Ø˜#˜˜bÐ!Ð!r   z<table[^>]*>.*?</table>)Úflagsú
)Ú	separatorr   r0   r1   ú

)r   ÚBASE_URLÚrequestsÚgetÚHEADERSÚencodingÚ	ExceptionÚprintÚsysÚstderrr   ÚtextÚfindr
   r   Úsubr   r	   ÚsearchÚIÚ
startswithr3   Úreplace_withÚstrÚDOTALLÚ	enumerateÚreplaceÚsplitÚjoin)ÚurlÚfull_urlÚrÚeÚsoupÚ	title_tagr   ÚdivsÚcontent_divÚdÚclassesÚattachmentsÚa_tagr&   Úfull_url_attachÚ	link_textÚtagÚcontent_htmlr8   Úcontent_soupÚcontent_textr,   ÚtÚlinesÚlr7   s                            @r   Ú
get_detailrh      sÐ  ø€ ä”x Ó%€HðÜ�L‰L˜¬7¸BÔ?ˆØˆŒ
ô
 ˜Ÿ™ Ó/€Dð —	‘	˜'Ó"€IÙ.7ˆI×Ñ TÐÔ*¸R€Eä�F‰FÐ[Ð]_ÐafÓg×mÑmÓo€Eð �=‰=˜ {ˆ=Ó3€DØ€KØò ˆØ—%‘%˜ Ó$ˆØ�WÒØˆKÙð	ñ
 ™4Ø˜1‘gˆÙÜÐ&¬c¯j©jÕ9Ø�d˜BˆÐð €KØ×%Ñ% c°Ð%Ó5ò EˆØ�V‰}ˆÜ�9‰9Ð2°D¼"¿$¹$Õ?Ø=A¿_¹_ÈVÔ=Tœg¤h°Ô5ÐZ^ˆOØŸ™¨T˜Ó2ˆIØ×Ñ °Ò1B¸dÐCÕDðEð ×#Ñ#Ò$XÓYò )ˆØ×Ñ˜Ÿ™›Õ(ð)ô �{Ó#€Lð €Fô"ô —6‘6Ð4°jÀ,ÔVX×V_ÑV_Ô`€Lô ! ¨}Ó=€LØ×(Ñ(°4¸tÐ(ÓD€Lô ˜&Ó!ò A‰ˆˆ1Ø#×+Ñ+¨h°q°c¸Ð,<¸aÓ@‰ðAð ×Ñ˜tÓ$€EØ %Ö3˜1¨¯©­ˆQ�W‰W�YÐ3€EÐ3Ø—;‘;˜uÓ%€Là�, Ð+Ð+øô ò Ü�˜c˜U " Q CÐ(¬s¯z©zÕ:Ø�T˜2ˆ~Õûðüòx 4s)   “#J ÉKÉ-KÊ	KÊ %KËKËKc                  ó  — t        j                  t        «      } | j                  «       }d}d}d}t	        dd«      D �]�  }|dk(  rt        t        t        «      }nt        t        t        d|› �z   «      }t        d|› d�t        j                  ¬«       	 t        j                  |t        d¬	«      }d
|_        t!        |j"                  d«      }	|	j%                  d«      }
|
s!t        d|› �t        j                  ¬«        �nÀ|
D �]·  }|j'                  dd¬«      }|sŒ|d   }|j)                  d«      r|nd|j+                  d«      z   }|j-                  d¬«      }t/        |«      }|j1                  d|f«      j3                  «       }|rt        d|› �t        j                  ¬«       Œ¥t        d|› �t        j                  ¬«       t5        |«      \  }}}|s|}d}|r[g }|D ]@  \  }}|j)                  d«      st        t        |«      n|}|j7                  d|› d|› d�«       ŒB ddj9                  |«      z   }|r||z   n|}|sd t        t        |«      › d!|› d"�}	 |j1                  d#||||t:        t        t        |«      f«       | j=                  «        |dz  }t        d$|d d% › �t        j                  ¬«       �Œº �Œ„ | jA                  «        t        d(|› d)|› �t        j                  ¬«       ||fS # t        $ r1}t        d|› d|› �t        j                  ¬«       |dz  }Y d }~�Œïd }~ww xY w# t        $ rD}t        d&|d d' › d|› �t        j                  ¬«       | j?                  «        |dz  }Y d }~�Œxd }~ww xY w)*Nr   é   é   z?page=zFetching page z...r   r   r   r   z  FAIL page r   r   zli.acea-rowz  No items found on page r$   Tr%   r&   ú/r   z)SELECT id FROM gov_raw WHERE page_url = ?z  SKIP (exists): z	  Fetch: r   r'   ú[z](ú)r<   r:   z<p><a href="z">z</a></p>zwINSERT OR IGNORE INTO gov_raw (page_url, title, content, publish_date, site_name, source_url) VALUES (?, ?, ?, ?, ?, ?)z  OK: é<   z  FAIL insert é(   z
Done. Inserted: z
, Errors: )!Úsqlite3ÚconnectÚDB_PATHÚcursorÚranger   r=   ÚLIST_URLrC   rD   rE   r>   r?   r@   rA   rB   r   rF   ÚselectrG   rK   Úlstripr
   r   ÚexecuteÚfetchonerh   r3   rR   ÚGROUPÚcommitÚrollbackÚclose)ÚconnÚcÚinsertedÚupdatedÚerrorsÚpagerS   rU   rV   rW   Úitemsr   Útitle_ar&   Ú
detail_urlÚ
list_titleÚdate_strÚexistsr   Úcontentr]   Ú	attach_mdÚpartsÚ
attach_urlÚlabelÚattach_url_fullÚfull_contents                              r   Úcrawlr’   c   sq  € Ü�?‰?œ7Ó#€DØ�‰‹€Aà€HØ€GØ€Fä�a˜“ó OˆØ�1Š9Üœ(¤HÓ-‰Cäœ(¤H°¸°v¨Ñ$>Ó?ˆCä�˜t˜f CÐ(¬s¯z©zÕ:ð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJô ˜QŸV™V ]Ó3ˆØ—‘˜MÓ*ˆáÜÐ-¨d¨VÐ4¼3¿:¹:ÕFÚàó 9	ˆDà—i‘i ¨$�iÓ/ˆGÙØà˜6‘?ˆDØ!%§¡°Ô!5™¸3ÀÇÁÈSÓAQÑ;QˆJØ ×)Ñ)°Ð)Ó5ˆJô .¨dÓ3ˆHð —Y‘YØ;Ø�ó÷ ‰h‹jð ñ
 äÐ)¨*¨Ð6¼S¿Z¹ZÕHØô �I˜j˜\Ð*´·±Õ<Ü*4°ZÓ*@Ñ'ˆE�7˜KáØ"�ð ˆIÙØ�Ø)4ò BÑ%�J ØKU×K`ÑK`ÐagÔKh¤g¬h¸
Ô&CÐnx�OØ—L‘L 1 U G¨2¨oÐ->¸aÐ!@ÕAðBð # T§Y¡Y¨uÓ%5Ñ5�	á29˜7 YÒ.¸yˆLñ  Ø!-¬g´hÀ
Ó.KÐ-LÈBÈuÈgÐU]Ð^�ðØ—	‘	ð NØ ¨°hÄÄwÌxÐYcÓGdÐeôð —‘”Ø˜A‘�Ü˜˜u S b˜z˜lÐ+´#·*±*×=òk9	ð-Oðb 	‡J�J„LÜ	Ð˜x˜j¨
°6°(Ð
;Ä#Ç*Á*ÕMØ�VÐÐøôS ò 	Ü�L   b¨¨Ð,´3·:±:Õ>Ø�a‰KˆFÝûð	ûôD ò Ü˜ u¨S¨b z l°"°Q°CÐ8¼s¿z¹zÕJØ—‘”Ø˜!‘–ûðús1   Â#K6ÉA L3Ë6	L0Ë?&L+Ì+L0Ì3	N Ì<9M;Í;N Ú__main__zRESULT:ú:rj   )Ú__doc__r>   r   rq   ÚosrD   Úbs4r   Úurllib.parser   r=   rv   rs   r@   r{   r   rh   r’   Ú__name__ÚresultrC   © r   r   ú<module>rœ      s†   ðá HÛ Û 	Û Û 	Û 
Ý Ý  à%€Ø%€Ø
€àÐPð€ð 	€òòE,òN[ðz ˆzÒÙ‹W€FÙ	ˆG�F˜1‘I�;˜a  q¡	˜{Ð
+Õ,ð r   