Ë
    =�yjÃ  ã                   ód  — 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edz   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)uC  
å�—å¹³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å…¬ç¤ºå…¬å‘Š (gsgg) çˆ¬è™«
åˆ—è¡¨: https://hbj.np.gov.cn/cms/html/npshjbhj/gsgg/index.html
  YLCMS æž¶æž„, é�™æ€�åˆ†é¡µ ?page=N (å…±50é¡µ)
è¯¦æƒ…: /cms/html/npshjbhj/YYYY-MM-DD/NUMBER.html
  æ­£æ–‡: <DIV class="content" id="Content">
ç”¨æ³•: python3 crawl_np_hbj_gsgg.py [--pages=N] [--limit=N]
é    N)Úurljoin)Úpush_to_searchdbzhttps://hbj.np.gov.cnz"/cms/html/npshjbhj/gsgg/index.htmlz=/cms/sitemanage/index.shtml?siteId=100433125043450000&page={}u%   å�—å¹³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šu   å…¬ç¤ºå…¬å‘Šé2   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36)ú
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_np_hbj_gsgg.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| «      } t        j                  dd| «      } | j	                  «       S )NÚ z&nbsp;|\xa0ú z[\u200b\u200e\u200f\ufeff]ú\s+u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r   Úclean_titler    (   sl   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰ˆ~˜s AÓ&€AÜ
�‰Ð,¨b°!Ó4€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr   c                 óò  — |dk(  rt         }nt        j                  |«      }	 | j                  |d¬«      }d|_        |j
                  }g }t        «       }t        j                  d|t        j                  «      D ]Ï  }|j                  d«      |j                  d«      j                  «       }	}||v rŒ8|j                  |«       |j                  d«      st        t        |«      n|}t!        |	«      }
t#        |
«      dk  sd	|
v sd
|
v rŒŽd}t        j$                  d|«      }|rd|j'                  «       z  }|j)                  |
||dœ«       ŒÑ |S # t*        $ r}t-        d|› d|› �d¬«       g cY d }~S d }~ww xY w)Nr	   é   )Útimeoutúutf-8zQ<A\s+href="([^"]*cms/html/npshjbhj/\d{4}-\d{2}-\d{2}/\d+\.html)"[^>]*>([^<]*)</A>é   Úhttpé   u   è�”ç³»æˆ‘ä»¬u   è®¿é—®ç»Ÿè®¡r   z(\d{4})-(\d{2})-(\d{2})z%s-%s-%s)ÚtitleÚhrefÚdatez    [ERR] list page ú: T©Úflush)ÚLIST_URLÚLIST_PAGE_URLÚformatÚgetÚencodingÚtextÚsetr   ÚfinditerÚIÚgroupr   Úaddr   r   ÚBASE_URLr    ÚlenÚsearchÚgroupsÚappendÚ	ExceptionÚprint)ÚsessionÚpageÚurlÚrÚhtmlÚitemsÚseenÚmr)   r(   r   r*   ÚdmÚes                 r   Ú
fetch_listrJ   1   si  € Øˆq‚yÜ‰ä×"Ñ" 4Ó(ˆðØ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆØˆÜ‹uˆÜ—‘ÐuÐw{Ô}÷  ~Bñ  ~Bó  Cò 	CˆAØŸ'™' !›* a§g¡g¨a£j×&6Ñ&6Ó&8�%ˆDØ�t‰|ØØ�H‰H�TŒNØ26·/±/À&Ô2I”7œ8 TÔ*ÈtˆDÜ˜EÓ"ˆAÜ�1‹v˜Šz˜^¨qÑ0°NÀaÑ4GØØˆDÜ—‘Ð5°tÓ<ˆBÙØ! B§I¡I£KÑ/�Ø�L‰L 1¨d¸DÑAÕBð	Cð ˆøÜò ÜÐ$ T F¨"¨Q¨CÐ0¸Õ=Ø�	ûðús   £D*E Å	E6ÅE1Å+E6Å1E6c                 óº  ‡— 	 | j                  ‰t        d¬«      }d|_        |j                  }d}t	        j
                  d|«      }|r>t        |j                  d«      j                  d«      d   j                  d	«      d   «      }d}t	        j
                  d
|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}ddl
m}  ||d«      }	dD �]Ÿ  }
|	j                  |
«      }|r0t        |j                  dd¬«      «      dk  r|j                  d«      sŒH|j!                  d«      D ]  }|j#                  «        Œ dD ](  }|j!                  |«      D ]  }|j#                  «        Œ Œ* |j%                  t	        j&                  d«      ¬«      D ]9  }|j)                  d«      xs |j)                  d«      }|sŒ*|j#                  «        Œ; t+        |«      }t	        j,                  dˆfd„|«      }t	        j,                  dˆfd„|«      }t	        j,                  d d|«      }t	        j,                  d!d|«      }t	        j,                  d"d|«      }|j/                  «       }t        |«      dk\  s�Œ  n |rt        |«      dk  rd}|||fS # t0        $ r}t3        d#‰› d$|› �d¬%«       Y d&}~y'd&}~ww xY w)(uf   è¯¦æƒ…: <DIV class="content" id="Content">  (ç”¨ BeautifulSoup æ��å�–, é�¿å…�æ·±åº¦åŒ¹é…�å�ƒè¿›é¡µè„š)r"   )Úheadersr#   r$   r   z<title>([^<]+)</title>r	   Ú_r   ú-z(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dr%   é   )ÚBeautifulSoupzhtml.parser)z#Contentzdiv.contentz.TRS_Editorz.viewr   T)r   é   Úimgzscript, style)z.ewmz.ewm-1z.ewm-2z.ewm_boxz.qrcodeu:   æ‰«ä¸€æ‰«|åˆ†äº«åˆ°|æ‰“å�°æœ¬é¡µ|å…³é—­çª—å�£|æ‰‹æœºæ‰“å¼€)ÚstringÚpÚdivzhref="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nz	href="%s"r	   )r&   ú#Ú
javascript©r7   r   r   ©rG   rB   s    €r   ú<lambda>zfetch_detail.<locals>.<lambda>q   sq   ø€ °kÐef×elÑelÐmnÓeo×ezÑezð  |Wô  fXÄWÈSÐRS×RYÑRYÐZ[ÓR\ÓE]ñ  7i€ ð  ^_÷  ^eñ  ^eð  fgó  ^hñ  7i€ r   zsrc="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nzsrc="%s"r	   )r&   zdata:rX   rY   rZ   s    €r   r[   zfetch_detail.<locals>.<lambda>r   sq   ø€ °ZÐcd×cjÑcjÐklÓcm×cxÑcxð  zYô  dZÄ7È3ÐPQ×PWÑPWÐXYÓPZÓC[ñ  6k€ ð  `a÷  `gñ  `gð  hió  `jñ  6k€ r   z\sstyle="[^"]*"zM<span[^>]*>|</span>|<strong[^>]*>|</strong>|<b[^>]*>|</b>|<font[^>]*>|</font>u8   <p[^>]*>\s*(?:æ‰«ä¸€æ‰«|åˆ†äº«åˆ°|æ‰“å�°æœ¬é¡µ)[^<]*</p>z    [ERR] detail r+   r,   N)r   r   r   )r1   ÚHEADERSr2   r3   r   r;   r    r7   r   r   Úbs4rP   Ú
select_oner:   Úget_textÚfindÚselectÚ	decomposeÚfind_allÚcompileÚfind_parentÚstrr   r   r>   r?   )r@   rB   rC   rD   r(   rG   Úpub_dateÚbodyrP   ÚsoupÚselÚelÚbadÚbad_selÚbÚnoderT   ÚrawrI   s    `                 r   Úfetch_detailrr   P   s®  ø€ ð,Ø�K‰K˜¤W°bˆKÓ9ˆØˆŒ
Ø�v‰vˆØˆÜ�I‰IÐ/°Ó6ˆÙÜ §¡¨£
× 0Ñ 0°Ó 5°aÑ 8× >Ñ >¸sÓ CÀAÑ FÓGˆEØˆÜ�I‰IÐ4°dÓ;ˆÙØ%¨¯©°«´S¸¿¹À»³_ÄcÈ!Ï'É'ÐRSË*ÃoÐ(VÑVˆHØˆÝ%Ù˜T =Ó1ˆØFó 	ˆCØ—‘ Ó%ˆBáœ#˜bŸk™k¨#°T˜kÓ:Ó;¸bÒ@ÈÏÉÐQVÌØØ—y‘y Ó1ò  �Ø—‘•ð ð Oò "�ØŸ™ 7Ó+ò "�AØ—K‘K•Mñ"ð"ð Ÿ™¬2¯:©:Ð6sÓ+t˜Óuò "�Ø×$Ñ$ SÓ)ÒD¨T×-=Ñ-=¸eÓ-D�ÚØ—K‘K•Mð"ô �b“'ˆCÜ—&‘&Ð*ó  -ið  knó  oˆCÜ—&‘&Ð)ó  ,kð  mpó  qˆCÜ—&‘&Ð+¨R°Ó5ˆCÜ—&‘&ÐiÐkmÐorÓsˆCÜ—&‘&ÐTÐVXÐZ]Ó^ˆCØ—9‘9“;ˆDÜ�4‹y˜BŒÙð/	ñ0 ”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús%   ƒG J4 Ç$B4J4 ÊJ4 Ê4	KÊ=KËKc                  óL  — 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 �]n  \  }
}t%        ||d   «      \  }}}|xs |d   }|j'                  dd«      xs |xs 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"«       �Œq t        d#t        |	«      › d$�d¬«       t;        |	t        ¬%«       t=        d&„ |	D «       «      }t        d't        |	«      › d(|› �d¬«       y ))Nz[NP-HBJ] SITE=z max_pages=Tr,   r   r	   r   r)   z  Page r+   u   æ�¡(æ–°u   ) ç´¯è®¡z  [END] page z emptyg333333Ó?u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...r(   r*   r   z<[^>]+>r   r   i,  zQ<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps))"[^>]*>([^<]*)</a>r%   )ÚnamerB   F)Úensure_ascii)	Ú	site_nameÚ
source_urlrB   r(   rh   ÚcontentÚsummaryÚcategoryÚattachmentsé
   z	  detail ú/gš™™™™™É?z
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)rx   r   r	   N)r1   r   )Ú.0rC   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_PAGESr?   Ú	SITE_NAMEÚrequestsÚSessionrL   ÚupdateÚUAr4   ÚrangerJ   r8   r=   r:   ÚtimeÚsleepÚ	enumeraterr   r1   r   r   r   r5   r6   r7   ÚCATEGORYÚjsonÚdumpsr   Úsum)Ú	max_pagesr   r@   Ú	all_itemsrF   ÚpgrE   Ú	new_countÚitÚresultsÚiÚd_titleÚd_dateri   r(   rh   ry   ÚattsrG   Úemptys                       r   Úmainr›   �   s  € Ü!“|Ñ€IˆuÙÜˆ	Ü	ˆNœ9˜+ [°°Ð
<ÀDÕIä×ÑÓ €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™;ˆà—6‘6˜& "Ó%Ò5¨Ò5°2ˆÙ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�   rD   r   r„   Úurllib.parser   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r9   r.   r/   rƒ   rŒ   r‚   r‡   r]   r   r    rJ   rr   r›   Ú__name__© r   r   ú<module>r¨      s¹   ðñ÷ 1× 0× 0Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à"€ØÐ:Ñ:€àÐZÑZ€Ø3€	Ø€Ø€	àv€Ø¨Ð3WÑ(WÑ
X€òòòò>.òb7Jðt ˆzÒÙ…Fð r   