Ë
    …Ý±je!  ã                   ób  — 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
 ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZedz   ZdZdZd	Zd
ZdZdZeedz   dœZd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)uR  
æ˜Œå�‰å›½å®¶é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒº - é€šçŸ¥å…¬å‘Š (tzgg) çˆ¬è™«
åˆ—è¡¨: GET http://www.cjgjgxq.cn/content/page?channelIds=5164&page=N&size=15&orderBy=38
  JPAAS JSON æŽ¥å�£, totalElements=883, çº¦59é¡µ; è¿‡æ»¤å¤–é“¾(ç«™å¤–httpå¼€å¤´urlè·³è¿‡)
è¯¦æƒ…: /p172/tzgg/YYYYMMDD/NUMBER.html
  æ ‡é¢˜: <meta name="ArticleTitle"> (å®Œæ•´)
  æ—¥æœŸ: <meta name="PubDate">
  æ­£æ–‡: div.content å†… font#Zoom (å�« TRS_UEDITOR æ­£æ–‡ + é™„ä»¶div)
  æ³¨æ„�: é™„ä»¶ href ä¸º //www.cjgjgxq.cn å��è®®ç›¸å¯¹è·¯å¾„, éœ€è½¬ http://www.cjgjgxq.cn
ç”¨æ³•: python3 crawl_cjgjgxq_tzgg.py [--pages=N] [--limit=N]
é    N)Úurljoin)Úpush_to_searchdbzhttp://www.cjgjgxq.cnz/content/pageu"   æ˜Œå�‰å›½å®¶é«˜æ–°åŒº-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘ŠÚ5164é<   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36ú/p172/tzgg.html©ú
User-AgentÚRefererc                  ó   — d\  } }t         j                  dd  D ]`  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|j                  d«      sŒDt        |j	                  d«      d   «      }Œb | |fS )N)r   r   é   z--pages=ú=z--limit=)ÚsysÚargvÚ
startswithÚintÚsplit)ÚpagesÚlimitÚas      ú'/root/gov_crawler/crawl_cjgjgxq_tzgg.pyÚ
parse_argsr   !   st   € Ø�L€Eˆ5Ü�X‰X�a�bˆ\ò )ˆØ�<‰<˜
Ô#Ü˜Ÿ™ › Q™Ó(‰EØ�\‰\˜*Õ%Ü˜Ÿ™ › Q™Ó(‰Eð	)ð
 �%ˆ<Ðó    c                 óÞ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )NÚ z[\u200b\u200e\u200f\ufeff\xa0]ú\s+ú u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r   Úclean_titler$   +   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr   c                 óÊ  — t         |t        ddœ}	 | j                  t        |d¬«      }|j	                  «       }g }|j                  di «      xs i j                  dg «      xs g D ]Ð  }|j                  d«      xs dj                  «       }|j                  d	«      rŒ8|j                  d
«      sŒJt        |j                  d«      xs d«      }|j                  d«      xs |j                  d«      xs ddd }	t        |«      dk  rŒ¢|j                  ||j                  d
«      r	t        |z   n||	dœ«       ŒÒ |S # t        $ r}
t        d|› d|
› �d¬«       g cY d}
~
S d}
~
ww xY w)u   JPAAS /content/page JSON æŽ¥å�£é&   )Ú
channelIdsÚpageÚsizeÚorderByé   )ÚparamsÚtimeoutÚdataÚcontentÚurlr   Úhttpú/ÚtitleÚreleaseTimeÚdateNé
   é   )r3   Úhrefr5   z    [ERR] list page ú: T©Úflush)ÚCHANNEL_IDSÚ	PAGE_SIZEÚgetÚLIST_APIÚjsonr"   r   r$   ÚlenÚappendÚBASE_URLÚ	ExceptionÚprint)Úsessionr(   r,   Úrr.   ÚitemsÚitr0   r3   r5   Úes              r   Ú
fetch_listrK   3   sS  € ô "ØÜØñ	€FðØ�K‰Kœ¨¸ˆKÓ<ˆØ�v‰v‹xˆØˆØ—8‘8˜F BÓ'Ò-¨2×2Ñ2°9¸bÓAÒGÀRò 
	qˆBØ—6‘6˜%“=Ò& B×-Ñ-Ó/ˆCØ�~‰~˜fÔ%ØØ—>‘> #Ô&ØÜ §¡ w£Ò 5°2Ó6ˆEØ—F‘F˜=Ó)ÒA¨R¯V©V°F«^ÒA¸rÀ3ÀBÐGˆDÜ�5‹z˜AŠ~ØØ�L‰L 5ÀCÇNÁNÐSVÔDW´(¸S².Ð]`ÐjnÑoÕpð
	qð ˆøÜò ÜÐ$ T F¨"¨Q¨CÐ0¸Õ=Ø�	ûðús   ‘D(D: Ä:	E"ÅEÅE"ÅE"c                 ó  ‡— 	 | j                  ‰t        t        dz   dœd¬«      }d|_        |j                  }d}t        j                  d|«      }|rt        |j                  d«      «      }|s2t        j                  d	|«      }|rt        |j                  d«      «      }t        j                  d
«      }d}t        j                  d|«      }|rM|j                  |j                  d«      j                  «       «      r|j                  d«      j                  «       }|s2dD ]-  }t        j                  ||«      }|sŒ|j                  d«      } n |s/t        j                  d‰xs d«      }|rd|j                  «       z  }|s)t        j                  d|«      }|r|j                  d«      }d}	|j                  d«      }
|
dk\  �r|j                  d|
«      dz   }|j                  d|«      }|dkD  rÕ||| }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd„ |«      }t        j                  dd„ |«      }t        j                  dˆfd„|«      }t        j                  dˆfd„|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       }	|	rt        |	«      d k  rd}	|||	fS # t         $ r}t#        d!‰› d"|› �d#¬$«       Y d%}~y&d%}~ww xY w)'u5   è¯¦æƒ…: meta ArticleTitle + div.content å†… font#Zoomr   r	   r+   )Úheadersr-   zutf-8r   z+<meta name="ArticleTitle" content="([^"]*)"r   z'<div class="title">\s*([^<]+?)\s*</div>z^\d{4}-\d{1,2}-\d{1,2}$z.<meta[^>]*name="PubDate"[^>]*content="([^"]*)")z4class="fbrq"[^>]*>[^<]{0,40}?(\d{4}-\d{1,2}-\d{1,2})z)class="fbrq"[^>]*>(\d{4}-\d{1,2}-\d{1,2})z/(20\d{2})(\d{2})(\d{2})/z%s-%s-%sz(\d{4}-\d{1,2}-\d{1,2})z	id="Zoom"r   ú>z</font>z<script[\s\S]*?</script>z<style[\s\S]*?</style>zhref="//([^"]*)"c                 ó^   — dt         j                  d«      d   ›d| j                  d«      ›d�S )Nzhref="ú://r   r   ú"©rC   r   Úgroup©Úms    r   ú<lambda>zfetch_detail.<locals>.<lambda>ƒ   s+   � ÔPX×P^ÑP^Ð_dÓPeÐfgÓPhÐjk×jqÑjqÐrsÕjtÐ<u€ r   zsrc="//([^"]*)"c                 ó^   — dt         j                  d«      d   ›d| j                  d«      ›d�S )Nzsrc="rP   r   r   rQ   rR   rT   s    r   rV   zfetch_detail.<locals>.<lambda>„   s(   � ÌhÏnÉnÐ]bÓNcÐdeÓNfÐhi×hoÑhoÐpqÕhrÐ;s€ r   zhref="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nz	href="%s"r   )r1   ú#Ú
javascript©rS   r   r   ©rU   r0   s    €r   rV   zfetch_detail.<locals>.<lambda>…   sr   ø€ ¸+Ðij×ipÑipÐqrÓis×i~Ñi~ð  @[ô  j\ÌÐQTÐVW×V]ÑV]Ð^_ÓV`ÓIañ  ;m€ ð  bc÷  biñ  bið  jkó  blñ  ;m€ r   zsrc="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nzsrc="%s"r   )r1   zdata:rZ   r[   r\   s    €r   rV   zfetch_detail.<locals>.<lambda>†   sq   ø€ ¸Ðgh×gnÑgnÐopÓgq×g|Ñg|ð  ~]ô  h^ÄwÈsÐTU×T[ÑT[Ð\]ÓT^ÓG_ñ  :o€ ð  de÷  dkñ  dkð  lmó  dnñ  :o€ r   z\sstyle="[^"]*"zM<span[^>]*>|</span>|<strong[^>]*>|</strong>|<b[^>]*>|</b>|<font[^>]*>|</font>é   z    [ERR] detail r9   Tr:   N)r   r   r   )r>   ÚUArC   ÚencodingÚtextr    Úsearchr$   rS   ÚcompileÚmatchr"   ÚgroupsÚfindr!   rA   rD   rE   )rF   r0   rG   Úhtmlr3   rU   Ú_DATE_OKÚpub_dateÚ_patÚbodyÚiÚstartÚjÚrawrJ   s    `             r   Úfetch_detailrp   P   sÍ  ø€ ð=Ø�K‰K˜´BÄ8ÐN_ÑC_Ñ%`ÐjlˆKÓmˆØˆŒ
Ø�v‰vˆØˆÜ�I‰IÐDÀdÓKˆÙÜ §¡¨£
Ó+ˆEÙÜ—	‘	ÐDÀdÓKˆAÙÜ# A§G¡G¨A£JÓ/�ô —:‘:Ð8Ó9ˆØˆÜ�I‰IÐGÈÓNˆÙ�—‘ §¡¨£
× 0Ñ 0Ó 2Ô3Ø—w‘w˜q“z×'Ñ'Ó)ˆHÙðGò �ä—I‘I˜d DÓ)�ÚØ Ÿw™w q›z�HÙðñ ä—	‘	Ð6¸º	¸rÓBˆAÙØ%¨¯©«
Ñ2�ÙÜ—	‘	Ð4°dÓ;ˆAÙØŸ7™7 1›:�àˆØ�I‰I�kÓ"ˆØ�‹6Ø—I‘I˜c 1Ó%¨Ñ)ˆEØ—	‘	˜) UÓ+ˆAØ�1ŠuØ˜5 �m�Ü—f‘fÐ8¸"¸cÓB�Ü—f‘fÐ6¸¸CÓ@�ä—f‘fÐ0Ñ2uÐwzÓ{�Ü—f‘fÐ/Ñ1sÐuxÓy�Ü—f‘fÐ.ó  1mð  oró  s�Ü—f‘fÐ-ó  0oð  qtó  u�Ü—f‘fÐ/°°SÓ9�Ü—f‘fÐmÐoqÐsvÓw�Ø—y‘y“{�Ù”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús   ƒD8K Ä<F K Ë	LË&K>Ë>Lc                  óD  — t        «       \  } }| st        } t        dt        › d| › �d¬«       t	        j
                  «       }|j                  j                  dt        i«       g }t        «       }t        d| dz   «      D ]ž  }t        ||«      }d}|D ]4  }|d   |v rŒ|j                  |d   «       |j                  |«       |dz  }Œ6 t        d	|› d
t        |«      › d|› dt        |«      › �d¬«       |st        d|› d�d¬«        nt        j                   d«       Œ  t        dt        |«      › d�d¬«       |rt        |«      |kD  r|d | }g }	t#        |«      D �]j  \  }
}t%        ||d   «      \  }}}|xs |d   }|xs |j'                  dd«      }|rt)        j*                  dd|«      n|}t)        j*                  dd|«      j-                  «       d d }g }|rjt)        j.                  d|t(        j0                  «      D ]B  }|j                  |j3                  d«      j-                  «       |j3                  d«      dœ«       ŒD |	j                  t        |d   |d   ||||t4        |rt7        j8                  |d¬«      nddœ	«       |
dz   dz  dk(  rt        d |
dz   › d!t        |«      › �d¬«       t        j                   d"«       �Œm t        d#t        |	«      › d$�d¬«       t;        |	t        ¬%«       t=        d&„ |	D «       «      }t        d't        |	«      › d(|› �d¬«       y ))Nz[CJGJGXQ] SITE=z max_pages=Tr:   r
   r   r   r8   z  Page r9   u   æ�¡(æ–°u   ) ç´¯è®¡z  [END] page z emptygš™™™™™Ù?u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...r3   r5   r   z<[^>]+>r   r   i,  zQ<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps))"[^>]*>([^<]*)</a>é   )Únamer0   F)Úensure_ascii)	Ú	site_nameÚ
source_urlr0   r3   ri   r/   ÚsummaryÚcategoryÚattachmentsr6   z	  detail r2   g333333Ó?z
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)r/   r   r   N)r>   r"   )Ú.0rG   s     r   ú	<genexpr>zmain.<locals>.<genexpr>Ç   s)   è ø€ ÒK�a¨1¯5©5°Ó+;Ò+A¸r×*HÑ*HÕ*J”ÑKùs   ‚(2«2z  DONE. pushed=u    ç©ºæ­£æ–‡=)r   Ú	MAX_PAGESrE   Ú	SITE_NAMEÚrequestsÚSessionrM   Úupdater_   ÚsetÚrangerK   ÚaddrB   rA   ÚtimeÚsleepÚ	enumeraterp   r>   r    r!   r"   ÚfinditerÚIrS   ÚCATEGORYr@   Údumpsr   Úsum)Ú	max_pagesr   rF   Ú	all_itemsÚseenÚpgrH   Ú	new_countrI   Úresultsrl   Úd_titleÚd_daterk   r3   ri   rw   ÚattsrU   Úemptys                       r   Úmainr˜   ’   s  € Ü!“|Ñ€IˆuÙÜˆ	Ü	ˆOœI˜; k°)°Ð
=ÀTÕJä×ÑÓ €GØ‡O�O×Ñ˜L¬"Ð-Ô.à€IÜ‹5€DÜ�A�y 1‘}Ó%ò ˆÜ˜7 BÓ'ˆØˆ	Øò 	ˆBØ�&‰z˜TÑ!ØØ�H‰H�R˜‘ZÔ Ø×Ñ˜RÔ Ø˜‰N‰Ið	ô 	�˜�t˜2œc %›j˜\¨°°¸8ÄCÈ	ÃNÐCSÐTÐ\`ÕaÙÜ�M "  VÐ,°DÕ9ÙÜ�
‰
�3�ðô 
ˆNœ3˜y›>Ð*Ð*<Ð
=ÀTÕJÙ”�Y“ %Ò'Ø˜f˜uÐ%ˆ	à€GÜ˜9Ó%ó ‰ˆˆ2Ü ,¨W°b¸±jÓ AÑˆ�˜ØÒ&˜2˜g™;ˆØÒ/˜RŸV™V F¨BÓ/ˆÙ37”"—&‘&˜ S¨$Ô/¸UˆÜ—&‘&˜  gÓ.×4Ñ4Ó6°t¸Ð<ˆØˆÙÜ—[‘[Ð!uÐw{Ô}÷  ~Bñ  ~Bó  Cò M�Ø—‘ Q§W¡W¨Q£Z×%5Ñ%5Ó%7ÀÇÁÈÃ
ÑKÕLðMà�‰Ü"°"°V±*ÀRÈÁZØ¨¸TØ¬HÙCGœ4Ÿ:™: d¸Õ?ÈRñ	
ô 	ð �‰E�R‰<˜1ÒÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4¸DÕAÜ�
‰
�3Žð%ô( 
ˆJ”s˜7“|�nÐ$9Ð
:À$ÕGÜ�W¬)Õ4ÜÑK˜7ÔKÓK€EÜ	ˆOœC ›L˜>¨°U°GÐ
<ÀDÖIr   Ú__main__)!Ú__doc__Úosr   r    r†   r@   rg   r   r€   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rC   r?   r   r‹   r<   r~   r=   r_   ÚHEADERSr   r$   rK   rp   r˜   Ú__name__© r   r   ú<module>r¦      s·   ðñ
÷ 1× 0× 0Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à"€Ø�oÑ%€Ø0€	Ø€Ø€Ø€	Ø€	àv€Ø¨Ð3DÑ(DÑ
E€òòòò:?òD6Jðr ˆzÒÙ…Fð r   