Ë
    æ({jò$  ã                   ót  — 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dZdZedz   Zd	d
ddddddœZdZdZdZededz   dœZd„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)u@  
æµŽå�—å¸‚å•†æ²³åŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
åˆ—è¡¨: http://www.shanghe.gov.cn/col/col22822/index.html
  Hanweb 6.4.2.4 åŠ¨æ€�æž„å»º: GET /api-gateway/jpaas-publish-server/front/page/build/unit
  queryData: parseType=bulidstatic, webId=87, tplSetId=NcANWdo2pAbHvfVcDfN0x,
             pageType=column, tagId=å½“å‰�åˆ—è¡¨, editType=null, pageId=22822
  åˆ†é¡µ: paramJson={"pageNo":N,"pageSize":M} (é»˜è®¤15/é¡µ)
  åˆ—è¡¨ HTML: <li><a title="æ ‡é¢˜" href="/col22822/art/YYYY/art_xxx.html">æ ‡é¢˜</a><span>YYYY-MM-DD</span></li>
è¯¦æƒ…: /col/col22822/art/YYYY/art_xxx.html
  æ ‡é¢˜: <h1>; æ—¥æœŸ: div.msg "æ—¶é—´ï¼šYYYY-MM-DD HH:MM"; æ­£æ–‡: div#zoom
  é™„ä»¶: <a href="/api-gateway/.../download-m?fileUrl=..." data-link="/cms_files/filemanager/...">é™„ä»¶å��</a>
ç”¨æ³•: python3 crawl_shanghe_tzgg.py [--pages=N] [--limit=N]
é    N)Úurljoin)Úpush_to_searchdbzhttp://www.shanghe.gov.cnu   æµŽå�—å¸‚å•†æ²³åŽ¿-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šz7/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ87ÚNcANWdo2pAbHvfVcDfN0xÚcolumnu   å½“å‰�åˆ—è¡¨ÚnullÚ22822)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdé   z
2020-01-01zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z.application/json, text/javascript, */*; q=0.01z/col/col22822/index.html)ú
User-AgentÚAcceptÚRefererc                  óþ   — d} d}t         j                  dd  D ]`  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|j                  d«      sŒDt        |j	                  d«      d   «      }Œb | |fS )Nr   é   z--pages=ú=z--limit=)ÚsysÚargvÚ
startswithÚintÚsplit)ÚpagesÚlimitÚas      ú'/root/gov_crawler/crawl_shanghe_tzgg.pyÚ
parse_argsr"   +   su   € Ø€EØ€EÜ�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.   6   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr#   c                 ó   — 	 t        t        «      }t        j                  |t        dœ«      |d<   | j                  t        |t        d¬«      }|j                  «       }|j                  di «      j                  dd«      }|sg S g }t        «       }t        j                  d|«      D ]«  }|j                  d	«      |j                  d
«      |j                  d«      j                  «       }}
}	|
|v rŒI|j                  |
«       |
j                  d«      st        t         |
«      n|
}
t#        |	«      }t%        |«      dk  rŒ—|j'                  ||
|dœ«       Œ­ |S # t(        $ r}t+        d|› d|› �d¬«       g cY d}~S d}~ww xY w)u6   è¯·æ±‚ build/unit æŽ¥å�£, è¿”å›ž [{title, href, date}])ÚpageNoÚpageSizeÚ	paramJsoné   )ÚparamsÚheadersÚtimeoutÚdataÚhtmlr%   zH<a title="([^"]+)"[^>]*href="([^"]+)"[^>]*>[^<]*</a><span>([^<]+)</span>r   é   é   Úhttpé   )ÚtitleÚhrefÚdatez    [ERR] page ú: T©ÚflushN)ÚdictÚ
QUERY_DATAÚjsonÚdumpsÚ	PAGE_SIZEÚgetÚAPI_URLÚHEADERSÚsetr*   ÚfinditerÚgroupr,   Úaddr   r   ÚBASE_URLr.   ÚlenÚappendÚ	ExceptionÚprint)ÚsessionÚpageÚqdÚrÚdr8   ÚitemsÚseenÚmr=   r>   r?   r-   Úes                 r!   Ú
fetch_pager]   >   sR  € ðÜ”*ÓˆÜŸ*™*°Ä)Ñ%LÓMˆˆ;‰Ø�K‰Kœ¨´GÀRˆKÓHˆØ�F‰F‹HˆØ�u‰u�V˜RÓ ×$Ñ$ V¨RÓ0ˆÙØˆIØˆÜ‹uˆä—‘ÐhÐjnÓoò 		CˆAØ !§¡¨£
¨A¯G©G°A«J¸¿¹À»
×8HÑ8HÓ8J˜�4ˆEØ�t‰|ØØ�H‰H�TŒNØ26·/±/À&Ô2I”7œ8 TÔ*ÈtˆDÜ˜EÓ"ˆAÜ�1‹v˜ŠzØØ�L‰L 1¨d¸DÑAÕBð		Cð ˆøÜò Ü� ˜v R¨ sÐ+°4Õ8Ø�	ûðús%   ‚B E ÂCE Å	E=ÅE8Å2E=Å8E=c                 ó˜  ‡— 	 | j                  ‰t        t        dz   dœd¬«      }d|_        |j                  }d}t        j                  d|«      }|rt        |j                  d«      «      }|sDt        j                  d	|«      }|r,t        |j                  d«      j                  d
«      d   «      }d}t        j                  d|«      }|r|j                  d«      }|s_t        j                  d|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}|j                  d«      }|dk\  �r5|j                  d|«      dz   }	d}
|	}|t        |«      k  rJ|
dkD  rE|||dz    dk(  r|
dz  }
|dz  }n|||dz    dk(  r|
dz  }
|dz  }n|dz  }|t        |«      k  r|
dkD  rŒE||	|dz
   }t        j                  dd|«      }t        j                  dd|«      }ˆfd„}t        j                  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)(uG   è¯¦æƒ…: h1 æ ‡é¢˜ + div.msg æ—¶é—´ + div#zoom æ­£æ–‡ + é™„ä»¶ data-linkú/)r   r   r3   )r5   r6   zutf-8r%   z<h1[^>]*>([^<]+)</h1>r   z<title>([^<]+)</title>Ú_r   u&   æ—¶é—´[ï¼š:]\s*(\d{4}-\d{1,2}-\d{1,2})z(\d{4})-(\d{1,2})-(\d{1,2})z%s-%02d-%02dr9   r:   z	id="zoom"ú>r<   z<divé   z</div>z<script[\s\S]*?</script>z<style[\s\S]*?</style>c                 ó|  •— | j                  d«      }| j                  d«      }t        j                  d|«      }|rS|j                  d«      }|j                  d«      st	        t
        |«      }|j                  | j                  d«      |«      S |j                  d«      s|j                  |t	        ‰|«      «      S |S )Nr   r   zdata-link="([^"]+)"r;   ©r;   ú#Ú
javascript)rM   r*   Úsearchr   r   rO   Úreplace)r[   r>   ÚattÚdlÚrealÚurls        €r!   Ú
fix_attachz fetch_detail.<locals>.fix_attach‡   s™   ø€ Ø—w‘w˜q“z�Ø—g‘g˜a“j�Ü—Y‘YÐ5°sÓ;�ÙØŸ8™8 A›;�DØŸ?™?¨6Ô2Ü&¤x°Ó6˜ØŸ;™; q§w¡w¨q£z°4Ó8Ð8Ø—‘Ð'BÔCØŸ;™; t¬W°S¸$Ó-?Ó@Ð@Ø�
r#   z<a[^>]*href="([^"]*)"[^>]*>zhref="([^"]*)"c                 ó¦   •— d| j                  d«      j                  d«      st        ‰| j                  d«      «      z  S | j                  d«      z  S )Nz	href="%s"r   rd   ©rM   r   r   ©r[   rl   s    €r!   ú<lambda>zfetch_detail.<locals>.<lambda>”   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:rf   ro   rp   s    €r!   rq   zfetch_detail.<locals>.<lambda>•   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>é   z    [ERR] detail r@   TrA   N)r%   r%   r%   )rH   ÚUArO   ÚencodingÚtextr*   rg   r.   rM   r   r   ÚfindrP   r+   r,   rR   rS   )rT   rl   rW   r8   r=   r[   Úpub_dateÚbodyÚiÚstartÚdepthÚjÚrawrm   r\   s    `             r!   Úfetch_detailr   [   sÄ  ø€ ðAØ�K‰K˜´BÄ8ÈcÁ>Ñ%RÐ\^ˆKÓ_ˆØˆŒ
Ø�v‰vˆàˆÜ�I‰IÐ.°Ó5ˆÙÜ §¡¨£
Ó+ˆEÙÜ—	‘	Ð3°TÓ:ˆAÙÜ# A§G¡G¨A£J×$4Ñ$4°SÓ$9¸!Ñ$<Ó=�àˆÜ�I‰IÐ?ÀÓFˆÙØ—w‘w˜q“zˆHÙÜ—	‘	Ð8¸$Ó?ˆAÙØ)¨Q¯W©W°Q«Z¼¸Q¿W¹WÀQ»Z»Ì#ÈaÏgÉgÐVWËjË/Ð,ZÑZ�àˆØ�I‰I�kÓ"ˆØ�‹6Ø—I‘I˜c 1Ó%¨Ñ)ˆEØˆEØˆAØ”c˜$“i’- E¨A¢IØ˜˜!˜A™#�; &Ò(Ø˜Q‘J�EØ˜‘F‘AØ˜!˜A˜a™C�[ HÒ,Ø˜Q‘J�EØ˜‘F‘Aà˜‘F�Að ”c˜$“i’- E¨A£Ið �u˜Q˜q™S�/ˆCÜ—&‘&Ð4°b¸#Ó>ˆCÜ—&‘&Ð2°B¸Ó<ˆCôô —&‘&Ð7¸ÀSÓIˆCÜ—&‘&Ð*ó  -ið  knó  oˆCÜ—&‘&Ð)ó  ,kð  mpó  qˆCÜ—&‘&Ð+¨R°Ó5ˆCÜ—&‘&ÐiÐkmÐorÓsˆCØ—9‘9“;ˆDÙ”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús   ƒGJ# ÇCJ# Ê#	K	Ê,KËK	c                  ó   — t        «       \  } }t        dt        › d| › d|› �d¬«       t        j                  «       }|j
                  j                  dt        i«       g }t        «       }| dk  rd} 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 �cg c]!  }|j!                  d«      xs dt"        k\  sŒ |‘Œ# }}t        |«      |	k  r$t        dt"        › d|	t        |«      z
  › d�d¬«       t        dt        |«      › d�d¬«       |rt        |«      |kD  r|d | }g }
t%        |«      D �]¨  \  }}t'        ||d	   «      \  }}}|xs |d   }|xs |j!                  dd«      }|rt)        j*                  dd|«      n|}t)        j*                  dd|«      j-                  «       d d }g }|r¨t)        j.                  d|t(        j0                  «      D ]€  }|j3                  d«      }|j3                  d«      j-                  «       }|s5t)        j4                  d|«      }|rdd lm}  ||j3                  d«      «      }|sŒm|j                  ||d!œ«       Œ‚ |
j                  t        |d	   |d	   ||||t:        |rt=        j>                  |d"¬#«      ndd$œ	«       |dz   d%z  dk(  rt        d&|dz   › d't        |«      › �d¬«       t        j                  d(«       �Œ« t        d)t        |
«      › d*�d¬«       tA        |
t        ¬+«       tC        d,„ |
D «       «      }t        d-t        |
«      › d.|› �d¬«       y c c}w )/Nz[SHANGHE] SITE=z pages=z limit=TrA   r   r   r   r>   z  [page z] u   æ�¡(æ–°u	   ), ç´¯è®¡u   ] ç©ºé¡µ, å�œæ­¢ç¿»é¡µgš™™™™™Ù?r?   Ú9999z	  CUTOFF u    è¿‡æ»¤ u    æ�¡u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...r=   r%   z<[^>]+>r'   r&   i,  zV<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps)[^"]*)"[^>]*>([^<]*)</a>r9   z[?&]fileName=([^&]+))Úunquote)Únamerl   F)Úensure_ascii)	Ú	site_nameÚ
source_urlrl   r=   rx   ÚcontentÚsummaryÚcategoryÚattachmentsé
   z	  detail r_   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)rH   r,   )Ú.0rW   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"   rS   Ú	SITE_NAMEÚrequestsÚSessionr5   Úupdatert   rK   Úranger]   rN   rQ   rP   ÚtimeÚsleeprH   ÚCUTOFFÚ	enumerater   r*   r+   r,   rL   ÚIrM   rg   Úurllib.parser‚   ÚCATEGORYrE   rF   r   Úsum)r   r   rT   Ú	all_itemsrZ   ÚpgrY   Ú	new_countÚitÚbeforeÚresultsrz   Úd_titleÚd_datery   r=   rx   rˆ   Úattsr[   r>   rƒ   Úfmr‚   Úemptys                            r!   Úmainr¨   ¡   sÇ  € Ü“<�L€Eˆ5Ü	ˆOœI˜; g¨e¨W°G¸E¸7Ð
CÈ4ÕPä×ÑÓ €GØ‡O�O×Ñ˜L¬"Ð-Ô.à€IÜ‹5€DØ�‚zØˆÜ�A�u˜q‘yÓ!ò ˆÜ˜7 BÓ'ˆØˆ	Øò 	ˆBØ�&‰z˜TÑ!ØØ�H‰H�R˜‘ZÔ Ø×Ñ˜RÔ Ø˜‰N‰Ið	ô 	�˜˜˜Bœs 5›z˜l¨'°)°¸IÄcÈ)ÃnÐEUÐVÐ^bÕcÙÜ�H˜R˜DÐ 6Ð7¸tÕDÙÜ�
‰
�3�ðô �‹^€FØ'ÖP˜¨B¯F©F°6«NÒ,D¸fÌÓ+O’ÐP€IÐPÜ
ˆ9ƒ~˜ÒÜ�	œ&˜ ¨&´3°y³>Ñ*AÐ)BÀ$ÐGÈtÕTä	ˆ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¸Ð<ˆØˆÙä—[‘[Ð!zð  }Aô  CE÷  CGñ  CGó  Hò 
9�Ø—w‘w˜q“z�Ø—w‘w˜q“z×'Ñ'Ó)�ÙÜŸ™Ð#:¸DÓA�BÙÝ8Ù& r§x¡x°£{Ó3˜ÙØØ—‘ T°$Ñ7Õ8ð
9ð 	�‰Ü"°"°V±*ÀRÈÁZØ¨¸TØ¬HÙCGœ4Ÿ:™: d¸Õ?ÈRñ	
ô 	ð �‰E�R‰<˜1ÒÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4¸DÕAÜ�
‰
�3Žð9ô< 
ˆJ”s˜7“|�nÐ$9Ð
:À$ÕGÜ�W¬)Õ4ÜÑK˜7ÔKÓK€EÜ	ˆOœC ›L˜>¨°U°GÐ
<ÀDÖIùòU Qs   Ä/!OÅOÚ__main__)!Ú__doc__Úosr   r*   r•   rE   r8   r(   r‘   rš   r   ÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rO   r�   r›   rI   rD   rG   r—   rt   rJ   r"   r.   r]   r   r¨   Ú__name__© r#   r!   ú<module>r´      sâ   ðñ÷ 1× 0× 0Û Ý  à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à&€Ø-€	Ø€Ø
ÐNÑ
N€àØØ'ØØØØñ€
ð €	Ø	€àv€ØÐ'WÐdlð  pJñ  eJñ  K€òòòò:CòLEJðP ˆzÒÙ…Fð r#   