Ë
    ¸¬uj&  ã                   óœ  — 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
mZ ddlZ ej                  ej                  j                  «       dZdZdZdZd	Z ej*                  d
d«      ZddiZ ej0                  «       Zej4                  j7                  e«       de_        d„ Zdd„Zg d¢Zd„ Z d„ Z!d„ Z"d„ Z#e$dk(  r e#«        yy)uM  
è¥„æ±¾åŽ¿äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤ï¼ˆé‡�ç‚¹é¢†åŸŸä¿¡æ�¯å…¬å¼€ï¼‰
URL: http://www.xiangfen.gov.cn/channels/4322.html
CMS: TRS WCM
Note: è¯¥æ �ç›®ä¸ºè½¬è½½è�šå�ˆé¡µï¼Œå‰�15é¡µå…¨éƒ¨ä¸ºå¤–éƒ¨é“¾æŽ¥ï¼ˆmee.gov.cn/shanxi.gov.cn/å¾®ä¿¡ï¼‰ï¼Œ
      ç¬¬16é¡µæœ‰æœ¬åœ°é“¾æŽ¥ä½†URLå·²å¤±æ•ˆï¼ˆ404ï¼‰ã€‚æœ¬è„šæœ¬ä»…ä¿�å­˜æ ‡é¢˜+URL+æ—¥æœŸã€‚
é    N)ÚBeautifulSoup)Úurljoinzhttp://www.xiangfen.gov.cnu"   è¥„æ±¾åŽ¿äººæ°‘æ”¿åºœ-çŽ¯å¢ƒä¿�æŠ¤u   çŽ¯å¢ƒä¿�æŠ¤u   å±±è¥¿é   Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36Fc                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    ú&/root/gov_crawler/crawl_xiangfen_hb.pyÚlogr      s   € Ü	ˆ#”C—J‘J dÖ+ó    c           
      ó   — t        |«      D ].  }	 t        j                  | d¬«      }d|_        |j                  c S  y	# t
        $ r6}t        d|dz   › d|› d|› �«       t        j                  d«       Y d }~Œld }~ww xY w)
Né   ©Útimeoutúutf-8u     [WARN] è¯·æ±‚å¤±è´¥ (å°�è¯• é   ú/z): é   Ú )	ÚrangeÚsessionÚgetÚencodingÚtextÚ	Exceptionr   ÚtimeÚsleep)ÚurlÚretriesÚattemptÚrÚes        r   Úfetchr'   "   s€   € Ü˜“>ò ˆð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØ—6‘6ŠMð	ð øô ò 	ÜÐ0°¸±°¸1¸W¸IÀSÈÈÐLÔMÜ�J‰J�q�M‰Mûð	ús   �)>¾	A=Á,A8Á8A=))ÚdivÚ
TRS_EditorN)r(   ÚCustom_UnionStyleN)r(   Úneiright_JPZ_GK_CPN)r(   Úneiright_ContentN)r(   ÚinnerBgN)r(   ÚcontentN)r(   ÚwenzhangN)r(   Úpages_contentN)r(   zUCAP-CONTENTN)r(   ÚdetailN)r(   ÚarticleN)r(   zmain-contentN)r(   r   N)r(   ÚconN)r(   Nr.   )r(   NÚmain)r(   Nr2   )r2   NNc           	      ó¬  — 	 t        j                  | t        dd¬«      }d|_        t        |j                  d«      } |g d	¢«      D ]  }|j                  «        Œ d}t        D ]G  \  }}}|r|j                  ||¬
«      }n'|r|j                  ||¬«      }n|j                  |«      }|sŒG n |sd|j                  d«      }|rQ|j                  d«      D �	cg c]5  }	t        |	j                  dd¬«      «      dkD  sŒ#|	j                  dd¬«      ‘Œ7 }
}	|}|�r%|j                  d«      }
|
rA|
D �	cg c]5  }	t        |	j                  dd¬«      «      dkD  sŒ#|	j                  dd¬«      ‘Œ7 }}	n\|j                  dd¬«      }|j                  d«      D �cg c]/  }t        |j                  «       «      dkD  sŒ |j                  «       ‘Œ1 }}g }|D ]K  }	t!        j"                  d|	«      rŒd|	v rd|	v rŒ#d|	v rt        |	«      dk  rŒ6|	|v rŒ;|j%                  |	«       ŒM |r!dj'                  |«      }t        |«      dkD  r|S |j                  d«      D �	cg c]5  }	t        |	j                  dd¬«      «      dkD  sŒ#|	j                  dd¬«      ‘Œ7 }
}	|
rdj'                  |
«      S y# t        $ r}t        d|› �«       Y d}~yd}~ww xY wc c}	w c c}	w c c}w c c}	w )u'   å°�è¯•èŽ·å�–å¤–éƒ¨é“¾æŽ¥çš„æ­£æ–‡å†…å®¹r   F)Úheadersr   Úverifyr   u%       [WARN] å¤–éƒ¨é“¾æŽ¥è¯·æ±‚å¤±è´¥: Nr   úhtml.parser)ÚscriptÚstyleÚnavÚheaderÚfooterÚaside©Úclass_)ÚidÚbodyÚpT©Ústripé   ú
u®   ^(ç‰ˆæ�ƒæ‰€æœ‰|ICPå¤‡æ¡ˆ|ç½‘ç«™æ ‡è¯†ç �|äº¬å…¬ç½‘å®‰å¤‡|ç½‘ç«™å£°æ˜Ž|ç½‘ç«™åœ°å›¾|è�”ç³»æˆ‘ä»¬|æ‰‹æœºç‰ˆ|ä¸­å›½æ”¿åºœç½‘|å›½åŠ¡é™¢éƒ¨é—¨|æ‰“å�°|å­—å�·|[\[\]ã€�ã€‘å¤§ä¸­å°�])u   ç‰ˆæ�ƒæ‰€æœ‰u	   ICPå¤‡æ¡ˆu	   æ�¥æº�ï¼šú

é2   é   )Úrequestsr   ÚHEADERSr   r   r   r   r   Ú	decomposeÚCONTENT_SELECTORSÚfindÚfind_allÚlenÚget_textÚsplitrE   ÚreÚmatchÚappendÚjoin)r"   r%   r&   ÚsoupÚtagÚcontent_divÚclsÚid_rB   rC   ÚparasÚpartsr   ÚsÚclean_partsr.   s                   r   Úfetch_external_contentra   E   sÛ  € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
ô
 ˜Ÿ™ Ó/€Dñ ÒKÓLò ˆØ�‰�ðð €KÜ*ò ‰ˆˆS�#ÙØŸ)™) C°˜)Ó4‰KÙØŸ)™) C¨C˜)Ó0‰KàŸ)™) C›.ˆKÚÙðñ à�y‰y˜Ó ˆÙØ9=¿¹ÀsÓ9KÖs°AÌsÐST×S]ÑS]Ð^`ÐhlÐS]ÓSmÓOnÐqrÓOr�Q—Z‘Z ¨$�ZÕ/ÐsˆEÐsØˆKâà×$Ñ$ SÓ)ˆÙØ9>Öf°AÄ#ÀaÇjÁjÐQSÐ[_ÀjÓF`ÓBaÐdeÓBe�Q—Z‘Z ¨$�ZÕ/ÐfˆEÑfð ×'Ñ'¨°$Ð'Ó7ˆDØ(,¯
©
°4Ó(8ÖO 1¼CÀÇÁÃ	»NÈQÓ<N�Q—W‘W•YÐOˆEÐOàˆØò 		"ˆAÜ�x‰xð  Jð  LMô  NØØ Ñ" {°aÑ'7ØØ˜aÑ¤C¨£F¨R¢KØØ�KÑØØ×Ñ˜qÕ!ð		"ñ Ø—k‘k +Ó.ˆGÜ�7‹|˜bÒ Ø�ð 26·±¸sÓ1CÖl¨AÄsÈ1Ï:É:ÐVXÐ`dÈ:ÓKeÓGfÐikÓGkˆQ�Z‰Z˜ $ˆZÕ'Ðl€EÐlÙØ�{‰{˜5Ó!Ð!àøôy ò ÜÐ3°A°3Ð7Ô8Üûðüò4 tùò gùò Pùò& msG   ‚$J Ã$KÃ:KÄ-$KÅKÆ!KÆ2KÉ$KÉ3KÊ	J?Ê'J:Ê:J?c                 ó  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]Ñ  }|j                  dd¬«      }|r|j                  d«      sŒ*|j                  d«      }|j                  dd	¬«      }|j                  d«      xs |j	                  d
¬«      }|j                  dd«      }	|r|j	                  d
¬«      nd}
|sŒž|	sŒ¡|j                  t        t        |	«      |j                  «       |
dœ«       ŒÓ |S )u'   ä»Žåˆ—è¡¨é¡µè§£æž�æ ‡é¢˜ã€�æ—¥æœŸã€�URLr8   r(   r3   r?   ÚulÚliÚtitleÚar    TrD   Úhrefr   )r"   re   Údate)	r   rO   rP   r   rR   rV   r   ÚBASErE   )ÚhtmlÚitemsrX   r3   rc   Úli_titlerf   Úli_timere   rg   Údate_strs              r   Úparse_list_pagero   ‰   sÿ   € à€EÜ˜˜}Ó-€DØ
�)‰)�E %ˆ)Ó
(€CÙØˆØ�l‰l˜4Ó ò ˆØ—7‘7˜4¨�7Ó0ˆÙ˜xŸ}™}¨SÔ1ØØ�M‰M˜#ÓˆØ—'‘'˜$ v�'Ó.ˆØ—‘�g“Ò8 !§*¡*°4 *Ó"8ˆØ�u‰u�V˜RÓ ˆÙ3:�7×#Ñ#¨$Ð#Ô/ÀˆÚ’TØ�L‰LÜœt TÓ*ØŸ™›Ø ñõ ðð €Lr   c           
      óX  — 	 t        j                  t        d¬«      }| j                  d«      xs dd d }| j                  d«      xs dd d }| j                  d«      xs d}| j                  d	«      xs dd d
 }| j                  d«      xs dd d }t	        j
                  | j                  d«      xs g d¬«      }|j                  d|f«      j                  «       }|D ]  \  }	|j                  d|	f«       Œ |j                  d|||||||f«       |j                  d«      j                  «       d   }
|r|d d n|d d }|j                  d|
|||f«       |j                  «        |j                  «        t        d|d d › �«       y# t        $ r}t        d|› �«       Y d }~yd }~ww xY w)Né
   r   re   r   iô  Úpage_urliè  r.   Úpublish_dateé   Ú	site_nameÚunknownéd   ÚattachmentsF)Úensure_asciiz,SELECT rowid FROM gov_raw WHERE page_url = ?z&DELETE FROM gov_search WHERE rowid = ?zšINSERT OR REPLACE INTO gov_raw (title, page_url, content, publish_date, site_name, source_url, status, attachments) VALUES (?, ?, ?, ?, ?, ?, 'synced', ?)zSELECT last_insert_rowid()r   zWINSERT OR REPLACE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)u     âœ… r   Tz  [ERR] DB import failed: )Úsqlite3ÚconnectÚDB_PATHr   ÚjsonÚdumpsÚexecuteÚfetchallÚfetchoneÚcommitÚcloser   r   )ÚrecordÚdbre   rr   r.   rs   ru   Úattachments_strÚ
old_rowidsÚridÚ	new_rowidÚsummaryr&   s                r   Úimport_to_dbr‹   ¢   sµ  € ðÜ�_‰_œW¨bÔ1ˆØ—‘˜GÓ$Ò*¨¨D¨SÐ1ˆØ—J‘J˜zÓ*Ò0¨b°%°4Ð8ˆØ—*‘*˜YÓ'Ò-¨2ˆØŸ
™
 >Ó2Ò8°b¸#¸2Ð>ˆØ—Z‘Z Ó,Ò9°	¸4¸CÐ@ˆ	ÜŸ*™* V§Z¡Z°Ó%>Ò%DÀ"ÐSXÔYˆà—Z‘ZÐ NÐQYÐP[Ó\×eÑeÓgˆ
Ø ò 	I‰FˆSØ�J‰JÐ?À#ÀÕHð	Ið 	�
‰
ð iØ�H˜g |°YÀÈ/ÐZô	
ð —J‘JÐ;Ó<×EÑEÓGÈÑJˆ	Ù#*�'˜$˜3‘-°°d°s°ˆØ
�
‰
ÐlØ˜u i°Ð9ô	;à
�	‰	ŒØ
�‰Œ
Üˆf�U˜3˜B�Z�LÐ!Ô"ØøÜò ÜÐ(¨¨Ð,Ô-Üûðús   ‚FF Æ	F)ÆF$Æ$F)c                  ó   — dd l } | j                  «       }|j                  dt        dd¬«       |j	                  «       }t        |j                  t        «      }d}t        d|dz   «      D �]Ç  }|dk(  r	t        › d�nt        › d|› d	�}t        d
|› d|› �«       t        |«      }|s �nŒt        |«      }|st        d«        �nqt        dt        |«      › d�«       t        |d«      D �]F  \  }	}
|
d   }t        d|	› dt        |«      › d|
d   d d › �«       d|v }|s>t        |«      }|rt        |«      dk  rd|› �}|
d   ||
d   |g t         t"        t$        dœ}n­t        |«      }|rd|d d v sd|v rd|› �}nrt'        |d«      }|j)                  dd¬ «      }|rL|j+                  d!dgd"¬#«      D �cg c]  }|j-                  d$d%¬&«      ‘Œ }}d'j/                  d(„ |D «       «      }nd)|› �}|
d   ||
d   |g t         t"        t$        dœ}t1        |«      }|r|dz  }t3        j4                  d*«       �ŒI �ŒÊ t        d+t         › d,|› d�«       y c c}w )-Nr   z--pagesrF   u,   çˆ¬å�–å‰�Né¡µï¼ˆå…±16é¡µï¼Œæ¯�é¡µçº¦20æ�¡ï¼‰)ÚtypeÚdefaultÚhelpr   z/channels/4322.htmlz/channels/4322_z.htmlu   ðŸ“„ åˆ—è¡¨[page=z]: u     â†’ æ— æ›´å¤šæ•°æ�®u     â†’ u    æ�¡r"   z  (r   z) re   é(   zxiangfen.gov.cnrI   u   [è½¬è½½] åŽŸæ–‡é“¾æŽ¥ï¼šrh   )re   rr   rs   r.   rx   ru   ÚcolumnÚprovinceÚ404zPage Not Foundu'   [æœ¬åœ°é“¾æŽ¥å·²å¤±æ•ˆ] åŽŸæ–‡é“¾æŽ¥ï¼šr8   r(   r.   r?   rC   F)Ú	recursiver   TrD   rH   c              3   ó>   K  — | ]  }t        |«      d kD  sŒ|–— Œ y­w)é   N)rQ   )Ú.0rC   s     r   ú	<genexpr>zmain.<locals>.<genexpr>÷   s   è ø€ Ò-M°AÄ#ÀaÃ&È1Ã*¬aÑ-Mùs   ‚–u$   [æ— æ³•è§£æž�æ­£æ–‡] åŽŸæ–‡é“¾æŽ¥ï¼šg      à?u   
âœ… u    çˆ¬å�–å®Œæˆ�ï¼Œå…±å…¥åº“ )ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚminÚpagesÚTOTAL_PAGESr   ri   r   r'   ro   rQ   Ú	enumeratera   ÚSITEÚCOLUMNÚPROVINCEr   rO   rP   rR   rW   r‹   r    r!   )r™   ÚparserÚargsÚtotal_pagesÚcountÚpagerr   rj   rk   ÚidxÚitemr"   Úis_localr.   r„   Údetail_htmlrX   rZ   rC   r^   Úoks                        r   r4   r4   Á   s¥  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QØKð ô Mà×ÑÓ€Dä�d—j‘j¤+Ó.€KØ€Eä�a˜ q™Ó)ó >ˆØ37¸1²9”d�VÐ.Ñ/ÄTÀFÈ/ÐZ^ÐY_Ð_dÐBeˆÜÐ ˜v S¨¨
Ð3Ô4Ü�X‹ˆÙÚÜ Ó%ˆÙÜÐ'Ô)ÚÜˆf”S˜“Z�L Ð%Ô&ä" 5¨!Ó,ó 2	‰IˆC�Ø�u‘+ˆCÜ�#�c�U˜!œC ›J˜< r¨$¨w©-¸¸Ð*<Ð)=Ð>Ô?ð )¨CÐ/ˆHáä0°Ó5�Ù¤# g£,°Ò"3Ø 8¸¸Ð>�Gà! '™]Ø #Ø$(¨¡LØ&Ø#%Ü!%Ü$Ü (ñ	‘ô $ C›j�Ù" e¨{¸3¸BÐ/?Ñ&?ÐCSÐWbÑCbØ GÈÀuÐM‘Gä(¨°mÓD�DØ"&§)¡)¨E¸) )Ó"D�KÙ"ØEP×EYÑEYÐ[^Ð`eÐZfÐrwÐEYÓExÖ yÀ §¡¨B°d Õ!;Ð y˜Ð yØ"(§+¡+Ñ-M¸Ô-MÓ"M™à$HÈÈÐ"N˜ð " '™]Ø #Ø$(¨¡LØ&Ø#%Ü!%Ü$Ü (ñ	�ô ˜fÓ%ˆBÙØ˜‘
�Ü�J‰J�sŽOòe2	ð>ô@ ˆ&”�Ð0°°°tÐ<Õ=ùò+ !zs   Æ0IÚ__main__)r–   )%Ú__doc__r   ÚosrT   r}   r    rz   rK   Úbs4r   Úurllib.parser   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningri   r¢   r£   r¤   r    Úgetenvr|   rL   ÚSessionr   r6   Úupdater7   r   r'   rN   ra   ro   r‹   r4   Ú__name__© r   r   ú<module>r½      sÛ   ðñ÷ (× '× 'Û Ý Ý  Û Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà#€Ø+€Ø	€Ø€Ø€à
ˆ"�)‰)�KÐ!2Ó
3€àÐWÐ
X€Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ Ø€„ò,ó	òÐ ò,AòHò2ò>J>ðZ ˆzÒÙ…Fð r   