Ë
    ý&˜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
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˜   
æ±Ÿè‹�ç´¢æ™®é›†å›¢-çŽ¯å¢ƒä¿¡æ�¯ çˆ¬è™«
Custom PHP CMS, static HTML
List: /list/8-40-N.html (N=2..9), page 1 is wrong URL
Detail: /info/8-40-XXXXX.html
é    N)Úurljoin)ÚBeautifulSoupÚNavigableStringzhttp://www.sopo.com.cnz
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_sopo.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k(  rf|j	                  d«      }|r|j                  t        |«      «       n&|j                  dd¬«      }|r|j                  |«       |j                  d«       Œ­|d	v �rù|j	                  d«      }|rág }|j                   D ]™  }t        |dd«      dk(  r,|j                  t        |«      «       |j                  d«       Œ?t        |d
«      r|j                  dd¬«      nt        |«      j                  «       }|sŒzt        |«      dkD  sŒ‰|j                  |«       Œ› |s�Œs|j                  dj                  |«      «       |j                  d«       �Œ¦t        |«      }	t        j                  dd|	t        j                  ¬«      }	t        |	d«      }
|
j                  dd¬«      }|r%t        j                  dd|«      j                  «       nd}|j                  d«      D ]O  }|j                  dd«      }|sŒ|j                  dd«      xs d}|j                  d|› dt!        ||«      › d�«       ŒQ |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(  rq|j                  dd«      Š|j                  dd¬«      }d‰j#                  «       v st%        ˆfd „d!D «       «      s�Œc|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(«       �Œ=|€Qt        |«      j                  «       }|s�Œ\t        |«      d+kD  s�Œl|j                  |«       |j                  d«       �Œ�|d,k(  s�Œ—�Œ™ dj                  |«      j                  «       }t        j                  d-d|«      }t        j                  d.d*|«      }|S )/zEExtract content from #my-info div, preserving tables and attachments.ÚnameNÚtableú

Úcenterú T©Ústrip)ÚpÚdivÚget_textr   z;</?(?:span|b|strong|font|em|i|u|s|sub|sup|small|mark)[^>]*>Ú )Úflagsúhtml.parserz\s+ÚimgÚsrcÚaltÚimagez![z](z)

Úh1z**z**

Úh2z## ÚaÚhrefÚuploadc              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)ÚlowerÚendswith)Ú.0r   r0   s     €r   ú	<genexpr>z,extract_content_from_info.<locals>.<genexpr>d   s"   øè ø€ Ò.|ÈA¨t¯z©z«|×/DÑ/DÀQ×/GÑ.|ùs   ƒ),)z.docz.docxz.pdfz.xlsz.xlsxú[ÚulÚliF)Ú	recursivez- ú
Úolz  é   Ústylez\n{4,}z {3,})ÚchildrenÚgetattrÚappendÚstrÚfindr%   Úhasattrr"   ÚlenÚjoinÚreÚsubÚIr   Úfind_allr   r   r3   Úany)Úinfo_divÚpage_urlÚpartsÚchildr   Úinner_tableÚtÚ	txt_partsrH   Ú
child_htmlÚcleanÚtxtr)   r*   r+   Útextr9   Úli_textÚresultr0   s                      @r   Úextract_content_from_inforY   !   sc  ø€ à€Eà×"Ñ"ó SˆÜ�u˜f dÓ+ˆà�7Š?Ø�L‰Lœ˜U›Ô$Ø�L‰L˜Õ Ø�XÒØŸ*™* WÓ-ˆKÙØ—‘œS Ó-Õ.à—N‘N 3¨d�NÓ3�ÙØ—L‘L ”OØ�L‰L˜Õ Ø�\Ò!ØŸ*™* WÓ-ˆKÙà�	Ø Ÿ>™>ò 0�CÜ˜s F¨DÓ1°WÒ<ØŸ™¤S¨£XÔ.ØŸ™ VÕ,ä=DÀSÈ*Ô=U˜CŸL™L¨°D˜LÔ9Ô[^Ð_bÓ[c×[iÑ[iÓ[k˜Ú¤ Q£¨!£Ø%×,Ñ,¨QÕ/ð0ó Ø—L‘L §¡¨)Ó!4Ô5Ø—L‘L Ö(ô ! ›Z�
ÜŸV™VØRØ˜
¬"¯$©$ô�
ô & j°-Ó@�Ø—n‘n S°�nÓ5�Ù:=”b—f‘f˜V S¨#Ó.×4Ñ4Ô6À2�ð !Ÿ>™>¨%Ó0ò P�CØŸ'™' %¨Ó,�CÚØ!Ÿg™g e¨RÓ0Ò;°G˜ØŸ™ r¨#¨¨b´¸À3Ó1GÐ0HÈÐ%NÕOð	Pó Ø—L‘L Ô%Ø—L‘L Ö(Ø�TŠ\Ø—.‘. ¨D�.Ó1ˆCÛØ—‘˜r #  fÐ-Ö.Ø�TŠ\Ø—.‘. ¨D�.Ó1ˆCÛØ—‘˜s 3 % t˜_Ö-Ø�SŠ[Ø—9‘9˜V RÓ(ˆDØ—>‘> #¨T�>Ó2ˆDØ˜4Ÿ:™:›<Ñ'¬3Ó.|ÐQ{Ô.|Ö+|Ø—‘˜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Ö$Ø�WŒ_ÙðgSðj �W‰W�U‹^×!Ñ!Ó#€FÜ�V‰V�I˜v vÓ.€FÜ�V‰V�H˜d FÓ+€FØ€Mó    c                 óÐ  — t        | «      }|syt        |j                  d«      }d}|j                  dd¬«      }|r|j	                  d¬«      }d}|j                  dd	¬«      }|rGt        j                  d
|j	                  «       «      }|r!|j                  d«      j                  dd«      }|j                  dd¬«      }d}	|rt        || «      }	n|j	                  dd¬«      }	||	|fS )N)NNNr(   r&   r$   zmy-title©Úclass_Tr!   z	my-authorz!(\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2})é   ú/ú-zmy-info)Úidr   )
r   r   rV   rC   r%   rG   ÚsearchÚgroupÚreplacerY   )
r   r   ÚsoupÚtitleÚmtÚdateÚmaÚmÚinfoÚcontents
             r   Úparse_detailrm      sä   € Ü�‹€AÙØä˜Ÿ™ Ó/€Dð €EØ	�‰�5 ˆÓ	,€BÙ	Ø—‘ $�Ó'ˆð €DØ	�‰�5 ˆÓ	-€BÙ	Ü�I‰IÐ:¸B¿K¹K»MÓJˆÙØ—7‘7˜1“:×%Ñ% c¨3Ó/ˆDð �9‰9�U˜yˆ9Ó)€DØ€GÙÜ+¨D°#Ó6‰à—-‘- ¨d�-Ó3ˆà�'˜4ÐÐrZ   c                 óz  — t        | «      }|sg S t        |j                  d«      }g }|j                  dd¬«      D ]ý  }|j	                  d«      }|sŒ|j                  d¬«      }|d   j                  «       }t        |«      d	k  rŒK|j                  d
«      rt        t        |«      }n|j                  d«      st        | |«      }d}|j	                  d«      }	|	r|	j                  d¬«      }|s7t        j                  d|j                  «       «      }
|
r|
j                  d«      }|j                  |||f«       Œÿ |S )Nr(   ÚdlÚclearfixr\   zdd .title a[href]Tr!   r0   r   r_   Úhttpr&   zdd .title p:last-childz(\d{4}-\d{1,2}-\d{1,2})r^   )r   r   rV   rJ   Ú
select_oner%   r"   rE   Ú
startswithr   ÚBASE_URLrG   rb   rc   rA   )r   r   re   Úitemsro   r/   rf   r0   rh   Údate_prj   s              r   Úparse_list_pagerw   ž   s&  € Ü�‹€AÙØˆ	ä˜Ÿ™ Ó/€DØ€Eà�m‰m˜D¨ˆmÓ4ò *ˆØ�M‰MÐ-Ó.ˆÙØØ—
‘
 �
Ó&ˆØ�‰y�‰Ó ˆäˆu‹:˜Š>Øð �?‰?˜3ÔÜœ8 TÓ*‰DØ—‘ Ô(Ü˜3 Ó%ˆDð ˆØ—‘Ð7Ó8ˆÙØ—?‘?¨�?Ó.ˆDÙÜ—	‘	Ð4°b·k±k³mÓDˆAÙØ—w‘w˜q“z�à�‰�e˜T 4Ð(Õ)ð5*ð8 €LrZ   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|› �«       t        |«      }t        dt        |«      › d	�«       |j                  |«       t        d
d«      D ]w  }t        › d|› d�}t        d|› d|› �«       t        |«      }|st        d«        n@t        dt        |«      › d	�«       |j                  |«       t        j                  d«       Œy t        dt        |«      › d�«       |st        d«       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  }Œ3t)        |«      \  }}}|s)|dz  }|d kD  rt        d!«        n§t        d"|d d# › �«       Œm|xs |}|xs |}t        |«      d$kD  r|d d$ n|}	 |j#                  d%|||||f«       |j+                  «        |dz  }|dz   dz  dk(  r$t        d'|dz   › d(t        |«      › d)|› d*|› d+�	«       t        j                  d«       �Œ t        d,«       |j1                  «        t        d-«       t        d.|› d(t        |«      › d/�«       t        d0|› �«       t        d1|› �«       y # 1 sw Y   �Œ°xY w# t,        $ r(}t        d&|› �«       |j/                  «        Y d }~ŒÞd }~ww xY w)2Nr   z/root/search.dbz/root/gov_crawler/search.dbz	search.dbu'   === æ±Ÿè‹�ç´¢æ™®é›†å›¢-çŽ¯å¢ƒä¿¡æ�¯ ===z/list/8-40-2.htmlz  Fetching page 2: z
    Found z itemsr   é
   z/list/index/id/8-40-2/m/Home/p/z.htmlz  Fetching page r   z    Empty, stoppingg333333Ó?z

  Total: z items
zNo items found.z/tmp/sopo_items.txtÚwr7   z] z
  r   zPRAGMA journal_mode=WALzPRAGMA synchronous=OFFu   æ±Ÿè‹�ç´¢æ™®é›†å›¢-çŽ¯å¢ƒä¿¡æ�¯z)SELECT id FROM gov_raw WHERE page_url = ?r^   r=   z  Too many errors, stoppingz  [WARN] Empty content: é2   i ¡ zhINSERT OR IGNORE INTO gov_raw (title, content, page_url, publish_date, site_name) VALUES (?, ?, ?, ?, ?)z  [DB ERROR] z  Progress: r_   z (inserted=z
, skipped=ú)z
Rebuilding FTS...z)
========================================z
Inserted: z newz	Skipped: zErrors: )Úsqlite3ÚosÚpathrF   Ú
SCRIPT_DIRÚexistsr   rt   rw   rE   Úextendr   r   r   ÚopenÚwriteÚconnectÚexecuteÚ	enumerateÚfetchonerm   Úcommitr   ÚrollbackÚclose)r}   Údb_pathsÚdb_pathr#   Ú	all_itemsÚurl2ru   r   ÚfrQ   ÚhÚdÚdbÚ	site_nameÚinsertedÚskippedÚerrorsÚidxrf   r0   Ú	list_dateÚexistingÚdetail_titlerl   Údetail_dateÚfinal_titleÚ
final_dater   s                               r   ÚmainrŸ   Ä   sÅ  € Ûà!Ð#@Ä"Ç'Á'Ç,Á,ÌzÐ[fÓBgÐh€HØ€GØò ˆÜ�7‰7�>‰>˜!ÕØˆGÙðñ Ø#ˆä	Ð3Ô5ð €Iô ˆZÐ(Ð)€DÜ	Ð ˜vÐ
&Ô'Ü˜DÓ!€EÜ	ˆJ”s˜5“z�l &Ð
)Ô*Ø×Ñ�UÔô �1�b‹\ò 	ˆÜ�
Ð9¸!¸¸EÐBˆÜÐ    2 c UÐ+Ô,Ü Ó$ˆÙÜÐ'Ô)ÙÜ�
œ3˜u›:˜, fÐ-Ô.Ø×Ñ˜ÔÜ�
‰
�3�ð	ô 
ˆKœ˜I›Ð' xÐ
0Ô1áÜÐÔ Øô 
Ð# SÓ	)ð -¨QØ ò 	-‰GˆAˆq�!Ø�G‰G�a˜�s˜"˜Q˜C˜t A 3 dÐ+Õ,ñ	-÷-ð 
�‰˜Ó	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ'Ô(à1€IØ€HØ€GØ€Fä)2°9Ó)=ò "Ñ%ˆÑ%ˆe�T˜9Ø—:‘:ÐIÈDÈ7ÓS×\Ñ\Ó^ˆÙØ�q‰LˆGØä-9¸$Ó-?Ñ*ˆ�g˜{ÙØ�a‰KˆFØ˜ŠzÜÐ3Ô4ÙÜÐ,¨U°3°B¨Z¨LÐ9Ô:Øà"Ò+ 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ŽðE"ôJ 
Ð
Ô ð ‡H�H„Jä	Ð6Ô8Ü	ˆJ�x�j ¤# i£.Ð!1°Ð
6Ô7Ü	ˆI�g�YÐ
Ô Ü	ˆH�V�HÐ
Õ÷u-ñ -ûôP ò 	Ü�M ! Ð%Ô&Ø�K‰K�M‰Mûð	ús$   Å,'MÉ1,MÍMÍ	N ÍM;Í;N Ú__main__)é   )Ú__doc__rG   r   r~   Úurllib.parser   r   Úbs4r   r   rt   r   ÚdirnameÚabspathÚ__file__r€   r   r   rY   rm   rw   rŸ   Ú__name__© rZ   r   ú<module>rª      s|   ðñ÷ Ó Ý  Û ß .à#€Ø�W‰W�_‰_˜RŸW™WŸ_™_¨XÓ6Ó7€
àÐWÐ
X€óò\ò| ò>$òLeðN ˆzÒÙ…Fð rZ   