Ë
    ¸¬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mZ ddl	m
Z
mZ ddlZddlmZ ddlZ ej                   d«       dZdZd	Zd
Zej*                  j-                  dd«      ZdZdZdZdZde› de› d�dœZd„ Zd„ Zd„ Zdd„Z e!dk(  rI ejD                  «       Z#e#jI                  de%d¬«       e#jM                  «       Z' e e'jP                  ¬«       yy)uŸ  
èˆŸå±±é«˜æ–°æŠ€æœ¯äº§ä¸šå›­åŒºç®¡ç�†å§”å‘˜ä¼š - é€šçŸ¥å…¬å‘Šçˆ¬è™«
URL: http://gxq.zhoushan.gov.cn/col/col1229339186/index.html
CMS: JCMS (é›†å›¢ç½‘ç«™ç¾¤) - æµ™æ±Ÿçœ�æ”¿åºœç½‘ç«™ç¾¤
åˆ—è¡¨: API GET /api-gateway/jpaas-publish-server/front/page/build/unit (10æ�¡/é¡µ, å…±60æ�¡6é¡µ)
è¯¦æƒ…: /col/col1229339186/art/YYYY/art_XXXXXXXXXXXX.html (é�™æ€�HTML, å�«#zoomæ­£æ–‡)
æ—¥è·‘: --max-pages 1 (å¢žé‡�å�–æœ€æ–°ä¸€é¡µ)
é    N)Údatetime)ÚurljoinÚ	urlencode)ÚBeautifulSoupÚignorezhttp://gxq.zhoushan.gov.cnu-   èˆŸå±±é«˜æ–°æŠ€æœ¯äº§ä¸šå›­åŒºç®¡ç�†å§”å‘˜ä¼šu   é€šçŸ¥å…¬å‘Šu	   æµ™æ±Ÿçœ�ÚDB_PATHz/mnt/data/search.dbÚ
1229339186Ú3062ÚBS3nV4yH2bkBfJ7b85psFé
   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z/col/colz/index.html)z
User-AgentÚRefererc           	      ó¾  — t         › d�}t        j                  | t        dœd¬«      }dt        t
        dddt        |d	œ}g }	 t        j                  ||t        d
¬«      }|j                  «        |j                  «       }|d   d   }t        |d«      }|j                  d«      D �]Š  }	|	j                  d«      }
|
sŒ|
j                  dd«      }|
j                  d«      xs |
j                  d¬«      xs dj                  «       }|r|rt!        |«      dk  rŒt|j#                  d«      rt         › |› �}n+|j#                  d«      st         › d|j%                  d«      › �}|	j                  d«      }|	j                  d«      }d}|r@|r>|j                  d¬«      }|j                  d¬«      }|r|r|› d|j'                  d«      › �}|sS|	j                  d«      D ]?  }|j                  d¬«      }t)        j*                  d|«      }|sŒ.|j-                  d«      } n |j/                  |||d œ«       �Œ� |S # t0        $ r}t3        d!| › d"|› �d¬#«       g cY d$}~S d$}~ww xY w)%u   é€šè¿‡ API èŽ·å�–æ–‡ç« åˆ—è¡¨z7/api-gateway/jpaas-publish-server/front/page/build/unit)ÚpageNoÚpageSizeF)Úensure_asciiÚbulidstaticÚcolumnu   æ–‡ç« åˆ—è¡¨æˆ–æ­£æ–‡Únull)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdÚ	paramJsoné   )ÚparamsÚheadersÚtimeoutÚdataÚhtmlúhtml.parserÚliza[href]ÚhrefÚ ÚtitleT)Ústripé   ú/Úhttpz.dayz.dateú-é   Úspanz(\d{4}-\d{2}-\d{2})é   )Úurlr'   Údateu     [é”™è¯¯] åˆ—è¡¨é¡µ u    è¯·æ±‚å¤±è´¥: ©ÚflushN)ÚBASE_URLÚjsonÚdumpsÚ	PAGE_SIZEÚWEB_IDÚ
TPL_SET_IDÚ	COLUMN_IDÚrequestsÚgetÚHEADERSÚraise_for_statusr   ÚselectÚ
select_oneÚget_textr(   ÚlenÚ
startswithÚlstripÚzfillÚreÚsearchÚgroupÚappendÚ	ExceptionÚprint)Úpager0   Ú
param_jsonr   ÚitemsÚrespr!   r"   Úsoupr$   Úa_tagr%   r'   Úday_elÚdate_elÚpublish_dateÚymÚdr.   ÚtxtÚmÚes                         ú,/root/gov_crawler/crawl_zhoushan_gxq_tzgg.pyÚ
fetch_listr[   $   sW  € äˆJÐMÐ
N€CÜ—‘ t¼ÑCÐRWÔX€Jà"ÜÜØØ(ØÜØñ	€Fð €Eð-Ü�|‰|˜C¨¼ÈÔLˆØ×ÑÔØ�y‰y‹{ˆØ�F‰|˜FÑ#ˆä˜T =Ó1ˆØ—+‘+˜dÓ#ó "	ˆBØ—M‘M )Ó,ˆEÙØØ—9‘9˜V RÓ(ˆDØ—Y‘Y˜wÓ'ÒK¨5¯>©>À¨>Ó+EÒKÈ×RÑRÓTˆEÙ¡¬¨E«
°QªØØ�‰˜sÔ#Ü"˜ D 6Ð*‘Ø—_‘_ VÔ,Ü"˜ 1 T§[¡[°Ó%5Ð$6Ð7�ð —]‘] 6Ó*ˆFØ—m‘m GÓ,ˆGØˆLÙ™6Ø×%Ñ%¨DÐ%Ó1�Ø—O‘O¨$�OÓ/�Ù™!Ø&( T¨¨1¯7©7°1«:¨,Ð#7�LÙØŸI™I fÓ-ò �DØŸ-™-¨d˜-Ó3�CÜŸ	™	Ð"8¸#Ó>�AÚØ'(§w¡w¨q£z˜Ùðð �L‰LØØØ$ñö ð="	ðF ˆøÜò ÜÐ% d V¨?¸1¸#Ð>ÀdÕKØ�	ûðús%   ÁGH4 È-H4 È4	IÈ=IÉIÉIc                 óœ  — 	 t        j                  | t        d¬«      }d|_        |j                  }d}t        j                  d|t
        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }d}t        j                  d|«      }|r|j                  d«      j                  «       }d}|j                  d	«      }|d
k\  r¯|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
k(  r|||
dz
   n|||dz    }|j                  «       rt        |j                  «       «      }|rt        |«      dk  rd}|||fS # t        $ r}t        d| › d|› �d¬«       Y d}~yd}~ww xY w)u'   èŽ·å�–è¯¦æƒ…é¡µæ ‡é¢˜ã€�æ—¥æœŸå’Œæ­£æ–‡r   )r   r    zutf-8r&   z<h3[^>]*>\s*(.*?)\s*</h3>ú<[^>]+>r/   z(article_time[^>]*>\s*(\d{4}-\d{2}-\d{2})z	id="zoom"r   ú>é   z<divé   z</div>iˆ  é   u     [é”™è¯¯] è¯¦æƒ…é¡µ z: Tr2   N)r&   r&   r&   )r;   r<   r=   ÚencodingÚtextrF   rG   ÚDOTALLÚsubrH   r(   ÚfindrB   Úclean_content_htmlrJ   rK   )Ú
detail_urlrO   r"   r'   rX   rT   ÚbodyÚzoom_idxÚstartÚdepthÚiÚrawrY   s                rZ   Úfetch_detailro   c   sÕ  € ð,Ü�|‰|˜J´ÀÔDˆØˆŒØ�y‰yˆð ˆÜ�I‰IÐ2°D¼"¿)¹)ÓDˆÙÜ—F‘F˜: r¨1¯7©7°1«:Ó6×<Ñ<Ó>ˆEð ˆÜ�I‰IÐAÀ4ÓHˆÙØŸ7™7 1›:×+Ñ+Ó-ˆLð ˆØ—9‘9˜[Ó)ˆØ�qŠ=Ø—I‘I˜c 8Ó,¨qÑ0ˆ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ð &+¨a¢Z�$�u˜Q˜q™S‘/°T¸%ÀÀdÁ
Ð5KˆCØ�y‰yŒ{Ü)¨#¯)©)«+Ó6�á”s˜4“y 2’~ØˆDà�l DÐ(Ð(øäò ÜÐ% j \°°A°3Ð7¸tÕDÜûðús   ‚EF% ÅAF% Æ%	GÆ.GÇGc                 óò  — | syt        | d«      }|j                  d«      D ]<  }|j                  dd«      }|sŒ|j                  d«      rŒ*t	        t
        |«      |d<   Œ> |j                  d«      D ]`  }|j                  dd«      }|sŒ|j                  d«      rŒ*|j                  d«      rŒ<|j                  d	«      rŒNt	        t
        |«      |d<   Œb t        |«      }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 )u   æ¸…æ´—æ­£æ–‡ HTMLr&   r#   ÚimgÚsrcr+   Úar%   ú#Ú
javascriptz\sstyle="[^"]*"z<span[^>]*>|</span>z<strong[^>]*>|</strong>z<b[^>]*>|</b>z<font[^>]*>|</font>z\n{3,}z

)
r   Úfind_allr<   rC   r   r4   ÚstrrF   re   r(   )Úhtml_contentrP   rq   rr   rs   r%   Úresults          rZ   rg   rg   ”   sF  € áØä˜ }Ó5€Dð �}‰}˜UÓ#ò 0ˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~ fÕ-Ü ¤¨3Ó/ˆC�ŠJð0ð �]‰]˜3Óò 0ˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™¨Õ/¸¿¹ÈÕ8LÐUY×UdÑUdÐeqÕUrÜ¤¨$Ó/ˆAˆfŠIð0ô
 �‹Y€Fä�V‰VÐ&¨¨FÓ3€FÜ�V‰VÐ*¨B°Ó7€FÜ�V‰VÐ.°°FÓ;€FÜ�V‰VÐ$ b¨&Ó1€FÜ�V‰VÐ*¨B°Ó7€FÜ�V‰V�I˜v vÓ.€FØ�<‰<‹>Ðó    c                 óX  — t        j                  t        «      }|j                  d«       |j                  d«       t	        «       }|j                  dt
        f«      }|D ]  }|j                  |d   «       Œ t        dt        |«      › dt
        › d�d¬	«       t        d
«      }|st        dd¬	«       |j                  «        yd}| rt        | |«      nd}t        d|› d|› d�d¬	«       d}d}	d}
t        d
|d
z   «      D �]¾  }t        d|› d|› d�dd¬«       |d
k(  r|n
t        |«      }|st        dd¬	«       Œ;d}|D �]L  }|d   }||v r|	d
z  }	Œ|d   }|d   }|s|	d
z  }	Œ%t        |«      \  }}}|r|n|}|r|s|}|rt        j                  dd|«      n|}t        j                  dd|«      j!                  «       d d }|rd|v rd
nd}	 |j                  dt
        |||d d  |d d! |d d  |r|ndd"t"        t$        |f«      }|j&                  dkD  ru|j                  d#|f«      j)                  «       }|r&|d   }	 |j                  d$||d d  t
        |d d% f«       |j                  |«       |j-                  «        |d
z  }|d
z  }n|	d
z  }	�ŒO t        d'|› d(|› d)�d¬	«       ||k  s�Œªt1        j2                  d*«       �ŒÁ |j                  «        t        d+|› d,|	› d-|
› �d¬	«       |S # t         j*                  $ r Y Œ¤w xY w# t.        $ r}t        d&dd¬«       |
d
z  }
Y d }~�Œæd }~ww xY w).NzPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz.SELECT page_url FROM gov_raw WHERE site_name=?r   u   å·²æœ‰ u    æ�¡ u    è®°å½•Tr2   r/   u   æ— æ³•èŽ·å�–åˆ—è¡¨æ•°æ�®r`   r)   u   å…±çº¦ u    é¡µ, çˆ¬å�–å‰� u    é¡µu   [ç¬¬ r*   u    é¡µ] r&   )Úendr3   u	   æ— æ•°æ�®r0   r'   r1   r]   ú z\s+i,  z<tablezõINSERT OR IGNORE INTO gov_raw
                    (site_name, source_url, page_url, title, publish_date,
                     summary, content, status, category, group_name, has_table)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)iô  r   Úactivez'SELECT id FROM gov_raw WHERE page_url=?zLINSERT INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)éÈ   Úxú+u    æ�¡ (ç´¯è®¡ ú)g      à?u   
å®Œæˆ�! æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ )Úsqlite3Úconnectr   ÚexecuteÚsetÚ	SITE_NAMEÚaddrK   rB   r[   ÚcloseÚminÚrangero   rF   re   r(   ÚCATEGORYÚGROUPÚrowcountÚfetchoneÚIntegrityErrorÚcommitrJ   ÚtimeÚsleep)Ú	max_pagesÚdbÚexistingÚcurÚrowÚfirst_itemsÚtotal_pagesÚpages_to_fetchÚ	total_newÚ
total_skipÚtotal_errorrL   rN   Úpage_newÚitemÚfull_urlr'   rT   Ú	det_titleÚdet_dateri   Úfinal_titleÚsummaryÚ	has_tableÚridrY   s                             rZ   Úcrawlr¨   ²   s“  € Ü	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+ä‹u€HØ
�*‰*ÐEÌ	À|Ó
T€CØò ˆØ�‰�S˜‘VÕðô 
ˆG”C˜“M�? %¬	 {°'Ð
:À$ÕGä˜Q“-€KÙÜÐ(°Õ5Ø
�‰Œ
Øð €KÙ4=”S˜ KÔ0À1€NÜ	ˆG�K�=Ð 0°Ð0@ÀÐ
EÈTÕRà€IØ€JØ€Kä�a˜¨!Ñ+Ó,ó ?ˆÜ��d�V˜1˜^Ð,¨FÐ3¸À4ÕHØ# qšy‘¬j¸Ó.>ˆÙÜ�+ TÕ*ØàˆØó 3	!ˆDØ˜E‘{ˆHØ˜8Ñ#Ø˜a‘�
Øà˜‘MˆEØ ™<ˆLáØ˜a‘�
Øô )5°XÓ(>Ñ%ˆI�x Ù'0™)°eˆKÙ¡Ø'�ñ 8<”b—f‘f˜Z¨¨dÔ3ÀˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGá! h°$Ñ&6™¸AˆIð!Ø—j‘jð "@ô ˜x¨°;¸tÀÐ3DÀlÐSVÐTVÐFWØ˜D˜S�M©4¡4°RØœh¬¨yðBó�ð —<‘< !Ò#ØŸ*™*Ð%NÐQYÐP[Ó\×eÑeÓg�CÙØ! !™f˜ð!ØŸJ™JÐ'uØ(+¨[¸¸#Ð->Ä	È7ÐSWÐTWÈ=Ð'Yô[ð —L‘L Ô*Ø—I‘I”KØ ‘N�IØ ‘M‘Hà !‘O�Jùða3	!ôj 	��(�˜=¨¨°1Ð5¸TÕBØ�.Ô Ü�J‰J�sŽOð?ðB ‡H�H„JÜ	Ð˜i˜[¨	°*°¸YÀ{ÀmÐ
TÐ\`ÕaØÐøô%  '×5Ñ5ò !Ù ð!ûô ò !Ü˜ ¨$Õ/Ø˜qÑ –ûð!ús=   ÇA-LÈ: K)É1LË)K?Ë<LË>K?Ë?LÌ	L)ÌL$Ì$L)Ú__main__z--max-pages)ÚtypeÚdefault)r”   )N))Ú__doc__ÚsysÚosrF   r’   rƒ   Úargparser5   r   Úurllib.parser   r   r;   Úbs4r   ÚwarningsÚfilterwarningsr4   r‡   rŒ   r�   Úenvironr<   r   r:   r8   r9   r7   r=   r[   ro   rg   r¨   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsr”   © rz   rZ   ú<module>r½      s÷   ðñ÷ 2× 1× 1Ó 1Ý ß +Û Ý ã Ø €× Ñ ˜Ô !à'€Ø;€	Ø€Ø€Ø
�*‰*�.‰.˜Ð$9Ó
:€Ø€	Ø	€Ø$€
Ø€	ð DØ�˜8 I ;¨kÐ:ñ€ò<ò~.òbó<^ðB ˆzÒØ$ˆX×$Ñ$Ó&€FØ
×Ñ˜¨C¸ÐÔ>Ø×ÑÓ€DÙ	�D—N‘NÖ#ð	 rz   