Ë
    5ß©jc%  ã                   óÄ   — 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mZ  ej                  dd«      Z
ddiZdZed	z   Zd
ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u™  
ç»µç«¹å¸‚äººæ°‘æ”¿åºœ - é€šç”¨çˆ¬è™«
https://www.mz.gov.cn
è‡ªå®šä¹‰CMSï¼Œæ ‡å‡†JSPåˆ†é¡µï¼Œæ”¯æŒ�å¤šæ �ç›®
Usage:
  python3 crawl_mz_gsgg.py                        # é»˜è®¤å…¬ç¤ºå…¬å‘Š (cat_id=15948)
  python3 crawl_mz_gsgg.py --cat-id 24186 --name mz_zgzl --max-pages 2
  python3 crawl_mz_gsgg.py --cat-id 15954 --name mz_hbdchjbh --max-pages 20 --is-index
  python3 crawl_mz_gsgg.py --cat-id 24186 --full
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zhttps://www.mz.gov.cnz/%s?cat_id=%s&cur_page=%dÚmz_gsggé   é   c                 óæ  — 	 t        j                  | t        d¬«      }|j                  }t	        j
                  d|d d t        j                  «      }d}|rS|j                  d«      j                  «       j                  «       j                  dd«      j                  d	d«      }|d
v rd}||_        |j                  S # t        $ r+}t        d| ›d|›�t        j                   ¬«       Y d }~y d }~ww xY w)Né   )ÚheadersÚtimeouts   charset=["\']?([a-zA-Z0-9_-]+)i   zutf-8é   ú-Ú Ú_)ÚgbkÚgb2312r   z  FETCH ERROR z: ©Úfile)ÚrequestsÚgetÚHEADERSÚcontentÚreÚsearchÚIÚgroupÚdecodeÚlowerÚreplaceÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚrÚrawÚmÚencÚes         úcrawl_mz_gsgg.pyÚfetchr,      sÄ   € ðÜ�L‰L˜¤g°rÔ:ˆØ�i‰iˆÜ�I‰IÐ8¸#¸e¸t¸*ÄbÇdÁdÓKˆØˆÙØ—‘˜“
×!Ñ!Ó#×)Ñ)Ó+×3Ñ3°C¸Ó<×DÑDÀSÈ"ÓMˆAØÐ%Ñ%Ø�ØˆŒ
Ø�v‰vˆøÜò Ýª©QÐ/´c·j±jÕAÜûðús   ‚B9B< Â<	C0Ã!C+Ã+C0c           	      ó¾  — g }t        | d«      }|j                  d«      D �]9  }|j                  d«      }|sŒ|j                  dd«      }|r|j	                  d«      sŒ>|j                  d«      r|nt        |z   }|j                  dd«      xs |j                  d	¬
«      }|rt        |«      dk  rŒ‘d}|j                  d«      }	|	rq|	j                  d	¬
«      }
t        j                  d|
«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }|j                  ||j                  «       |dœ«       �Œ< |S )Núhtml.parserzdiv.list_div ul liÚaÚhrefr   z.htmÚhttpÚtitleT©Ústripé   Útimez(\d{4})-(\d{1,2})-(\d{1,2})ú%s-%02d-%02dr   é   )r%   r2   Údate)r   ÚselectÚfindr   ÚendswithÚ
startswithÚDOMAINÚget_textÚlenÚ
select_oner   r   r   ÚintÚappendr4   )ÚhtmlÚitemsÚsoupÚlir/   r0   Úfull_urlr2   Údate_strÚtbÚdtr(   s               r+   Úparse_list_itemsrL   *   s4  € Ø€EÜ˜˜}Ó-€DØ�k‰kÐ.Ó/ó RˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆÙ˜4Ÿ=™=¨Ô0ØØŸ?™?¨6Ô2‘4¼À¹ˆØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆÙœ˜E›
 QšØØˆØ�]‰]˜6Ó"ˆÙØ—‘ 4�Ó(ˆBÜ—	‘	Ð8¸"Ó=ˆAÙØ)¨Q¯W©W°Q«Z¼¸Q¿W¹WÀQ»Z»Ì#ÈaÏgÉgÐVWËjË/Ð,ZÑZ�Ø�‰˜X°·±³ÀxÑPÖQð%Rð& €Ló    c                 ó–  — | s| S t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  d	d| «      } t        j                  d
d| «      j                  «       S )zIStrip span-fragment whitespace between Chinese chars, digits, punctuationz3(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=[\u4e00-\u9fff])r   z&(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=\d)z&(?<=\d)[ \t\u3000]+(?=[\u4e00-\u9fff])u&   \s+([ï¼Œã€‚ã€�ï¼›ï¼šï¼Ÿï¼�)ã€‘ã€�ã€‹])z\1u   ([ï¼ˆã€�ã€Œã€Š])\s+z(?<=\d)\s+(?=\d)z&#\d+;ú\s+ú )r   Úsubr4   )r    s    r+   Ú_clean_span_spacesrR   C   sª   € áØˆÜ�6‰6ÐHÈ"ÈdÓS€DÜ�6‰6Ð;¸RÀÓF€DÜ�6‰6Ð;¸RÀÓF€DÜ�6‰6Ð;¸UÀDÓI€DÜ�6‰6Ð(¨%°Ó6€DÜ�6‰6Ð% r¨4Ó0€DÜ�6‰6�)˜R Ó&€DÜ�6‰6�&˜#˜tÓ$×*Ñ*Ó,Ð,rM   c           	      ó<
  ‡— t        | «      }|sddg |fS t        |d«      }|}|j                  d«      }|r|j                  d¬«      }|r|}d}|j                  d«      }|ro|j                  «       }	t	        j
                  d|	«      }
|
rGd|
j                  d	«      t        |
j                  d
«      «      t        |
j                  d«      «      fz  }g }|j                  d«      }|r¡|j                  d«      }|rŽ|j                  d«      D ]z  }|j                  dd«      }|sŒ|j                  d«      r|nt        |z   Š|j                  d¬«      xs t        j                  j                  |«      }|j!                  ‰|dœ«       Œ| g }|j                  d«      }|�rè|j"                  D �]Ø  }|j$                  }|€St'        |«      j)                  «       }|sŒ.t	        j*                  d|j)                  «       «      rŒS|j!                  |«       Œe|dk(  r|j!                  t'        |«      «       Œ…|dk(  rJ|j                  dd¬«      }t-        |«      }|sŒ«t	        j*                  d|«      rŒÂ|j!                  |«       ŒÔ|dk(  r–|j"                  D ]…  }|j$                  dk(  rJ|j                  dd¬«      }t-        |«      }|sŒ3t	        j*                  d|«      rŒJ|j!                  |«       Œ\|j$                  dk(  sŒl|j!                  t'        |«      «       Œ‡ �Œo|dk(  r�Œv|dk(  s�Œ}|j                  dd«      }|j                  dd«      }|s�Œ¥|j                  d«      r|nt        |z   }|j!                  d|›d|›d�«       �ŒÛ dj/                  |«      }|rt1        |j)                  «       «      d k  r	d!| ›d"|›d#�}|�r|j                  dd¬$«      D ]ð  }|d   }t	        j
                  d%|t        j2                  «      sŒ.|j                  d«      r|nt        |z   Š|j                  d¬«      xs t        j                  j                  |«      }t5        ˆfd&„|D «       «      s|j!                  ‰|dœ«       |sŒ¨t	        j6                  |«      }t	        j8                  d'|z   d(z   d)|›d‰›d�|t        j:                  ¬*«      }Œò t	        j8                  d+d|«      }t	        j8                  d,d|«      }t	        j8                  d-d|«      j)                  «       }||||fS ).Nr   r.   Úh1Tr3   zp#attributeu0   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4})-(\d{1,2})-(\d{1,2})r7   r   r8   r5   zspan.fjr   r/   r0   r1   )r%   r2   zarticle.contentz
^\$\{.*\}$ÚtableÚprP   ÚdivÚbrÚimgÚsrcÚaltz![z](ú)z

é   z<p><a href="z">z</a></p>)r0   z"\.(doc|docx|pdf|xls|xlsx|zip|rar)$c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r%   N© )Ú.0ÚattÚf_urls     €r+   ú	<genexpr>zget_detail.<locals>.<genexpr>    s   øè ø€ ÒF°3˜3˜u™:¨Õ.ÑFùs   ƒz<a[^>]*href=["\']z["\'][^>]*>.*?</a>ú[)Úflagsz\$\{[^}]+\}z\n{3,}rO   )r,   r   rA   r?   r   r   r   rB   r;   Úfind_allr   r=   r>   ÚosÚpathÚbasenamerC   ÚchildrenÚnameÚstrr4   ÚmatchrR   Újoinr@   r   ÚanyÚescaperQ   ÚDOTALL)r%   Útitle_from_listrD   rF   Ú
full_titlerT   ÚtÚpub_dateÚattrÚ	attr_textr(   ÚattachmentsÚfj_spanÚfile_tagr/   r0   Úf_titleÚcontent_partsÚarticleÚelÚtagr    ÚtxtÚchildrZ   r[   Úimg_urlr   Úa_href_escapedrb   s                                @r+   Ú
get_detailr„   Q   sc  ø€ Ü�‹:€DÙØ�2�r˜?Ð*Ð*ä˜˜}Ó-€Dà €JØ	�‰˜Ó	€BÙ	Ø�K‰K˜dˆKÓ#ˆÙØˆJà€HØ�?‰?˜=Ó)€DÙØ—M‘M“Oˆ	Ü�I‰IÐIÈ9ÓUˆÙØ%¨¯©°«´S¸¿¹À»³_ÄcÈ!Ï'É'ÐRSË*ÃoÐ(VÑVˆHà€KØ�o‰o˜iÓ(€GÙØ—<‘< Ó'ˆÙØ×&Ñ& sÓ+ò I�Ø—u‘u˜V RÓ(�ÚØ$(§O¡O°FÔ$;™DÄÈ$Á�EØŸj™j¨t˜jÓ4ÒN¼¿¹×8HÑ8HÈÓ8N�GØ×&Ñ&¨u¸wÑ'GÕHðIð €MØ�o‰oÐ/Ó0€GÚØ×"Ñ"ó 	GˆBØ—'‘'ˆCØˆ{Ü˜2“w—}‘}“�Ú¤§¡¨¸¿
¹
»Õ EØ!×(Ñ(¨Õ.Ø˜’Ø×$Ñ$¤S¨£WÕ-Ø˜’Ø—k‘k #¨T�kÓ2�Ü(¨Ó-�ÚœrŸx™x¨°sÕ;Ø!×(Ñ(¨Õ-Ø˜’àŸ[™[ò 9�EØ—z‘z SÒ(Ø#Ÿn™n¨S¸˜nÓ=˜Ü0°Ó5˜Ú¤r§x¡x°¸sÕ'CØ)×0Ñ0°Õ5ØŸ™ wÓ.Ø%×,Ñ,¬S°«ZÕ8ò9ð ˜’ÙØ˜”Ø—f‘f˜U BÓ'�Ø—f‘f˜U BÓ'�ÛØ%(§^¡^°FÔ%;™cÄÈ#Á�GØ!×(Ò(ººWÐ)EÖFð=	Gð@ �k‰k˜-Ó(€GÙ”c˜'Ÿ-™-›/Ó*¨RÒ/øÚ25²zÐBˆâØ×!Ñ! #¨DÐ!Ó1ò 	ˆAØ�V‘9ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ $§¡°Ô 7™¼VÀd¹]�ØŸ*™*¨4˜*Ó0ÒJ´B·G±G×4DÑ4DÀTÓ4J�ÜÓF¸+ÔFÔFØ×&Ñ&¨u¸wÑ'GÔHÚÜ%'§Y¡Y¨t£_�NÜ Ÿf™fØ,¨~Ñ=Ð@UÒUÚ&-ªuÐ5Ø¤r§y¡yô‘Gð	ô �f‰f�^ R¨Ó1€GÜ�f‰f�Y ¨Ó0€GÜ—‘˜  ZÓ0×6Ñ6Ó8€Jà�H˜k¨:Ð5Ð5rM   c                  ó&  — d} d}d}d}t         }d}|t        t        j                  «      k  �r^t        j                  |   }|dk(  rt        }�n|dk(  rE|dz   t        t        j                  «      k  r&	 t        t        j                  |dz      «      }|dz  }nÑ|dk(  r;|dz   t        t        j                  «      k  rt        j                  |dz      } |dz  }n‘|d	k(  r;|dz   t        t        j                  «      k  rt        j                  |dz      }|dz  }nQ|d
k(  rE|dz   t        t        j                  «      k  r&	 t        t        j                  |dz      «      }|dz  }n|dk(  rd}|dz  }|t        t        j                  «      k  r�Œ^t        ||«      }dd l}|j                  t        d¬«      }|j                  d«       |j                  «       }	d}
t        d|dz   «      D �]¤  }t        || |fz  }t        d||fz  t        j                   ¬«       t#        |«      }|st        d|z  t        j                   ¬«       Œ\t%        |«      }|s't        d|z  t        j                   ¬«       |dk(  r �nŒ�t        d|t        |«      fz  t        j                   ¬«       |D ]Â  }|	j                  d|d   |f«       |	j'                  «       rŒ+t)        |d   |d   «      \  }}}}|d   xs |}	 |	j                  d||d   |d d ||d d |d   dt+        j,                  |d¬«      f«       |
dz  }
t        d |d d! |t        |«      t        |«      fz  t        j                   ¬«       ŒÄ t1        j2                  d#«       |j5                  «        �Œ§ t        d$||
fz  t        j                   ¬«       |j7                  «        y # t        $ r Y �Œ8w xY w# t        $ r Y �Œ~w xY w# t.        $ r)}t        d"|z  t        j                   ¬«       Y d }~�Œkd }~ww xY w)%NÚ15948r   r   zinfo/iList.jspr   z--fullz--pagesz--cat-idz--namez--max-pagesz
--is-indexzinfo/iIndex.jspr   é<   )r   zPRAGMA journal_mode=WALu   ç¬¬%dé¡µ: %sr   u     ç¬¬%dé¡µ èŽ·å�–å¤±è´¥u     ç¬¬%dé¡µ æ— æ�¡ç›®u     ç¬¬%dé¡µ: %d æ�¡z7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?r%   r2   r9   z˜INSERT INTO gov_raw (site_name, page_url, title, content, publish_date, source_url, status, attachments)
                       VALUES (?,?,?,?,?,?,?,?)iô  r]   ÚsyncedF)Úensure_asciiz     + %s (%s) body:%dB attach:%dé2   u       ! å…¥åº“å¤±è´¥: %sg333333Ó?u   
[%s] å®Œæˆ�! æ–°å¢ž %d æ�¡)ÚDEFAULT_PAGESr@   r#   ÚargvÚ	MAX_PAGESrB   Ú
ValueErrorÚminÚsqlite3Úconnectr   ÚexecuteÚcursorÚrangeÚLIST_URL_TEMPLATEr"   r$   r,   rL   Úfetchoner„   ÚjsonÚdumpsr!   r6   ÚsleepÚcommitÚclose)Úcat_idÚ	site_nameÚ	max_pagesÚ	list_pageÚpagesÚir/   r�   ÚconnÚcÚall_newÚpgr%   rD   rE   Úitr   ru   rx   rs   r9   r*   s                         r+   Úmainr§   ±   s×  € à€FØ€IØ€IØ €IÜ€Eà	€AØ
Œc”#—(‘(‹mÓ
Ü�H‰H�Q‰KˆØ�Š=ÜŠEØ�)Š^  A¡¬¬C¯H©H«Ò 5ðÜœCŸH™H Q¨¡U™OÓ,�ð �‰F‰AØ�*Š_  Q¡¬¬S¯X©X«Ò!6Ü—X‘X˜a !™e‘_ˆFØ�‰F‰AØ�(Š]˜q 1™u¤s¬3¯8©8£}Ò4ÜŸ™  Q¡™ˆIØ�‰F‰AØ�-Ò A¨¡E¬C´·±«MÒ$9ðÜ¤§¡¨¨Q©¡Ó0�	ð �‰F‰AØ�,ÒØ)ˆIØ	ˆQ‰ˆð1 Œc”#—(‘(‹mÔ
ô4 ��yÓ!€EãØ�?‰?œ9¨bˆ?Ó1€DØ‡L�LÐ*Ô+Ø�‰‹€Aà€GÜ�A�u˜q‘yÓ!ó &ˆÜ 9¨f°bÐ"9Ñ9ˆÜˆn  C˜yÑ(¬s¯z©zÕ:Ü�S‹zˆÙÜÐ+¨bÑ0´s·z±zÕBØä  Ó&ˆÙÜÐ(¨2Ñ-´C·J±JÕ?Ø�QŠwÚØäÐ" b¬#¨e«*Ð%5Ñ5¼C¿J¹JÕGàò 	EˆBØ�I‰IÐOÐRTÐUZÑR[Ð]fÐQgÔhØ�z‰zŒ|Øä9CÀBÀuÁIÈrÐRYÉ{Ó9[Ñ6ˆG�X˜{¨JØ�f‘:Ò) ˆDð
EØ—	‘	ð3à  5¡	¨:°d°sÐ+;¸WÀdÈ3ÈBÀiØ˜‘Y ¬$¯*©*°[ÈuÔ*UðWôð ˜1‘�ÜÐ8¸JÀsÈ¸OÈTÔSVÐW^ÓS_ÔadÐepÓaqÐ;rÑrÔy|÷  zDñ  zDö  Eð!	Eô( 	�
‰
�3ŒØ�‰ŽðM&ôP 
Ð
(¨I°wÐ+?Ñ
?ÄcÇjÁjÕQà‡J�J…LøôK ò Úðûô ò Úðûôb ò EÜÐ.°Ñ2¼¿¹×DÓDûðEús=   Á3N> Ä=O Ë,A7OÎ>	OÏ
OÏ	OÏOÏ	PÏ'PÐPÚ__main__)Ú__doc__r#   rg   r   r6   r—   r   Úbs4r   Úgetenvr   r   r>   r•   Ú	SITE_NAMEr�   r‹   r,   rL   rR   r„   r§   Ú__name__r_   rM   r+   ú<module>r®      s‡   ðñ	÷ )× (× (Ý àˆB�I‰I�kÐ#8Ó9€	ØÐWÐ
X€Ø	 €ØÐ8Ñ8Ð Ø€	Ø€	Ø€òò"ò2-ò]6ò@Uðp ˆzÒÙ…Fð rM   