Ë
    ¡Š£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	Z	dZ
d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 h d£Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"dk(  rddl#Z# e!«        yy)u'   ç¦�æ³‰å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - ç”Ÿæ€�çŽ¯å¢ƒé    N)ÚBeautifulSoupzhttps://www.gzfuquan.gov.cnz/zwgk/zdlygk/sthj/u   ç¦�æ³‰å¸‚-ç”Ÿæ€�çŽ¯å¢ƒu   ç¦�æ³‰å¸‚äººæ°‘æ”¿åºœu   çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z--pagesé   >)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr1   ÚoutÚwalks     €€€ú!/root/gov_crawler/crawl_fuquan.pyr?   zbody_text.<locals>.walk)   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r5   z\n{3,}ú

)ÚreÚbs4r1   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr1   r>   r?   s      @@@r@   Ú	body_textrK   !   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrA   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Úhrefr0   )ÚhttpÚ
javascriptú#ÚimgÚsrc)rP   z//zdata:)Úurllib.parser   r9   Úfind_allÚgetÚ
startswithÚparseÚurljoin)r   Úbase_urlÚurllibÚtblrN   rO   rS   rT   s           r@   Ú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€OrA   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: ú - ©Úfiler0   )r\   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r@   Úfetchrv   I   sz   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò Ý²±QÐ7¼c¿j¹jÕIÜûðú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«      r&t        t        j                  d«      z   dz   |dd  z   }nN|j                  d«      s=|j                  d«      r
t        |z   }n"t        t        j                  d«      z   dz   |z   }|j                  |j                  «       ||dœ«       �Œ$ |S )NrM   zul.NewsList > lirN   T©rO   rO   Útitler0   ©rG   Úspanú./ú/é   rP   )ry   rs   Údate)r   ÚselectÚfindrG   rW   Úget_textrX   ÚBASE_URLÚ	LIST_PATHÚrstripr8   )	ÚhtmlÚsoupÚitemsr   rN   rO   ry   Ú	date_spanÚ	date_texts	            r@   Úextract_itemsr‹   Q   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ˆ	Ø�?‰?˜4Ô Üœi×.Ñ.¨sÓ3Ñ3°cÑ9¸DÀÀ¸HÑD‰DØ—‘ Ô(Ø�‰˜sÔ#Ü $‘‘ä¤)×"2Ñ"2°3Ó"7Ñ7¸#Ñ=ÀÑD�Ø�‰˜uŸ{™{›}°TÀ9ÑMÖNðOð  €LrA   c                 óh   — t        j                  d| «      }|rt        |j                  d«      «      S y )Nz'createPageHTML\((\d+),\s*\d+,\s*\"indexr   )rC   ÚsearchÚintÚgroup)r†   Úms     r@   Úget_total_pagesr‘   f   s+   € Ü
�	‰	Ð<¸dÓC€AÙÜ�1—7‘7˜1“:‹ÐØrA   c                 ó$  — t        | d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j	                  d«      }|r|j                  d	¬
«      }|sI|j                  r=|j                  j                  j                  «       }t        j                  dd|«      }|}d}|j                  dddi¬«      }|r=|j                  d«      r,t        j                  d|d   «      }	|	r|	j                  d«      }|j                  dd¬«      }
|
s||dg g dœS g }g }g }g }|
j                  dd¬«      xs |
}|j                  g d¢d	¬«      D �]x  }|j                  dk(  rõ|j                  dd«      j                  «       }|j                  dd«      j                  «       }|r±|j                  d«      r&t        t         j#                  d«      z   dz   |dd  z   }nN|j                  d«      r
t        |z   }n3|j                  d«      s"t        t         j#                  d«      z   dz   |z   }|j%                  ||dœ«       |j%                  d |›d!|›d"�«       �Œ|j'                  d#«      r|j                  d#k7  r�Œ*|j                  d#k(  rt)        ||«      }|r|j%                  |«       t+        |«      }|s�Œg|j                  d$d	¬%«      D ]ë  }|d&   j-                  «       }|j/                  d'«      sŒ(|d&   }|j                  d«      r&t        t         j#                  d«      z   dz   |dd  z   }nN|j                  d«      r
t        |z   }n3|j                  d«      s"t        t         j#                  d«      z   dz   |z   }|j%                  |j                  d	¬
«      xs |j1                  d«      d(   |d)œ«       Œí |j%                  |«       �Œ{ |r|j3                  |«       d*j5                  d+„ |D «       «      }|||||dœS ),NrM   r0   Úmetar3   ÚArticleTitle)ÚattrsÚcontentzdiv.ArticleTitleTrz   z^\S+\s+\S+\s+ÚPubDatez(\d{4}-\d{2}-\d{2})r   ÚfontÚZoom)Úid)ry   r   r–   ÚimagesÚattachmentsr   Útrs_editor_view)Úclass_)r   r   rS   )Ú	recursiverS   rT   Úaltr|   r}   r~   rP   )rT   r    z![z](ú)r   rN   rx   rO   )z.pdfz.docz.docxz.xlsz.xlsxz.zipz.raréÿÿÿÿ)r3   rs   rB   c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)Nrz   )Ú.0r   s     r@   ú	<genexpr>zparse_detail.<locals>.<genexpr>³   s   è ø€ Ò@ °a·g±gµiœ!Ñ@ùs   ‚˜)r   r�   rW   rG   Ú
select_oner‚   ry   ÚstringrC   rF   r�   r�   rV   r3   rX   rƒ   r„   r…   r8   Úfind_parentr^   rK   ÚlowerÚendswithÚsplitÚextendrE   )r†   rs   r‡   ry   Ú
meta_titleÚ	title_divÚrawrŠ   Ú	meta_dater�   ÚzoomÚcontent_partsr›   rœ   ÚcellsÚcontent_divrH   rT   r    Útbl_htmlÚtextrN   ÚhÚahr–   s                            r@   Úparse_detailr¹   l   sÈ  € Ü˜˜}Ó-€DØ€EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆÙØ—O‘OÐ$6Ó7ˆ	ÙØ×&Ñ&¨TÐ&Ó2ˆEÙ�T—Z’ZØ�j‰j×Ñ×%Ñ%Ó'ˆÜ�f‰fÐ% r¨3Ó/ˆØˆà€IØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØŸ™ ›
ˆIà�9‰9�V ˆ9Ó'€DÙØ¨	¸bÈBÐ_aÑbÐbà€MØ€FØ€KØ€EØ—)‘)˜EÐ*;�)Ó<ÒDÀ€Kà×"Ñ"Ò#8ÀDÐ"ÓIó #'ˆØ�7‰7�eÒØ—&‘&˜ Ó#×)Ñ)Ó+ˆCØ—&‘&˜ Ó#×)Ñ)Ó+ˆCÙØ—>‘> $Ô'Ü"¤Y×%5Ñ%5°cÓ%:Ñ:¸SÑ@À3ÀqÀrÀ7ÑJ‘CØ—^‘^ CÔ(Ü" S™.‘CØŸ™¨Ô/Ü"¤Y×%5Ñ%5°cÓ%:Ñ:¸SÑ@À3ÑF�CØ—‘ c°#Ñ6Ô7Ø×$Ò$²CºÐ%=Ô>Ùà�>‰>˜'Ô" r§w¡w°'Ò'9Ùà�7‰7�gÒÜ)¨"¨cÓ2ˆHÙØ—‘˜XÔ&Ü˜‹}ˆÛØ—[‘[ ¨4�[Ó0ò 
i�Ø�f‘I—O‘OÓ%�Ø—:‘:ÐXÕYØ˜6™�BØ—}‘} TÔ*Ü%¬	×(8Ñ(8¸Ó(=Ñ=ÀÑCÀbÈÈÀfÑL™ØŸ™ sÔ+Ü%¨™]™ØŸ]™]¨6Ô2Ü%¬	×(8Ñ(8¸Ó(=Ñ=ÀÑCÀbÑH˜Ø×&Ñ&°·
±
À°
Ó0FÒ0[È"Ï(É(ÐSVË-ÐXZÑJ[ÐdfÑ'gÕhð
ið × Ñ  Ö&ðG#'ñJ Ø×Ñ˜UÔ#Ø�k‰kÑ@ ]Ô@Ó@€GØ I¸'ÈVÐdoÑpÐprA   c                  óö  — d} t        j                  t        d¬«      }|j                  «       }g }d}	 |dk(  rt        t
        z   dz   }nt        t
        z   d|z  z   }t        |«      }|st        d|z  t        j                  ¬«       nt        |«      }|st        d|z  t        j                  ¬«       nSt        d	|t        |«      fz  t        j                  ¬«       |j                  |«       t        r|d
z   t        k\  rn|d
z  }ŒÔt        dt        |«      z  t        j                  ¬«       t        |«      D �]d  \  }}	|	d   rd|	d   vrŒ|j                  d|	d   f«       |j!                  «       rŒ;t        |	d   «      }|sŒLt#        ||	d   «      }
|
d   xs |	d   }|
d   xs |	d   }|
d   }|
j%                  d«      rt'        j(                  |
d   d¬«      nd}|j+                  «       s |}t        d|z  t        j                  ¬«       |d d j-                  dd«      j+                  «       }	 |j                  d|	d   |t.        t0        |||||f	«       |j3                  «        | d
z  } | dz  dk(  r)t        d| t        |«      fz  t        j                  ¬«       �Œg |j7                  «        t        d | z  «       y # t4        $ r/}t        d|d d ›d|›�t        j                  ¬«       Y d }~�Œºd }~ww xY w)!Nr   é<   rb   z
index.htmlzindex_%d.htmlz([INFO] Page %d: empty response, stoppingrg   z([INFO] Page %d: no items found, stoppingz[INFO] Page %d: %d itemsr   z [INFO] Total collected: %d itemsrs   zgov.cnz'SELECT id FROM gov_raw WHERE page_url=?ry   r   r–   rœ   F)Úensure_asciiz[]z[WARN] Empty content: %séÈ   r5   ú z™INSERT OR IGNORE INTO gov_raw (page_url, title, site_name, group_name, publish_date, summary, content, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?,?)é
   z[INFO] Inserted %d/%dz[WARN] DB insert failed: ra   rf   z[DONE] Fuquan: %d new items)Úsqlite3ÚconnectÚDBÚcursorrƒ   r„   rv   rp   rq   rr   r‹   Úlenr¬   Ú_MAX_PGÚ	enumerateÚexecuteÚfetchoner¹   rW   ÚjsonÚdumpsrG   rd   Ú	SITE_NAMEÚ
GROUP_NAMEÚcommitro   Úclose)Ú	total_newÚconnÚcÚ	all_itemsÚpage_numrs   r†   rˆ   ÚidxÚitemÚdetailry   rŠ   r–   Úattachments_jsonÚsummaryru   s                    r@   r   r   ¶   sÏ  € Ø€IÜ�?‰?œ2 rÔ*€DØ�‰‹€Aà€IØ€HØ
Ø�qŠ=ÜœYÑ&¨Ñ5‰CäœYÑ&¨¸8Ñ)CÑCˆCä�S‹zˆÙÜÐ<¸xÑGÌcÏjÉjÕYØä˜dÓ#ˆÙÜÐ<¸xÑGÌcÏjÉjÕYØäÐ(¨H´c¸%³jÐ+AÑAÌÏ
É
ÕSØ×Ñ˜Ôå�x !‘|¤wÒ.ØØ�A‰ˆð+ ô. 
Ð
,¬s°9«~Ñ
=ÄCÇJÁJÕOä˜yÓ)ó  Y‰	ˆˆTØ�EŠ{˜h¨d°5©kÑ9Øà	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<Øä�T˜%‘[Ó!ˆÙØä˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØTZ×T^ÑT^Ð_lÔTmœ4Ÿ:™: f¨]Ñ&;È%ÕPÐswÐà�}‰}ŒØˆGÜÐ,¨uÑ4¼3¿:¹:ÕFà˜$˜3�-×'Ñ'¨¨cÓ2×8Ñ8Ó:ˆð	YØ�I‰Ið  rØ�e‘˜e¤Y´
¸IÀwÐPWÐYiÐktÐuôwà�K‰KŒMØ˜‰NˆIØ˜2‰~ Ò"ÜÐ-°¼CÀ	»NÐ0KÑKÔRU×R\ÑR\Õ]ùð= YðD 	‡J�J„LÜ	Ð
'¨)Ñ
3Õ4øô	 ò 	YÝ¸¸c¸rº
ÁAÐFÌSÏZÉZ×XÓXûð	Yús   È2A,K Ë 	K8Ë	$K3Ë3K8Ú__main__)r0   )$Ú__doc__rC   rq   ÚosÚurllib.requestr\   Úurllib.errorrD   r   rÀ   rƒ   r„   rË   ÚSITE_DISPLAYrÌ   ÚenvironrW   rÂ   rk   rÅ   rÆ   ÚargvÚirN   rÄ   rŽ   r;   rK   r^   rv   r‹   r‘   r¹   r   Ú__name__rÉ   © rA   r@   ú<module>rä      sê   ðá -ß Ó ß #Ý Û à(€Ø €	Ø$€	Ø&€Ø€
Ø‡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Ó&ˆÙðò*€òó6òòò*òHqòTC5ðJ ˆzÒÛÙ…Fð rA   