Ë
    ¸¬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Zddl	Z
ddlmZ ddlmZ ej                  j                  dej                  j!                  ej                  j#                  e«      «      «       ddlmZ  ej*                  dej,                  j.                  j0                  j2                  ¬«       dZd	Zd
diZd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  rc ejH                  d¬«      Z%e%jM                  de'dd¬«       e%jQ                  «       Z) e*de)jV                  › d�«        e"e)«      Z, e*de,› d�«       yy)uR   crawl_zrzy_tx_pqgs.py - æ³°å…´å¸‚è‡ªç„¶èµ„æº�å’Œè§„åˆ’å±€-å»ºè®¾é¡¹ç›®æ‰¹å‰�å…¬ç¤ºé    N)Údatetime)ÚBeautifulSoup)Úpush_to_searchdbÚignore)Úcategoryu:   æ³°å…´å¸‚è‡ªç„¶èµ„æº�å’Œè§„åˆ’å±€-å»ºè®¾é¡¹ç›®æ‰¹å‰�å…¬ç¤ºz;https://zrzy.jiangsu.gov.cn/tztx/gtzx/tzgg_10466/tzgg_10469z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 óP   — t        j                  dd| «      j                  «       } | S )uO   Strip suffix like '_å»ºè®¾é¡¹ç›®æ‰¹å‰�å…¬ç¤º_æ³°å…´å¸‚è‡ªç„¶èµ„æº�å’Œè§„åˆ’å±€'z_.*$Ú )ÚreÚsubÚstrip)Útitles    ú'/root/gov_crawler/crawl_zrzy_tx_pqgs.pyÚclean_title_suffixr      s"   € ä�F‰F�7˜B Ó&×,Ñ,Ó.€EØ€Ló    c                 ó6   — | dk(  r	t         dz   S t         › d| › d�S )Né   z
/index.htmz/index_z.htm)ÚBASE_URL)Úpage_nums    r   Úget_page_urlr      s'   € Ø�1‚}Ü˜,Ñ&Ð&ÜˆZ�w˜x˜j¨Ð-Ð-r   c                 ó\  — g }t        | d«      }|j                  d«      D �]  }|j                  d«      }t        |«      dk\  sŒ$|d   j                  d«      }|sŒ;|j	                  dd«      j                  d	«      sŒ]|j	                  dd«      }|j	                  d
«      xs |j                  d¬«      j                  «       }|sŒ¥|d   j                  d¬«      }t        j                  d|«      }	|	r|	j                  d«      nd}
t        dz   |dd z   }|j                  |||
dœ«       �Œ |S )z(Parse list page HTML using BeautifulSoupúhtml.parserÚtrÚtdé   r   ÚaÚhrefr	   z./20r   T©r   r   ú\d{4}-\d{2}-\d{2}ú/N)r   ÚurlÚpub_date)r   Úfind_allÚlenÚfindÚgetÚ
startswithÚget_textr   r
   ÚsearchÚgroupr   Úappend)ÚhtmlÚitemsÚsoupr   Útdsr   r   r   Ú	date_textÚdate_mÚdate_strÚurl_abss               r   Úparse_list_pager3      s  € à€EÜ˜˜}Ó-€DØ�m‰m˜DÓ!ó ˆØ�k‰k˜$ÓˆÜˆs‹8�q‹=Ø�A‘—‘˜CÓ ˆAÚ�Q—U‘U˜6 2Ó&×1Ñ1°&Õ9Ø—u‘u˜V RÓ(�ØŸ™˜w›ÒA¨1¯:©:¸D¨:Ó+A×HÑHÓJ�ÙØØ ™FŸO™O°$˜OÓ7�	ÜŸ™Ð#7¸ÓC�Ù.4˜6Ÿ<™<¨œ?¸"�Ü" S™.¨4°°¨8Ñ3�Ø—‘Ø"Ø"Ø (ñö ðð$ €Lr   c                 óŒ  — 	 t        j                  | t        dd¬«      }|j                  xs d|_        t        |j                  d	«      }|j                  d«      }|rt        |j                  d
¬«      «      n|d   }|d   }|j                  dddi¬«      }|r-|j                  dd«      dd }	t        j                  d|	«      r|	}g }
g }|j                  dd¬«      }|r|j                  dd¬«      }|s|}n|j                  dd¬«      }|�rj|j                  g d¢«      D �]S  }|j                  dd«      xs d}d|j                  dd«      v rŒ/|j                  dk(  rv|j                  dd«      }|j                  dd «      xs d }|sŒi|j!                  d!«      rŒ{t"        j$                  j'                  | |«      }|
j)                  d"|› d#|› d$�«       Œ´|j                  d%k(  ré|j                  d&d«      }|j                  d
¬«      xs d'}|sŒît"        j$                  j'                  | |«      }t*        j,                  j/                  |«      d(   j1                  «       }|d)v r.|j)                  ||d*œ«       |
j)                  d+|› d#|› d$�«       �Œp|d,v r|
j)                  d"|› d#|› d$�«       �ŒŽ|s�Œ’|
j)                  d-|› d#|› d$�«       �Œ¬|j                  d.v s�Œ¼|j                  d«      r|j                  d
¬«      s�Œá|j                  d
¬«      }|s�Œ÷|d/k7  s�Œþt        j2                  d0d|«      }t        j2                  d1d|«      }t        j2                  d2d|«      }|
j)                  |«       �ŒV |
s�|r‹|j                  d«      D ]w  }|j                  dd«      }|j                  dd «      xs d }|sŒ.|j!                  d!«      rŒ@t"        j$                  j'                  | |«      }|
j)                  d"|› d#|› d$�«       Œy |
rd3j5                  |
«      nd4}||||fS # t
        $ r}|d   |d   d|› �g fcY d}~S d}~ww xY w)5z%Fetch detail page and extract contenté   F©ÚheadersÚtimeoutÚverifyúutf-8r   r!   u   [æŠ“å�–å¤±è´¥] Nr   Tr   ÚmetaÚnameÚPubDate)ÚattrsÚcontentr	   é
   r   ÚdivÚfontzoom)ÚidÚ
TRS_Editor)Úclass_)ÚprA   Úimgr   Ústylezdisplay:noneú rG   ÚsrcÚaltu   å›¾ç‰‡zdata:z![z](ú)r   r   u   é™„ä»¶r   )z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rar)r<   r    u
   [é™„ä»¶ï¼š)z.jpgz.jpegz.pngz.gifz.bmpú[)rF   rA   õ   Â z[ \t]+(?=[\u4e00-\u9fff])z(?<=[\u4e00-\u9fff])[ \t]+z\u00a0z

u   [è¯¥æ–‡æ¡£ä¸ºå›¾ç‰‡/PDFæ–‡ä»¶])Úrequestsr%   ÚHEADERSÚapparent_encodingÚencodingÚ	Exceptionr   Útextr$   r   r'   r
   Úmatchr"   Úreplacer<   r&   ÚurllibÚparseÚurljoinr*   ÚosÚpathÚsplitextÚlowerr   Újoin)Ú
detail_urlÚitemÚrÚer-   Ú	title_tagr   r!   Ú	meta_dateÚdÚcontent_partsÚattachmentsrB   ÚtrsÚelemrH   rJ   rK   Úabs_srcr   rT   Úabs_hrefÚextrG   r?   s                            r   Úfetch_detailrm   2   s  € ðJÜ�L‰L˜¬W¸bÈÔOˆØ×(Ñ(Ò3¨GˆŒ
ô ˜Ÿ™ Ó/€Dð —	‘	˜'Ó"€IÙBKÔ˜y×1Ñ1¸Ð1Ó=Ô>ÐQUÐV]ÑQ^€Eð �JÑ€HØ—	‘	˜&¨°Ð(;�	Ó<€IÙØ�M‰M˜) RÓ(¨¨"Ð-ˆÜ�8‰8Ð(¨!Ô,ØˆHð €MØ€Kà�y‰y˜ :ˆyÓ.€HÙØ�m‰m˜E¨,ˆmÓ7ˆÙØ‰Cà�i‰i˜ lˆiÓ3ˆâ
Ø—L‘LÒ!9Ó:ó "	/ˆDØ—H‘H˜W bÓ)Ò/¨RˆEØ §¡¨s°BÓ!7Ñ7Øà�y‰y˜EÒ!Ø—h‘h˜u bÓ)�Ø—h‘h˜u hÓ/Ò;°8�Ú˜sŸ~™~¨gÕ6Ü$Ÿl™l×2Ñ2°:¸sÓC�GØ!×(Ñ(¨2¨c¨U°"°W°I¸QÐ)?Õ@à—‘˜cÒ!Ø—x‘x ¨Ó+�Ø—}‘}¨4�}Ó0Ò<°H�ÚÜ%Ÿ|™|×3Ñ3°JÀÓE�HÜŸ'™'×*Ñ*¨8Ó4°QÑ7×=Ñ=Ó?�CØÐXÑXØ#×*Ñ*°DÀÑ+JÔKØ%×,Ñ,¨z¸$¸¸rÀ(ÀÈ1Ð-MÖNØÐ IÑIØ%×,Ñ,¨r°$°°r¸(¸À1Ð-EÖFÛØ%×,Ñ,¨q°°°b¸¸
À!Ð-DÖEà—‘˜lÓ*Ø—9‘9˜UÔ#¨D¯M©MÀ¨MÔ,EÙØ—}‘}¨4�}Ó0�Û˜D FœNÜŸ6™6Ð">ÀÀDÓI�DÜŸ6™6Ð"?ÀÀTÓJ�DÜŸ6™6 )¨S°$Ó7�DØ!×(Ñ(¨Ö.ðE"	/ñJ ™SØ—<‘< Ó&ò 	=ˆCØ—'‘'˜% Ó$ˆCØ—'‘'˜% Ó*Ò6¨hˆCÚ˜3Ÿ>™>¨'Õ2Ü Ÿ,™,×.Ñ.¨z¸3Ó?�Ø×$Ñ$ r¨#¨¨b°°	¸Ð%;Õ<ð	=ñ -:ˆf�k‰k˜-Ô(Ð?_€GØ�(˜G [Ð0Ð0øôY ò JØ�G‰}˜d :Ñ.°/À!ÀÐ0EÀrÐIÕIûðJús   ‚2P! Ð!	QÐ*P>Ð8QÐ>Qc                 ó°   — dd l }	 |j                  dd¬«      }|j                  d| f«      }|j                  «       d   }|j	                  «        |S #  Y yxY w)Nr   z/root/search.dbr@   )r8   z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?éÿÿÿÿ)Úsqlite3ÚconnectÚexecuteÚfetchoneÚclose)Ú	site_namerp   ÚdbÚcurÚcnts        r   Úget_db_country   …   sX   € ÛðØ�_‰_Ð.¸ˆ_Ó;ˆØ�j‰jÐIÈIÈ<ÓXˆØ�l‰l‹n˜QÑˆØ
�‰Œ
Øˆ
øðÙús   †A
A ÁAc                 ó¬  — | j                   }g }t        d|dz   «      D ]º  }t        |«      }t        d|› d|› �«       	 t	        j
                  |t        dd¬«      }|j                  xs d|_        t        |j                  «      }|st        d	|› d
�«        nCt        d|› dt        |«      › d�«       |j                  |«       t        j                  d«       Œ¼ t        dt        |«      › �«       g }t        |«      }	t!        |«      D ]~  \  }
}|
dz  dk(  rt        d|
dz   › d|	› d�«       	 t#        |d   |«      \  }}}}|j%                  ||d   |d   |t&        ||r|d d n|d d |rt)        j*                  |d¬«      nddœ«       Œ€ t        dt        |«      › �«       |rBt-        t&        «      }t/        |d«       t-        t&        «      }t        d|› d |› d!||z
  › d"�«       t        |«      S # t        $ r}t        d|› d|› �«       Y d }~ �Œ7d }~ww xY w# t        $ r0}t        d|d   › d|› �«       |d   |d   dg f\  }}}}Y d }~�Œd }~ww xY w)#Nr   z  List page z: r5   Fr6   r:   z  Error page z  No items on page z
, stoppingz  Page z itemsg      à?z
  Total list items: é   r   z	  Detail r   z...r    z  Error r   r!   r	   iô  éÈ   )Úensure_ascii)r   r    Ú
source_urlr!   ru   r?   Úsummaryrg   z
  Total records: Úzrzy_tx_pqgsz  DB: u    â†’ z (+rL   )ÚpagesÚranger   ÚprintrO   r%   rP   rQ   rR   rS   r3   rT   r#   ÚextendÚtimeÚsleepÚ	enumeraterm   r*   Ú	SITE_NAMEÚjsonÚdumpsry   r   )ÚargsÚ	max_pagesÚ	all_itemsÚpnr    ra   rb   r,   ÚrecordsÚtotalÚir`   r   r!   r?   rg   Úcount_beforeÚcount_afters                     r   Úrunr”   �   sƒ  € Ø—
‘
€IØ€Iä�A�y 1‘}Ó%ò ˆÜ˜2ÓˆÜ�˜R˜D  3 %Ð(Ô)ð	Ü—‘˜S¬'¸2ÀeÔLˆAØ×,Ñ,Ò7°ˆAŒJô
   §¡Ó'ˆÙÜÐ'¨ t¨:Ð6Ô7Ùä�˜�t˜2œc %›j˜\¨Ð0Ô1Ø×Ñ˜ÔÜ�
‰
�3�ð#ô& 
Ð"¤3 y£>Ð"2Ð
3Ô4à€GÜ�	‹N€EÜ˜YÓ'ò ‰ˆˆ4Øˆq‰5�AŠ:Ü�I˜a ™c˜U ! E 7¨#Ð.Ô/ð	\Ü4@ÀÀeÁÈdÓ4SÑ1ˆE�8˜W kð
 	�‰ØØ˜‘;Ø˜u™+Ø Ü"ØÙ(/�w˜t ‘}°U¸4¸C°[ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
õ 		ðô( 
Ð¤ G£˜~Ð
.Ô/áÜ#¤IÓ.ˆÜ˜ .Ô1Ü"¤9Ó-ˆÜ��|�n E¨+¨°c¸+ÈÑ:TÐ9UÐUVÐWÔXäˆw‹<Ðøô[ ò 	Ü�M "  R¨ sÐ+Ô,Þûð	ûô, ò 	\Ü�H˜T %™[˜M¨¨A¨3Ð/Ô0Ø48¸±MÀ4È
ÑCSÐUWÐY[Ð4[Ñ1ˆE�8˜W¦kûð	\ús/   ¾2G1Ä.HÇ1	HÇ:HÈHÈ	IÈ#%IÉIÚ__main__u@   æ³°å…´å¸‚è‡ªç„¶èµ„æº�å’Œè§„åˆ’å±€-å»ºè®¾é¡¹ç›®æ‰¹å‰�å…¬ç¤ºçˆ¬è™«)Údescriptionz--pagesr{   zpages to crawl)ÚtypeÚdefaultÚhelpuE   æ³°å…´å¸‚è‡ªç„¶èµ„æº�å’Œè§„åˆ’å±€-å»ºè®¾é¡¹ç›®æ‰¹å‰�å…¬ç¤º: crawling z pageszDone: z records)-Ú__doc__ÚsysrZ   r‰   r
   r…   rO   ÚwarningsÚargparseÚurllib.parserW   r   Úbs4r   r[   ÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   ÚfilterwarningsÚpackagesÚurllib3Ú
exceptionsÚInsecureRequestWarningrˆ   r   rP   r   r   r3   rm   ry   r”   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsr‹   rƒ   r�   rx   © r   r   ú<module>r±      s)  ðá Xß J× J× J× JÓ JÝ Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à €× Ñ ˜¨8×+<Ñ+<×+DÑ+D×+OÑ+O×+fÑ+fÕ gàH€	ØH€ØÐWÐ
X€òò
.ò
ò0Q1òf	ò7ðr ˆzÒØ$ˆX×$Ñ$Ð1sÔt€FØ
×Ñ˜	¨°QÐ=MÐÔNØ×ÑÓ€DÙ	ÐQÐRV×R\ÑR\ÐQ]Ð]cÐ
dÔeÙ
ˆd‹)€CÙ	ˆF�3�%�xÐ
 Õ!ð r   