Ë
    ý&˜j*&  ã                   óú   — d Z ddlZddlZddlZddlmZ ddlZddlmZm	Z	 dZ
dZdZej                  j                  ej                  j                  e«      «      Zdd	iZdd
„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u³   
æ²­é˜³åŽ¿äººæ°‘æ”¿åºœ-ä¾¿æ°‘å…¬å‘Š çˆ¬è™«
UCAP CMS, shtml static pagination
List: /shuyang/bmgg/olist.shtml (p1), olist_N.shtml (N=2..43)
Detail: /shuyang/bmgg/YYYYMM/UUID.shtml
é    N)Úurljoin)ÚBeautifulSoupÚNavigableStringzhttp://www.shuyang.gov.cnz/shuyang/bmgg/olist.shtmlé+   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 ó  — t        d«      D ])  }	 t        j                  | t        |¬«      }d|_        |c S  y # t
        $ r<}|dk  rt        j                  d«       nt        d| › d|› �«       Y d }~ y Y d }~Œmd }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8é   z  [WARN] Failed ú: )	ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚ	ExceptionÚtimeÚsleepÚprint)Úurlr
   ÚattemptÚrÚes        ú"/root/gov_crawler/crawl_shuyang.pyÚsafe_getr      sz   € Ü˜“8ò 
ˆð		Ü—‘˜S¬'¸7ÔCˆAØ ˆAŒJØŠHñ	
øô
 ò 	Ø˜Š{Ü—
‘
˜1•äÐ(¨¨¨R°¨sÐ3Ô4Ýô ûð	ús   �$9¹	A>Á,A9Á9A>c           
      óð  — g }| j                   D �]­  }t        |dd«      }|dk(  r,|j                  t        |«      «       |j                  d«       ŒB|dv �r€|j	                  d«      D ]Q  }|j                  dd«      }|sŒt        ||«      }|j                  d	d«      xs d
}|j                  d|› d|› d�«       ŒS |j                  d«      }	|	rf|j                  t        |	«      «       |j                  d«       |j                  dd¬«      }
|
s�Œ|j                  |
«       |j                  d«       �Œ%t        |«      }t        j                  dd|t        j                  ¬«      }t        |d«      }|j                  dd¬«      }
|
r%t        j                  dd|
«      j                  «       nd}
|
s�Œ£|j                  |
«       |j                  d«       �ŒÇ|dk(  r.|j                  dd¬«      }
|
s�Œã|j                  d|
› d�«       �Œú|dk(  r.|j                  dd¬«      }
|
s�Œ|j                  d|
› d�«       �Œ-|dk(  rm|j                  dd«      }|j                  dd¬«      }|s�Œ[d|v sd|v sd|v sd|j                  «       v s�Œ{|j                  d|› dt        ||«      › d�«       �ŒŸ|d k(  rV|j	                  d!d"¬#«      D ]-  }|j                  dd¬«      }|sŒ|j                  d$|› d%�«       Œ/ |j                  d%«       �Œú|d&k(  rV|j	                  d!d"¬#«      D ]-  }|j                  dd¬«      }|sŒ|j                  d'|› d%�«       Œ/ |j                  d%«       �ŒU|€Qt        |«      j                  «       }|s�Œtt        |«      d(kD  s�Œ„|j                  |«       |j                  d«       �Œ¨|d)v s�Œ®�Œ° dj!                  |«      j                  «       }t        j                  d*d|«      }|S )+z0Extract structured content from UCAPCONTENT div.ÚnameNÚtableú

)ÚpÚdivÚimgÚsrcÚ ÚaltÚimagez![z](z)

ú T©Ústripz;</?(?:span|b|strong|font|em|i|u|s|sub|sup|small|mark)[^>]*>)Úflagsúhtml.parserz\s+Úh1z# Úh2z## ÚaÚhrefz.docz.pdfz.xlsÚuploadú[ÚulÚliF)Ú	recursivez- ú
Úolz  é   )ÚstyleÚscriptz\n{4,})ÚchildrenÚgetattrÚappendÚstrÚfind_allr   r   ÚfindÚget_textÚreÚsubÚIr   r)   ÚlowerÚlenÚjoin)Úucap_divÚpage_urlÚpartsÚchildr   r"   r#   Úfull_srcr%   Úinner_tableÚtxtÚ
child_htmlÚcleanr/   Útextr3   Úli_textÚtÚresults                      r   Úextract_ucap_contentrT   "   sœ  € à€Eà×"Ñ"ó EˆÜ�u˜f dÓ+ˆà�7Š?Ø�L‰Lœ˜U›Ô$Ø�L‰L˜Õ Ø�\Ò!à—~‘~ eÓ,ò >�Ø—g‘g˜e RÓ(�ÚÜ& x°Ó5�HØŸ'™' %¨Ó,Ò7°�CØ—L‘L 2 c U¨"¨X¨J°eÐ!<Õ=ð>ð  Ÿ*™* WÓ-ˆKÙØ—‘œS Ó-Ô.Ø—‘˜VÔ$à—n‘n S°�nÓ5�ÛØ—L‘L Ô%Ø—L‘L Ö(ô ! ›Z�
ÜŸV™VØRØ˜
¬"¯$©$ô�
ô & j°-Ó@�Ø—n‘n S°�nÓ5�Ù:=”b—f‘f˜V S¨#Ó.×4Ñ4Ô6À2�ÛØ—L‘L Ô%Ø—L‘L Ö(Ø�TŠ\Ø—.‘. ¨D�.Ó1ˆCÛØ—‘˜r #  d˜^Ö,Ø�TŠ\Ø—.‘. ¨D�.Ó1ˆCÛØ—‘˜s 3 % t˜_Ö-Ø�SŠ[Ø—9‘9˜V RÓ(ˆDØ—>‘> #¨T�>Ó2ˆDÛ˜ 4™¨6°T©>¸VÀt¹^ÈxÐ[_×[eÑ[eÓ[gÓOgØ—‘˜q   b¬°¸4Ó)@Ð(AÀÐGÖHØ�TŠ\Ø—n‘n T°U�nÓ;ò 3�ØŸ+™+ c°˜+Ó6�ÚØ—L‘L 2 g Y¨bÐ!1Õ2ð3ð �L‰L˜ÖØ�TŠ\Ø—n‘n T°U�nÓ;ò 3�ØŸ+™+ c°˜+Ó6�ÚØ—L‘L 2 g Y¨bÐ!1Õ2ð3ð �L‰L˜ÖØˆ\Ü�E“
× Ñ Ó"ˆAÛ”S˜“V˜a”ZØ—‘˜Q”Ø—‘˜VÖ$ØÐ(Ó(ÙðKEðN �W‰W�U‹^×!Ñ!Ó#€FÜ�V‰V�I˜v vÓ.€FØ€Mó    c                 ó@  — t        | «      }|syt        |j                  d«      }d}|j                  dd¬«      }|r|j	                  d¬«      }n)|j                  d	d
di¬«      }|r|j                  dd«      }d}|j                  d	d
di¬«      }|r[|j                  dd«      }t        j                  d|«      }	|	r1|	j                  d«      j                  dd«      j                  dd«      }|sj|j                  d«      }
|
rWt        j                  d|
j	                  «       «      }	|	r1|	j                  d«      j                  dd«      j                  dd«      }d}|j                  d«      }|rt        || «      }n!|j                  dd¬«      }|rt        || «      }|||fS )N)NNNr+   r$   r,   zarticle-title)Úclass_Tr(   Úmetar   ÚArticleTitle)ÚattrsÚcontentÚPubDatez!(\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2})é   ú/ú-ú.ÚpublishtimeÚucapcontentr!   Úzoomcon)Úid)r   r   rP   r?   r@   r   rA   ÚsearchÚgroupÚreplacerT   )r   r   ÚsoupÚtitler,   rX   ÚdateÚ	meta_dateÚdÚmÚpubr[   ÚucapÚzooms                 r   Úparse_detailrq   q   sŽ  € Ü�‹€AÙØä˜Ÿ™ Ó/€Dð €EØ	�‰�4 ˆÓ	0€BÙ	à—‘ $�Ó'‰ð �y‰y˜¨°Ð'?ˆyÓ@ˆÙØ—H‘H˜Y¨Ó+ˆEð €DØ—	‘	˜&¨°Ð(;�	Ó<€IÙØ�M‰M˜) RÓ(ˆÜ�I‰IÐ:¸AÓ>ˆÙØ—7‘7˜1“:×%Ñ% c¨3Ó/×7Ñ7¸¸SÓAˆDáØ�i‰i˜Ó&ˆÙÜ—	‘	Ð>ÀÇÁÃÓOˆAÙØ—w‘w˜q“z×)Ñ)¨#¨sÓ3×;Ñ;¸CÀÓE�ð €GØ�9‰9�]Ó#€DÙÜ& t¨SÓ1‰ð �y‰y˜ 9ˆyÓ-ˆÙÜ*¨4°Ó5ˆGà�'˜4ÐÐrU   c                 ó\  — t        | «      }|sg S t        |j                  d«      }g }|j                  dd¬«      D ]î  }|d   j	                  «       }t        j                  d|«      sŒ-|j                  d¬«      }t        |«      dk  rŒN|j                  d	«      rt        t        |«      }n|j                  d
«      st        | |«      }d}|j                  g d¢«      }|r7t        j                  d|j                  «       «      }	|	r|	j                  d«      }|j                  |||f«       Œð |S )Nr+   r.   T)r/   r/   z'/shuyang/bmgg/\d{6}/[a-f0-9]{32}\.shtmlr(   r7   r^   Úhttpr$   )r3   Úddr!   z(\d{4}-\d{1,2}-\d{1,2})r]   )r   r   rP   r>   r)   rA   Úmatchr@   rE   Ú
startswithr   ÚBASE_URLÚfind_parentre   rf   r<   )
r   r   rh   Úitemsr.   r/   ri   rj   Úparentrm   s
             r   Úparse_list_pager{   ¡   s  € Ü�‹€AÙØˆ	ä˜Ÿ™ Ó/€DØ€Eà�]‰]˜3 Tˆ]Ó*ò *ˆØ�‰y�‰Ó ˆä�x‰xÐBÀDÔIØà—
‘
 �
Ó&ˆÜˆu‹:˜Š>Øð �?‰?˜3ÔÜœ8 TÓ*‰DØ—‘ Ô(Ü˜3 Ó%ˆDð ˆØ—‘Ò2Ó3ˆÙÜ—	‘	Ð4°f·o±oÓ6GÓHˆAÙØ—w‘w˜q“z�à�‰�e˜T 4Ð(Õ)ð1*ð4 €LrU   c                  ó*  — dd l } ddt        j                  j                  t        d«      g}d }|D ]%  }t        j                  j                  |«      sŒ#|} n |sd}t        d«       g }t        dt        dz   «      D ]‘  }|dk(  rt        t        z   }nt        › d|› d�}t        d	|› d
t        › d|› �«       t        |«      }|st        d«        n@t        dt        |«      › d�«       |j                  |«       t        j                  d«       Œ“ t        dt        |«      › d�«       |sy t!        dd«      5 }|D ]!  \  }	}
}|j#                  d|› d|	› d|
› d�«       Œ# 	 d d d «       | j%                  |«      }|j'                  d«       |j'                  d«       d}d}d}d}t)        |«      D �]=  \  }\  }}}|j'                  d|f«      j+                  «       }|r|dz  }Œ4t-        |«      \  }}}|sN	 t/        |«      }|r@t1        |j2                  d«      }|j5                  d«      }|r|j5                  d«      rd|› d �}|s|dz  }t        d!|d d" › �«       Œ¬|xs |}|xs |}t        |«      d#kD  r|d d# n|}	 |j'                  d$|||||f«       |j7                  «        |dz  }|dz   d"z  dk(  r$t        d&|dz   › d
t        |«      › d'|› d(|› d)�	«       t        j                  d«       �Œ@ t        d*«       |j=                  «        t        d+«       t        d,|› d
t        |«      › d-�«       t        d.|› �«       t        d/|› �«       y # 1 sw Y   �ŒïxY w#  Y �ŒxY w# t8        $ r(}t        d%|› �«       |j;                  «        Y d }~Œæd }~ww xY w)0Nr   z/root/search.dbz/root/gov_crawler/search.dbz	search.dbu*   === æ²­é˜³åŽ¿äººæ°‘æ”¿åºœ-ä¾¿æ°‘å…¬å‘Š ===r]   z/shuyang/bmgg/olist_z.shtmlz  Fetching page r^   r   z    Empty, stoppingz
    Found z itemsgš™™™™™É?z

  Total: z items
z/tmp/shuyang_items.txtÚwr1   z] z
  r   zPRAGMA journal_mode=WALzPRAGMA synchronous=OFFu   æ²­é˜³åŽ¿-ä¾¿æ°‘å…¬å‘Šz)SELECT id FROM gov_raw WHERE page_url = ?r+   rb   r"   z<p><a href="z">Image-only article</a></p>z  [WARN] Empty: é2   i ¡ zhINSERT OR IGNORE INTO gov_raw (title, content, page_url, publish_date, site_name) VALUES (?, ?, ?, ?, ?)z  [DB ERROR] z  Progress: z (inserted=z
, skipped=ú)z
Rebuilding FTS...z)
========================================z
Inserted: z newzSkipped (already exist): zErrors (empty content): )Úsqlite3ÚosÚpathrF   Ú
SCRIPT_DIRÚexistsr   r   ÚTOTAL_PAGESrw   Ú	LIST_PATHr{   rE   Úextendr   r   ÚopenÚwriteÚconnectÚexecuteÚ	enumerateÚfetchonerq   r   r   rP   r?   Úcommitr   ÚrollbackÚclose)r€   Údb_pathsÚdb_pathr    Ú	all_itemsÚpager   ry   ÚfrR   Úhrl   ÚdbÚ	site_nameÚinsertedÚskippedÚerrorsÚidxri   r/   Ú	list_dateÚexistingÚdetail_titler[   Údetail_dater   rh   ro   Úfinal_titleÚ
final_dater   s                                  r   Úmainr£   Å   sÐ  € Ûà!Ð#@Ä"Ç'Á'Ç,Á,ÌzÐ[fÓBgÐh€HØ€GØò ˆÜ�7‰7�>‰>˜!ÕØˆGÙðñ Ø#ˆä	Ð6Ô8à€IÜ�aœ q™Ó)ò ˆØ�1Š9ÜœYÑ&‰Cä�JÐ2°4°&¸Ð?ˆCäÐ    a¬ }°B°s°eÐ<Ô=Ü Ó$ˆÙÜÐ'Ô)ÙÜ�
œ3˜u›:˜, fÐ-Ô.Ø×Ñ˜ÔÜ�
‰
�3�ðô 
ˆKœ˜I›Ð' xÐ
0Ô1áØô 
Ð&¨Ó	,ð -°Ø ò 	-‰GˆAˆq�!Ø�G‰G�a˜�s˜"˜Q˜C˜t A 3 dÐ+Õ,ñ	-÷-ð 
�‰˜Ó	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ'Ô(à(€IØ€HØ€GØ€Fä)2°9Ó)=ó *Ñ%ˆÑ%ˆe�T˜9Ø—:‘:ÐIÈDÈ7ÓS×\Ñ\Ó^ˆÙØ�q‰LˆGØä-9¸$Ó-?Ñ*ˆ�g˜{ÙðÜ˜T“N�ÙÜ(¨¯©°Ó?�DØŸ9™9 ]Ó3�DÙ §	¡	¨%Ô 0Ø$0°°Ð6RÐ"S˜ñ Ø�a‰KˆFÜÐ$ U¨3¨B Z LÐ1Ô2Øà"Ò+ eˆØ Ò- Iˆ
Ü&)¨'£l°VÒ&;�'˜'˜6Ñ"Àˆð		Ø�J‰JØzØ˜g t¨Z¸ÐCôð �I‰IŒKØ˜‰MˆHð
 �!‰G�r‰>˜QÒÜ�L  Q¡  q¬¨Y«Ð(8¸ÀHÀ:ÈZÐX_ÐW`Ð`aÐbÔcä�
‰
�3ŽðU*ôZ 
Ð
Ô ð ‡H�H„Jä	Ð6Ô8Ü	ˆJ�x�j ¤# i£.Ð!1°Ð
6Ô7Ü	Ð% g YÐ
/Ô0Ü	Ð$ V HÐ
-Õ.÷E-ñ -ûð:Úûô$ ò 	Ü�M ! Ð%Ô&Ø�K‰K�M‰Mûð	ús1   Ä7'MÇ3AMÉ;,M!ÍMÍMÍ!	NÍ*NÎNÚ__main__)é   )Ú__doc__rA   r   r�   Úurllib.parser   r   Úbs4r   r   rw   r†   r…   r‚   ÚdirnameÚabspathÚ__file__rƒ   r   r   rT   rq   r{   r£   Ú__name__© rU   r   ú<module>r®      s‡   ðñ÷ Ó Ý  Û ß .à&€Ø'€	Ø€Ø�W‰W�_‰_˜RŸW™WŸ_™_¨XÓ6Ó7€
ØÐWÐ
X€óòMò^. ò`"òHf/ðP ˆzÒÙ…Fð rU   