Ë
    Í«£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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ddddddddddddœZdZ eej0                  «      D ]=  \  ZZedk(  sŒedz    eej0                  «      k  sŒ% eej0                  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)$u1   å…­å®‰å¸‚è£•å®‰åŒº-è¡Œæ”¿å®¡æ‰¹ï¼ˆçŽ¯è¯„å®¡æ‰¹ï¼‰é    N)ÚBeautifulSoupzhttps://www.yuan.gov.cnz/site/label/8888u   è£•å®‰åŒº-è¡Œæ”¿å®¡æ‰¹u   å…­å®‰å¸‚è£•å®‰åŒºäººæ°‘æ”¿åºœu   çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36ÚpublicInfoListÚ6788091Ú6596771Ú7260215Ú15ÚlistÚtruez
yyyy-MM-ddÚ80Ú4u   æš‚æ— ç›¸å…³ä¿¡æ�¯z/c2/yuan/publicInfoList_newest)Ú	labelNameÚsiteIdÚorganIdÚcatIdÚpageSizeÚactionÚisDateÚ
dateFormatÚlengthÚtypeÚresultÚfilez--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//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r   r#   r$   s           úcrawl_yuan.pyÚhtml_table_to_htmlr1   %   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é   ©Útimeoutúutf-8Úreplace©Úerrorsz[WARN] fetch failed: ú - ©r   r   )r.   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r0   ÚfetchrL   2   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        t        «      }t        | «      |d<   t        dz   t        j
                  j                  |«      z   }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Ú	pageIndexú?r4   r6   r7   r9   r:   r;   z[WARN] API failed page ú: r>   r   )ÚdictÚ_API_PARAMSr&   ÚAPI_URLr.   r*   Ú	urlencoder?   r@   rA   rB   rC   rD   rE   rF   rG   rH   )Ú
page_indexÚparamsrI   rJ   rK   s        r0   Ú	fetch_apirW   :   s¸   € Ü”+Ó€FÜ˜j›/€Fˆ;ÑÜ
�C‰-œ&Ÿ,™,×0Ñ0°Ó8Ñ
8€CÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò ÜÐ'¨
 |°2°a°SÐ9ÄÇ
Á
ÕKÜûðús   Á-?B- Â-	C!Â6!CÃC!c                 óî  — t        | d«      }g }|j                  d«      D ]Ò  }|j                  ddd¬«      }|sŒ|d   j                  «       }|j	                  dd¬	«      }t        j                  d
d|«      j                  «       }|s|j	                  d¬	«      }|j                  dd¬«      }|r|j	                  d¬	«      nd}|r|j                  d«      s	t        |z   }|j                  |||dœ«       ŒÔ |S )Nr   zli.clearfixr   ÚtitleT)Úclass_r   r   ú ©Ústripu   ^[ã€�\[]?[^ã€‘\]]+[ã€‘\]]?\s*r   ÚspanÚdate)rZ   r    )rY   rI   r_   )
r   ÚselectÚfindr]   Úget_textÚreÚsubr)   ÚBASE_URLÚappend)	ÚhtmlÚsoupÚitemsÚlir   r   rY   r^   Ú	date_texts	            r0   Úextract_itemsrl   E   sï   € Ü˜˜}Ó-€DØ€EØ�k‰k˜-Ó(ò GˆØ�G‰G�C ¨dˆGÓ3ˆÙØØ�‰y�‰Ó ˆØ—
‘
˜3 d�
Ó+ˆä—‘Ð7¸¸UÓC×IÑIÓKˆÙØ—J‘J T�JÓ*ˆEØ�w‰w�v fˆwÓ-ˆÙ15�D—M‘M¨�MÔ-¸2ˆ	Ù˜Ÿ™¨Ô/Ü˜d‘?ˆDØ�‰˜u¨T¸9ÑEÕFðGð €Lr2   c                 ó¶  ‡— t        | d«      }d}|j                  r`|j                  j                  j                  «       }t	        j
                  dd|«      j                  «       }t	        j
                  dd|«      }d}|j                  d«      D ]`  }d|j                  «       v sŒ|j                  d«      }|r7t	        j                  d	|j                  «       «      }|r|j                  d
«      } n |j                  d«      }|s%t        d|› �t        j                  ¬«       ||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(  �r|j                  dd¬«      }|j                  dd¬«      D ]Ö  }|d   j                  «       }t	        j                  d|t        j"                  «      sd|v sŒ@|j                  d¬«      xs |j%                  dd«      }|j'                  d«      r	t(        |z   n-|j'                  d«      s|j+                  dd
«      d   dz   |z   n|Št-        ˆfd„|	D «       «      rŒÃ|	j/                  |‰dœ«       ŒØ |s�ŒY|
j/                  |«       �Œl|j                  dk(  r#t1        ||«      }|s�Œ‹|
j/                  |«       �Œž|j                  d k(  s�Œ¯|j%                  d!d«      }|j%                  d"d«      }|s�Œ×|j'                  d«      r	t(        |z   n-|j'                  d«      s|j+                  dd
«      d   dz   |z   n|}|
j/                  |r	d#|› d$|› d%�nd&|› d%�«       �ŒA t3        «       }g }|	D ]/  }|d'   |vsŒ|j5                  |d'   «       |j/                  |«       Œ1 ||d(j7                  |
«      |dœS ))Nr   r   u#   _å…­å®‰å¸‚è£•å®‰åŒºäººæ°‘æ”¿åºœ\s*$ú\s+r[   Úthu   å�‘å¸ƒæ—¥æœŸÚtdz(\d{4}-\d{2}-\d{2})r   zdiv.wzcon.j-fontContentz[WARN] No content: r>   )rY   r_   ÚcontentÚattachments)Úpr,   r#   T)Ú	recursivers   r,   r\   r   )r   r   z\.(pdf|docx?|xlsx?|zip|rar)$z/group2/M00Údownloadú/r    r   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)rI   N© )Ú.0ÚattÚahrefs     €r0   ú	<genexpr>zparse_detail.<locals>.<genexpr>„   s   øè ø€ ÒJ°s˜s 5™z¨UÕ2ÑJùs   ƒ)rY   rI   r#   r$   Úaltz![z](ú)z![](rI   z

)r   rY   Ústringr]   rc   rd   r'   rb   Ú	find_nextÚsearchÚgroupÚ
select_onerF   rG   rH   ÚnameÚfind_parentÚIr(   r)   re   ÚrsplitÚanyrf   r1   ÚsetÚaddÚjoin)rg   rI   rh   rY   rk   ro   rp   ÚmÚcontent_divrr   ÚpartsÚelÚtextr   r   ÚatitleÚtbl_htmlr$   r}   ÚseenÚuarz   r{   s                         @r0   Úparse_detailr•   Y   s§  ø€ Ü˜˜}Ó-€Dð €EØ‡z‚zØ—
‘
×!Ñ!×'Ñ'Ó)ˆÜ—‘Ð=¸rÀ5ÓI×OÑOÓQˆÜ—‘�v˜s EÓ*ˆð €IØ�m‰m˜DÓ!ò ˆØ˜RŸ[™[›]Ò*Ø—‘˜dÓ#ˆBÙÜ—I‘IÐ4°b·k±k³mÓD�ÙØ !§¡¨£
�IÙðð —/‘/Ð";Ó<€KÙÜÐ# C 5Ð)´·
±
Õ;Ø¨	¸bÐQSÑTÐTà€KØ€Eà×"Ñ"Ò#8ÀDÐ"ÓIó KˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9Øà�7‰7�c‹>Ø—;‘;˜s¨$�;Ó/ˆDØ—[‘[ ¨4�[Ó0ò L�Ø˜‘y—‘Ó(�Ü—9‘9Ð<¸dÄBÇDÁDÔIÈ]Ð^bÒMbØŸZ™Z¨d˜ZÓ3ÒL°q·u±u¸ZÈÓ7L�FØ/3¯©¸sÔ/CœH tšOÐtx÷  uDñ  uDð  EKô  uLÈ#Ï*É*ÐUXÐZ[ÓJ\Ð]^ÑJ_ÐbeÑJeÐhlÒJlð  RV�EÜÓJ¸kÔJÕJØ#×*Ñ*°VÀEÑ+JÕKðLó Ø—‘˜TÖ"à�W‰W˜ÒÜ)¨"¨cÓ2ˆHÛØ—‘˜XÖ&Ø�W‰W˜ÔØ—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÛØ(+¯©°sÔ(;”h ’nÐkn×kyÑkyð  {Aô  lBÀ#Ç*Á*ÈSÐRSÓBTÐUVÑBWÐZ]ÑB]Ð`cÒBcð  HK�Ø—‘±3˜r #  b¨¨¨QÑ/¸dÀ3À%Àq¸MÖJð7Kô: ‹5€DØ	€BØò ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø�I‰I�c�Nðð
  I¸&¿+¹+ÀeÓ:LÐ]_Ñ`Ð`r2   c                  óÀ  — t        d«      } | s0t        dt        j                  ¬«       t        j                  d«       d}t        j                  d| «      }|rt        |j                  d«      «      }t        d|› �t        j                  ¬«       t        r9|t        kD  r0t        dt        › dt        › d�t        j                  ¬«       t        }t        | «      }t        d	t        |«      › d
|› �t        j                  ¬«       t        d|dz   «      D ]u  }t        d|› d|› �t        j                  ¬«       t        |«      }|sŒ2t        |«      }t        d	t        |«      › d�t        j                  ¬«       |j                  |«       Œw t        dt        |«      › �t        j                  ¬«       t        j                  t         «      }|j#                  d«       |j%                  «       }dx}	x}
}|D �]p  }|j#                  d|d   f«       |j'                  «       rŒ+t)        |d   «      }|sŒ<t+        ||d   «      }|d   xs |d   }|d   xs |d   }|d   }|d   }t        j,                  ddt        j,                  dd|«      «      j/                  «       }|d d }|s|
dz  }
d}|rVt        j                  d|«      }|r>t        |j                  d«      |j                  d«      z   |j                  d«      z   «      }|rt1        j2                  |d¬ «      nd!}	 |j#                  d"|t4        t6        |d   |||||f	«       |j8                  dkD  r|	dz  }	|t        |«      z  }�Œs |j=                  «        |j?                  «        t        d&t4        › d'|	› d(|
› d)|› d*�	«       y # t:        $ r/}t        d#|d d$ › d%|› �t        j                  ¬«       Y d }~�Œäd }~ww xY w)+Nr   z[ERROR] Cannot fetch list pager>   zpageCount:\s*(\d+)z[INFO] Total pages: z[INFO] Limiting to z pages (--pages=r~   z[INFO] Found z items on page 1/é   z[INFO] Fetching page rv   z itemsz[INFO] Total items: zPRAGMA busy_timeout = 60000r   z'SELECT id FROM gov_raw WHERE page_url=?rI   rY   r_   rq   rr   rn   r[   z<[^>]+>r   éÈ   z(\d{4})-(\d{2})-(\d{2})é   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: r6   r=   z

[RESULT] rP   z new, z empty, z attachments) rW   rF   rG   rH   Úexitrc   r�   Úintr‚   Ú_MAX_PGrl   ÚlenÚrangeÚextendÚsqlite3ÚconnectÚDBÚexecuteÚcursorÚfetchonerL   r•   rd   r]   ÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountrE   ÚcommitÚclose)Ú
first_htmlÚtotal_pagesrŒ   Ú	all_itemsÚpgrg   ri   ÚconnÚcÚ	new_countÚempty_contentÚtotal_attachmentsÚitemÚdetailrY   rk   rq   rr   ÚplainÚsummaryÚ	date_rankÚatt_jsonrK   s                          r0   Úmainr½   ž   s†  € Ü˜1“€JÙÜÐ.´S·Z±ZÕ@Ü�‰�Œð €KÜ
�	‰	Ð'¨Ó4€AÙÜ˜!Ÿ'™' !›*“oˆÜ	Ð   Ð
.´S·Z±ZÕ@å�;¤Ò(ÜÐ#¤G 9Ð,<¼W¸IÀQÐGÌcÏjÉjÕYÜˆä˜jÓ)€IÜ	ˆMœ#˜i›.Ð)Ð):¸;¸-Ð
HÌsÏzÉzÕZä�A�{ Q‘Ó'ò  ˆÜÐ% b T¨¨;¨-Ð8¼s¿z¹zÕJÜ˜‹}ˆÙØÜ˜dÓ#ˆÜ�œc %›j˜\¨Ð0´s·z±zÕBØ×Ñ˜Õð ô 
Ð ¤ Y£Ð 0Ð
1¼¿
¹
ÕCä�?‰?œ2Ó€DØ‡L�LÐ.Ô/Ø�‰‹€Aà45Ð5€IÐ5�Ð 1Øó FˆØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<ØÜ�T˜%‘[Ó!ˆÙØÜ˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ˜]Ñ+ˆÜ—‘�v˜s¤B§F¡F¨:°r¸7Ó$CÓD×JÑJÓLˆØ˜˜�+ˆÙØ˜QÑˆMØˆ	ÙÜ—	‘	Ð4°iÓ@ˆAÙÜ §¡¨£
¨Q¯W©W°Q«ZÑ 7¸!¿'¹'À!»*Ñ DÓE�	ÙBM”4—:‘:˜k¸Õ>ÐSWˆð	FØ�I‰Ið  rØœi¬°T¸%±[À)ÈWÐV]Ð_gÐirÐsôuà�z‰z˜AŠ~Ø˜Q‘�	Ø!¤S¨Ó%5Ñ5Ð!ùð7Fð> 	‡K�K„MØ‡J�J„LÜ	ˆKœ	�{ " Y K¨v°m°_ÀHÐM^ÐL_Ð_kÐ
lÕmøô ò 	FÜ�L  s¨  ¨C°¨sÐ3¼#¿*¹*×EÓEûð	Fús   ÌAN%Î%	OÎ.$OÏOÚ__main__)r   )$Ú__doc__rc   rG   Úosr§   r%   r.   Úurllib.requestÚurllib.errorÚbs4r   r¡   re   rS   r©   ÚSITE_DISPLAYrª   Úenvironr(   r£   rA   rR   r�   Ú	enumerateÚargvÚir   rž   rœ   r1   rL   rW   rl   r•   r½   Ú__name__rx   r2   r0   ú<module>rÊ      s  ðá 7ß &× &Ó &ß #Ý Û à$€Ø
Ð'Ñ
'€Ø$€	Ø/€Ø€
Ø‡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Ó&ˆÙðó
òò	òò(BaòJEnðN ˆzÒÙ…Fð r2   