Ë
    ¸¬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Z
 ee
j                  «      dkD  r2e
j                  d   j                  «       r ee
j                  d   «      ndZe� ed ee«      z   «       dZdZdZ ej*                  d	d
«      ZdZddiZdZdddddœZd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)u&  
crawl_xjss.py â€” é„¯å–„åŽ¿äººæ°‘æ”¿åºœç½‘-ç”Ÿæ€�çŽ¯ä¿�
CMS: UCAP (æ•°èž�å¹³å�°)
åˆ—è¡¨: /ssx/c106105/list.shtml (ç¬¬1é¡µ), /ssx/c106105/list_{N}.shtml (ç¬¬2é¡µèµ·)
è¯¦æƒ…: div.content > div.contentbox > ucapcontent
åˆ†é¡µ: 15æ�¡/é¡µ, JSå�‚æ•° createPageHTML('page_div',5,1,'list','shtml',69)
é    N)ÚBeautifulSoupé   z[AutoPg] max_pages=zhttp://www.xjss.gov.cnz/ssx/c106105/list.shtmlz/ssx/c106105/list_{}.shtmlÚ	SEARCH_DBz/root/search.dbu%   é„¯å–„åŽ¿äººæ°‘æ”¿åºœç½‘-ç”Ÿæ€�çŽ¯ä¿�z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36éE   )ÚnewÚskipÚemptyÚerrorsc                 ó’   — 	 t        j                  | t        d¬«      }d|_        |j                  dk(  r|j
                  S 	 y #  Y y xY w)Né   )ÚheadersÚtimeoutzutf-8éÈ   )ÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtext)ÚurlÚrs     ú/root/gov_crawler/crawl_xjss.pyÚfetchr   !   sL   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ—6‘6ˆMð  ð øðØØús   ‚=A ÁAc                 ó  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  d«      D ]Ð  }|j                  d«      }|sŒ|j                  dd«      }|j                  d	d«      xs |j	                  d
¬«      }|j                  d«      }|r|j	                  d
¬«      nd}	|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  |||	f«       ŒÒ |S )u2   è§£æž�åˆ—è¡¨é¡µï¼Œè¿”å›ž [(url, title, date), ...]úhtml.parserÚdivÚ	list_rbox©Úclass_ÚliÚaÚhrefÚ ÚtitleT©ÚstripÚspanú/Úhttp)	r   ÚfindÚfind_allr   Úget_textÚ
startswithÚBASE_URLÚlstripÚappend)
ÚhtmlÚsoupÚitemsÚulr    r!   r"   r$   r'   Údates
             r   Ú
parse_listr6   ,   sû   € ä˜˜}Ó-€DØ€EØ	�‰�5 ˆÓ	-€BÙØˆØ�k‰k˜$Óò *ˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�?‰?˜3ÔÜ˜d‘?‰DØ—‘ Ô(Ü˜c‘> D§K¡K°Ó$4Ñ4ˆDØ�‰�d˜E 4Ð(Õ)ð*ð €Ló    c                 ó&  — t        | d«      }d}d}d}g }|j                  d«      }|r|j                  d¬«      }|s%|j                  d«      }|r|j                  d¬«      }|sC|j                  d«      }	|	r0|	j                  d¬«      j                  dd«      j	                  «       }|j                  d	«      }
|
r|
j                  d¬«      }|s:|j                  d
ddi¬«      }|r#|j                  dd«      j	                  «       dd }|j                  d«      }|�r~g }|j                  D �]5  }t        |d«      rï|j                  }|dk(  r!|j                  dt        |«      z   dz   «       ŒB|dk(  rW|j                  dd«      }|j                  dd«      }|j                  d«      r	t        |z   }|j                  d|› d|› d�«       Œž|dv r6|j                  dd¬«      j	                  «       }|sŒÆ|j                  |«       ŒØ|j                  d¬«      }|sŒí|j                  |«       Œÿt        |t        «      s�Œ|j	                  «       }|s�Œ%|j                  |«       �Œ8 dj                  |«      }t        j                   dd|«      j	                  «       }n6|j                  dd ¬!«      }|r!|j                  dd¬«      j	                  «       }|j                  d"d#¬$«      }|rŽ|j#                  d%«      D ]z  }|j                  d&«      }|sŒ|j                  d'd«      }|j                  d¬«      }|j                  d(«      st        dz   |j%                  d«      z   }|j                  ||d)œ«       Œ| |rt'        j(                  |d*¬+«      nd}||||fS ),uF   è§£æž�è¯¦æƒ…é¡µï¼Œè¿”å›ž (title, date, content_html, attachments_json)r   r#   Ú	ucaptitleTr%   Úh1r$   u   é„¯å–„åŽ¿äººæ°‘æ”¿åºœç½‘-ÚpublishtimeÚmetaÚnameÚPubDate)ÚattrsÚcontentNé
   ÚucapcontentÚtableú
ÚimgÚsrcÚaltr(   z
![z](z)
)Úpr   r'   ú z

z\n{3,}r   Ú
contentboxr   r4   ÚtblAppendix)Úidr    r!   r"   r)   )r$   r   F)Úensure_ascii)r   r*   r,   Úreplacer&   r   ÚchildrenÚhasattrr=   r0   Ústrr-   r.   Ú
isinstanceÚjoinÚreÚsubr+   r/   ÚjsonÚdumps)r1   Úpage_urlr2   r$   r5   r@   ÚattachmentsÚ
ucap_titler:   Ú	title_tagÚpubr<   Úcontent_divÚpartsÚchildÚtagrF   rG   ÚtxtÚcbÚappendixr    r!   r"   r   Úatt_jsons                             r   Úparse_detailre   C   sT  € ä˜˜}Ó-€DØ€EØ€DØ€GØ€Kð —‘˜;Ó'€JÙØ×#Ñ#¨$Ð#Ó/ˆÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEÙØ—I‘I˜gÓ&ˆ	ÙØ×&Ñ&¨TÐ&Ó2×:Ñ:Ð;VÐXZÓ[×aÑaÓcˆEð �)‰)�MÓ
"€CÙ
Ø�|‰| $ˆ|Ó'ˆÙØ�y‰y˜¨°	Ð':ˆyÓ;ˆÙØ—8‘8˜I rÓ*×0Ñ0Ó2°3°BÐ7ˆDð —)‘)˜MÓ*€KÚàˆØ ×)Ñ)ó 	&ˆEÜ�u˜fÔ%Ø—j‘j�Ø˜'’>Ø—L‘L ¬¨E«
Ñ!2°TÑ!9Õ:Ø˜E’\ØŸ)™) E¨2Ó.�CØŸ)™) E¨2Ó.�CØ—~‘~ cÔ*Ü&¨™n˜Ø—L‘L 4¨ u¨B¨s¨e°3Ð!7Õ8ØÐ0Ñ0ØŸ.™.¨°D˜.Ó9×?Ñ?ÓA�CÚØŸ™ SÕ)àŸ.™.¨t˜.Ó4�CÚØŸ™ SÕ)Ü˜E¤3Ö'Ø—k‘k“m�ÛØ—L‘L Ö%ð-	&ð. —+‘+˜eÓ$ˆÜ—&‘&˜ F¨GÓ4×:Ñ:Ó<‰ð �Y‰Y�u \ˆYÓ2ˆÙØ—k‘k #¨T�kÓ2×8Ñ8Ó:ˆGð �y‰y˜ -ˆyÓ0€HÙØ×#Ñ# DÓ)ò 	AˆBØ—‘˜“ˆAÚØ—u‘u˜V RÓ(�Ø—z‘z¨�zÓ-�Ø—‘ vÔ.Ü# c™>¨D¯K©K¸Ó,<Ñ<�DØ×"Ñ"¨T¸$Ñ#?Õ@ð	Añ ?JŒt�z‰z˜+°EÕ:Èr€HØ�$˜ Ð)Ð)r7   c                 óè  — t        j                  t        «      }|j                  d«       	 |rt	        j
                  dd|«      d d n|d d }|j                  dt        | | ||||dd|f
«       |j                  }|j                  «        |r#|j                  d| f«       |j                  «        |j                  «        |S # t        $ r(}|j                  «        t        d	|› �«       Y d }~y
d }~ww xY w)NzPRAGMA journal_mode=WALú<[^>]+>r#   r   z—INSERT OR IGNORE INTO gov_raw(site_name,source_url,page_url,title,publish_date,content,summary,status,category,attachments) VALUES(?,?,?,?,?,?,?,?,?,?)Úactiveu   ç”Ÿæ€�çŽ¯ä¿�z°INSERT INTO gov_search(rowid,title,site_name,summary) SELECT r.id,r.title,r.site_name,r.summary FROM gov_raw r WHERE r.page_url=? AND r.id NOT IN (SELECT rowid FROM gov_search)z  DB error: r   )Úsqlite3Úconnectr   ÚexecuterT   rU   Ú	SITE_NAMEÚtotal_changesÚcommitÚcloseÚ	ExceptionÚprint)	r   r$   r5   r@   rY   ÚdbÚsummaryÚaffectedÚes	            r   Úinsert_articlerv   •   sä   € Ü	�‰œÓ	#€BØ‡J�JÐ(Ô)ðÙ;B”"—&‘&˜ R¨Ó1°$°3Ñ7ÈÈdÈsÈˆØ
�
‰
ð fÜ˜˜S %¨¨w¸ÀÈ>Ð[fÐgô	
ð ×#Ñ#ˆØ
�	‰	ŒÙØ�J‰Jð CØ�ôð �I‰IŒKØ
�‰Œ
ØˆøÜò Ø
�‰Œ
Ü�˜Q˜CÐ Ô!Üûðús   ¬BC  Ã 	C1Ã	C,Ã,C1c                  ó¸  — t        dd› �«       t        dt        › �«       t        d› «       t        rt        nt        } g }t	        d| dz   «      D ]¹  }|dk(  rt
        t        z   }nt
        t        j                  |«      z   }t        |«      }|st        d|› d�«       ŒOt        |«      }|st        d|› d�«        nO|j                  |«       t        d|› d	t        |«      › d
t        |«      › d�«       t        j                  d«       Œ» t        dt        |«      › d�«       t        j                   t"        «      }t%        «       }	 |j'                  dt        f«      }|j)                  «       D ]  }	|j+                  |	d   «       Œ 	 |j-                  «        t        dt        |«      › d�«       |D �
cg c]  }
|
d   |vsŒ|
‘Œ }}
t        dt        |«      › d�«       |st        d«       y dx}x}x}}t/        |d«      D ]·  \  }\  }}}t        |«      }|s|dz  }Œt1        ||«      \  }}}}|xs |}|xs |}t3        j4                  dd|«      j7                  «       }|s|dz  }Œgt9        |||||«      r|dz  }n|dz  }|dz  dk(  rt        d|› dt        |«      › �«       t        j                  d«       Œ¹ t        d«       t        j                   t"        «      }	 |j'                  d«       |j'                  dt        f«       |j'                  dt        f«       |j;                  «        |j'                  dt        f«      j=                  «       d   }t        d|› d�«       |j-                  «        t        d t        › d!|› d"|› d#|› d$|› �
«       y #  Y �ŒxY wc c}
w # t>        $ r}t        d|› �«       Y d }~ŒXd }~ww xY w# |j-                  «        w xY w)%NrD   z2==================================================u   ðŸš€ r   u	     â�Œ ç¬¬u   é¡µèŽ·å�–å¤±è´¥u
     ðŸ“„ ç¬¬u   é¡µ: ç©ºu   é¡µ: u   æ�¡ â†’ ç´¯è®¡u   æ�¡g333333Ó?u   
ðŸ“Š åˆ—è¡¨å…± u    æ�¡z.SELECT page_url FROM gov_raw WHERE site_name=?r   u     DBå·²æœ‰: u
     å¾…æŠ“: u     âœ… å…¨éƒ¨å·²å­˜åœ¨rg   r#   rA   z  ...r(   u   
ðŸ“Š FTSå�Œæ­¥...zPRAGMA busy_timeout=30000z(DELETE FROM gov_search WHERE site_name=?zyINSERT INTO gov_search(rowid,title,site_name,summary) SELECT rowid,title,site_name,summary FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?z  FTS: z  FTS error: u   
âœ… u   : æ–°å¢žu   , è·³è¿‡u   , ç©ºæ­£æ–‡u   , é”™è¯¯) rq   rl   Ú_MAX_PGÚTOTAL_PAGESÚranger.   ÚLIST_P1ÚLIST_PNÚformatr   r6   ÚextendÚlenÚtimeÚsleepri   rj   r   Úsetrk   ÚfetchallÚaddro   Ú	enumeratere   rT   rU   r&   rv   rn   Úfetchonerp   )Ú	max_pagesÚ	all_itemsÚpager   r1   r3   rr   ÚexistingÚcurÚrowÚitr   r   r	   r
   ÚiÚ
list_titleÚ	list_dater$   r5   r@   rY   Ú
real_titleÚ	real_dateÚtext_contentÚcntru   s                              r   Úrunr•   ®   sÆ  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔå"•¬€IØ€Iä�a˜ Q™Ó'ò ˆØ�1Š9ÜœWÑ$‰CäœWŸ^™^¨DÓ1Ñ1ˆCÜ�S‹zˆÙÜ�I˜d˜V ?Ð3Ô4ØÜ˜4Ó ˆÙÜ�J˜t˜f HÐ-Ô.ÙØ×Ñ˜ÔÜ�
˜4˜& ¤c¨%£j \°ÄÀIÃÐ?OÈsÐSÔTÜ�
‰
�3�ðô" 
Ðœc )›nÐ-¨TÐ
2Ô3ô 
�‰œÓ	#€BÜ‹u€HðØ�j‰jÐIÌIÈ<ÓXˆØ—<‘<“>ò 	!ˆCØ�L‰L˜˜Q™Õ ñ	!ð ‡H�H„JÜ	ˆLœ˜X›˜ tÐ
,Ô-à'ÖA˜¨2¨a©5¸Ò+@’ÐA€IÐAÜ	ˆJ”s˜9“~Ð& dÐ
+Ô,áÜÐ%Ô&Øà"#Ð#€CÐ#ˆ$Ð#�˜Ü+4°YÀÓ+Bò Ñ'ˆÑ'ˆC�˜YÜ�S‹zˆÙØ�a‰KˆFØä,8¸¸sÓ,CÑ)ˆˆt�W˜kØÒ(˜jˆ
ØÒ%˜Iˆ	ä—v‘v˜j¨"¨gÓ6×<Ñ<Ó>ˆÙØ�Q‰JˆEØä˜#˜z¨9°g¸{ÔKØ�1‰H‰Cà�A‰IˆDàˆr‰6�QŠ;Ü�E˜!˜˜Aœc )›nÐ-Ð.Ô/Ü�
‰
�3�ð-ô2 
ÐÔ!Ü	�‰œÓ	#€Bð
Ø
�
‰
Ð.Ô/Ø
�
‰
Ð=Ä	¸|ÔLØ
�
‰
ð  Oô  R[ð  Q]ô  	^Ø
�	‰	ŒØ�j‰jÐLÌyÈlÓ[×dÑdÓfÐghÑiˆÜ�˜�u˜DÐ!Ô"ð 	�‰Œ
ä	ˆF”9�+˜X c U¨(°4°&¸ÀEÀ7È(ÐSYÐRZÐ
[Õ\øðiÚüò BøôT ò #Ü�˜a˜SÐ!×"Ñ"ûð#ûð 	�‰�
úsD   ÅA N Æ5NÇNË!BN# ÎNÎ#	OÎ,N?Î:O Î?OÏO ÏOÚ__main__)!Ú__doc__rT   ÚsysrV   r€   ri   Úosr   Úbs4r   Ú_SYSr   ÚargvÚisdigitÚintrx   rq   rQ   r.   r{   r|   Úgetenvr   rl   r   ry   Ústatsr   r6   re   rv   r•   Ú__name__© r7   r   ú<module>r£      sè   ðñ÷ (× '× 'Û Ý ó Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/ð $€Ø
#€Ø
&€ØˆB�I‰I�kÐ#4Ó5€	Ø3€	ØÐWÐ
X€à€à˜1 q°AÑ6€òòò.O*òdò2V]ðr ˆzÒÙ…Eð r7   