Ë
    ¸¬ujÈ*  ã                   óø  — d 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Zddlm	Z	m
Z
 dZdZdZdZd	Zed
z   ZddddddddœZdeez   dz   dœZ ej&                  «       Zej*                  j-                  e«       d„ Zd„ Zd"d„Zd„ Zd„ Zd"d„Zedk(  rbdZ eej@                  «      dkD  rAej@                  dd D ]/  Z!e!jE                  d«      sŒ	  e#e!jI                  d «      d   «      ZŒ1  ee¬!«       yy# e%$ r Y ŒDw xY w)#u7  
å¼€åŒ–åŽ¿äººæ°‘æ”¿åºœ - æ”¿åºœä¿¡æ�¯å…¬å¼€â†’å…¬å‘Šå…¬ç¤º çˆ¬è™«
CMS: JPAASå�‘å¸ƒå¹³å�° (Zhongke)
åˆ—è¡¨: API /api-gateway/jpaas-publish-server/front/page/build/unit è¿”å›žHTML
      è§£æž� table > tr > a.bt_link(æ ‡é¢˜) + td.bt_time(æ—¥æœŸ)
è¯¦æƒ…: div.title(æ ‡é¢˜), div.ly(æ—¥æœŸ), div.article#zoom(æ­£æ–‡)
é    N)Úurljoin)ÚBeautifulSoupÚTagzhttps://www.kaihua.gov.cnz/col/col1229090858u   å¼€åŒ–åŽ¿äººæ°‘æ”¿åºœu   æµ™æ±Ÿz/mnt/data/search.dbz7/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ2681Ú3SlHl21KjjsAamu0rkzk4Úcolumnu   å½“å‰�æ �ç›®listÚnullÚ
1229090858)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z/index.html)z
User-AgentÚRefererc                 óV   — | syt        j                  dd| «      } | j                  «       S )NÚ z(&middot;|&nbsp;|\s)+ú )ÚreÚsubÚstrip)Útexts    ú&/root/gov_crawler/crawl_kaihua_gsgg.pyÚ
clean_textr   0   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 óð  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]&  }|j                  sŒ|j                  dk(  rÆ|j	                  d¬«      }|sŒ5|j                  dd¬	«      D ]‰  }|d
   }t        j                  d|t        j                  «      sŒ.|j	                  d¬«      xs |}	|j                  d«      st        ||«      n|}
|j                  |j                  d|	› d|
› d�«      «       Œ‹ |j                  |«       Œæ|j                  dk(  r|j                  t        |«      «       �Œ|j                  dv �r—|j                  dd¬«      D ]Ù  }|j                  d«      rŒ|j	                  d¬«      }|sŒ*|j                  dd¬	«      D ]‰  }|d
   }t        j                  d|t        j                  «      sŒ.|j	                  d¬«      xs |}	|j                  d«      st        ||«      n|}
|j                  |j                  d|	› d|
› d�«      «       Œ‹ |j                  |«       ŒÛ |j                  dd¬«      D ]  }|j                  t        |«      «       Œ |j                  d«      D ]`  }|j!                  dd«      }|j!                  dd«      }|sŒ*|j                  d«      st        ||«      n|}|j                  d|› d|› d�«       Œb �Œ·|j                  dk(  s�ŒÈ|j!                  dd«      }|j!                  dd«      }|s�Œð|j                  d«      st        ||«      n|}|j                  d|› d|› d�«       �Œ) dj#                  |«      S )u.   æ��å�–æ­£æ–‡ï¼Œè¡¨æ ¼ä¿�ç•™HTMLï¼Œé™„ä»¶åµŒå…¥r   úhtml.parserÚscriptÚstyleÚpT)r   Úa)Úhrefr$   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$Úhttpz [z](z) Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltz![ú)z

)r   Ú	decomposeÚchildrenÚnameÚget_textÚfind_allr   ÚsearchÚIÚ
startswithr   Úreplace_withÚ
new_stringÚappendÚstrÚfind_parentÚgetÚjoin)Úhtml_contentÚ
detail_urlÚsoupÚtagÚpartsÚchildÚtÚa_tagr$   Úa_textÚfull_urlr"   Útblr+   r,   r-   Úfull_srcs                    r   Úclean_content_htmlrJ   7   s:  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðð €EØ—‘ó .6ˆØ�zŠzØà�:‰:˜ÒØ—‘ T�Ó*ˆAÚà"Ÿ^™^¨C°d˜^Ó;ò Y�EØ  ™=�DÜ—y‘yÐ!FÈÌbÏdÉdÕSØ!&§¡°d Ó!;Ò!C¸t˜ØDHÇOÁOÐTZÔD[¤7¨:°tÔ#<Ðae˜Ø×*Ñ*¨4¯?©?¸RÀ¸xÀrÈ(ÈÐSUÐ;VÓ+WÕXðYð —‘˜Q•à�Z‰Z˜7Ò"Ø�L‰Lœ˜U›Ö$à�Z‰ZÐ8Ò8Ø—^‘^ C°4�^Ó8ò $�Ø—=‘= Ô)ØØ—J‘J T�JÓ*�ÚØ!"§¡¨C°d Ó!;ò ]˜Ø$ V™}˜ÜŸ9™9Ð%JÈDÔRT×RVÑRVÕWØ%*§^¡^¸$ ^Ó%?Ò%GÀ4˜FØHLÏÉÐX^ÔH_¤w¨z¸4Ô'@Ðei˜HØ!×.Ñ.¨t¯©ÀÀFÀ8È2ÈhÈZÐWYÐ?ZÓ/[Õ\ð]ð —L‘L •Oð$ð —~‘~ g¸�~Ó>ò '�Ø—‘œS ›XÕ&ð'à—~‘~ eÓ,ò :�Ø—g‘g˜e RÓ(�Ø—g‘g˜e RÓ(�ÚØ?B¿~¹~ÈfÔ?Uœw z°3Ô7Ð[^�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Õ9ò:ð �Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜r #  b¨¨
°!Ð4Ö5ð].6ð` �;‰;�uÓÐr   é   c                 ó4  — g }t        dd¬«       	 t        j                  t        t        d¬«      }d|_        |j                  dk7  rt        d|j                  › �«       |S |j                  «       }|j                  d	«      r!|j                  d
i «      j                  d«      st        d«       |S |d
   d   }t        |d«      }|j                  d«      }d}|D �]  }	|	j                  dd¬«      }
|
sŒ|
j                  dd«      }|sŒ/t        |
j                  «       «      }|
j                  dd«      }|rt        |«      }|	j                  dd¬«      }d}|r[t        |j                  «       «      }|j                  dd«      j                  dd«      j                  dd«      j                  dd«      }|r|sŒÞt        t         |«      }|j#                  |||dœ«       |dz  }�Œ
 t        |› d�«       |S # t        $ r}t        d|› �«       |cY d}~S d}~ww xY w) u9   é€šè¿‡JPAAS APIèŽ·å�–æ–‡ç« åˆ—è¡¨ï¼ˆå�•é¡µè¿”å›žå…¨éƒ¨ï¼‰u     ç¬¬1é¡µ(API)...r   ©Úendé   )ÚparamsÚtimeoutúutf-8éÈ   zHTTP ÚsuccessÚdataÚhtmlu   APIå“�åº”å¼‚å¸¸úERR Nr   ztable trr   r#   Úbt_link©Úclass_r$   r   ÚtitleÚtdÚbt_timeú
ú	ú)Úurlr[   Údateé   u   æ�¡)ÚprintÚsessionr<   ÚAPI_URLÚ
API_PARAMSÚencodingÚstatus_codeÚjsonÚ	Exceptionr   ÚselectÚfindr   r2   Úreplacer   ÚBASE_URLr9   )Ú	max_pagesÚ	all_itemsÚrrU   rV   Úer@   ÚrowsÚcountÚrowr#   r$   r[   Ú
title_attrÚtd_daterb   rG   s                    r   Ú
fetch_listry   s   s  € à€IÜ	Ð CÕ(ðÜ�K‰Kœ¬
¸BˆKÓ?ˆØˆŒ
Ø�=‰=˜CÒÜ�E˜!Ÿ-™-˜Ð)Ô*ØÐØ�v‰v‹xˆØ�x‰x˜	Ô"¨$¯(©(°6¸2Ó*>×*BÑ*BÀ6Ô*JÜÐ#Ô$ØÐØ�F‰|˜FÑ#ˆô
 ˜˜}Ó-€DØ�;‰;�zÓ"€DØ€EØó ˆØ�H‰H�S ˆHÓ+ˆÙØØ�u‰u�V˜RÓ ˆÙØÜ˜1Ÿ:™:›<Ó(ˆà—U‘U˜7 BÓ'ˆ
ÙÜ˜zÓ*ˆEà—(‘(˜4¨	�(Ó2ˆØˆÙÜ˜g×.Ñ.Ó0Ó1ˆDà—<‘<  RÓ(×0Ñ0°°rÓ:×BÑBÀ4ÈÓL×TÑTÐUYÐ[]Ó^ˆDÙ™5ØÜœ8 TÓ*ˆØ×Ñ °EÀ4ÑHÔIØ�‰
Šð/ô2 
ˆUˆG�3ˆ-ÔàÐøôE ò Ü��Q�CˆjÔØÕûðús+   ‘AG4 Á!AG4 Â0G4 Ç4	HÇ=HÈHÈHc                 ó  — t        | d«      }d}d}d}d}|j                  dd¬«      }|rt        |j                  «       «      }|j                  dd¬«      }|rm|j                  «       }	t	        j
                  d|	«      }
|
rE|
j                  d«      }|j                  d	d
«      j                  dd
«      j                  dd«      }|}|s‚|j                  dd¬«      }|rm|j                  «       }	t	        j
                  d|	«      }
|
rE|
j                  d«      }|j                  d	d
«      j                  dd
«      j                  dd«      }|}|j                  dd¬«      }|s|j                  dd¬«      }|rt        t        |«      |«      }||||fS )u   è§£æž�è¯¦æƒ…é¡µr   r   r'   r[   rY   Úxxgklist_newu6   å…¬å¼€æ—¥æœŸ[ï¼š:]\s*(\d{4}[-å¹´]\d{1,2}[-æœˆ]\d{1,2})rc   u   å¹´ú-u   æœˆu   æ—¥Úlyu!   (\d{4}[-å¹´]\d{1,2}[-æœˆ]\d{1,2})r)   Úzoom)Úid)
r   rm   r   r2   r   r4   Úgrouprn   rJ   r:   )rV   ra   r@   r[   Úpublish_dateÚsourceÚcontentÚ	title_divÚxxtdÚtxtÚdmÚrawÚly_divr)   s                 r   Úparse_detailrŠ   §   s�  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð —	‘	˜%¨�	Ó0€IÙÜ˜9×-Ñ-Ó/Ó0ˆð �9‰9�U >ˆ9Ó2€DÙØ�m‰m‹oˆÜ�Y‰YÐPÐRUÓVˆÙØ—(‘(˜1“+ˆCØ—+‘+˜e SÓ)×1Ñ1°%¸Ó=×EÑEÀeÈRÓPˆCØˆLñ Ø—‘˜5¨�Ó.ˆÙØ—/‘/Ó#ˆCÜ—‘Ð?ÀÓEˆBÙØ—h‘h˜q“k�Ø—k‘k %¨Ó-×5Ñ5°e¸SÓA×IÑIÈ%ÐQSÓT�Ø"�ð �i‰i˜ iˆiÓ0€GÙØ—)‘)˜E f�)Ó-ˆÙÜ$¤S¨£\°3Ó7ˆà�, ¨Ð/Ð/r   c                 ó8  — | d   j                  dd«      }|xs | d   j                  dd«      }|xs | j                  dd«      }|xs t        }|j                  dd«      }|j                  dd«      }	|d d }
t        }d|v rd	nd
}d|› d|› d|	› d|› d|› d|› d|
› dt        › d|› d�}|dz   }	 t	        j
                  dt        g|ddd¬«      }|j                  d
k(  r`|j                  j                  «       }	 t        |j                  «       «      }|d
kD  rPd|› d�}t	        j
                  dt        g|ddd¬«       yd|j                  vrt        d|j                  d d › �«       y# t        $ r d
}Y Œcw xY w# t        $ r}t        d|› �«       Y d }~yd }~ww xY w)Nra   ú'z''r[   rb   r   rS   z<tablerc   r   z§INSERT OR IGNORE INTO gov_raw 
        (page_url, title, content, publish_date, source_url, site_name, summary, group_name, industry, has_table)
    VALUES 
        ('z', 'u   ', 'æ”¿åºœå…¬å‘Š', z);
zDSELECT CASE WHEN changes() > 0 THEN last_insert_rowid() ELSE 0 END;
Úsqlite3TrO   )ÚinputÚcapture_outputr   rQ   z‡INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary)
SELECT rowid, title, site_name, summary FROM gov_raw WHERE rowid = z;
zUNIQUE constraintz	    [DB] u       [DB] é”™è¯¯: F)rn   r<   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr   ÚintÚ
ValueErrorÚstderrrd   rk   )ÚitemÚdetail_titleÚpub_dater‚   rƒ   Úpage_urlr[   r�   Úsource_nameÚcontent_safeÚsummaryÚ	site_nameÚ	has_tableÚsql_rawÚcombined_sqlÚresultÚoutÚrowidÚfts_sqlrs   s                       r   Úinsert_articler©   Ó   s  € Ø�E‰{×"Ñ" 3¨Ó-€HØÒ*˜T '™]×3Ñ3°C¸Ó>€EØÒ3˜tŸx™x¨°Ó3€LØÒ%œI€KØ×%Ñ% c¨4Ó0€KØ—?‘? 3¨Ó-€LØ�D�Sˆk€GÜ€IØ Ñ(‘¨a€Iðð ˆ*�D˜˜˜t L >°°l°^À4ÈÀzÐQUÐV_ÐU`Ð`dÐelÐdmÐmqÔrwÐqxð  yLð  MVð  LWð Wð€Gð
 ð ñ €Lð'Ü—‘ØœÐ ØØ d°Bô
ˆð
 ×Ñ Ò!Ø—-‘-×%Ñ%Ó'ˆCðÜ˜CŸI™I›KÓ(�ð �qŠyðDØDIÀ7ð Kð�ô —‘ 	¬7Ð3¸7ÐSWÐ^bÐlnÕoØà"¨&¯-©-Ñ7Ü˜	 &§-¡-°°Ð"5Ð!6Ð7Ô8ð øô ò Ø’ðûô ò 'ÜÐ! ! Ð%×&Ð&Øûð'úsC   Â.A	E8 Ã8E' Ä+E8 Ä=)E8 Å'E5Å2E8 Å4E5Å5E8 Å8	FÆFÆFc                 ó˜  — t        d«       t        | «      }|st        d«       y t        dt        |«      › d�«       t        «       }	 t	        j
                  dt        dgddd¬	«      }|j                  d
k(  rL|j                  j                  «       r2t        |j                  j                  «       j                  d«      «      }t        dt        |«      › �«       d
}d
}t        |«      D ]ø  \  }}|d   }||v r|dz  }Œt        d|dz   › dt        |«      › d|d   d d › d�d¬«       	 t        j                  |d¬«      }	d|	_        t%        |	j&                  |«      \  }}}}|j                  «       st        d«       |dz  }Œ™t)        |||||«      r,|dz  }t        dt        |j                  «       «      › d�«       n|dz  }t        d«       t!        j"                  d«       Œú t        d|› d |› d�«       t        d!«       y # t        $ r Y �ŒKw xY w# t        $ r.}
t        d|
› �«       t!        j"                  d«       Y d }
~
�Œ[d }
~
ww xY w)"Nu(   === å¼€åŒ–åŽ¿ - å…¬å‘Šå…¬ç¤º çˆ¬è™« ===
u   æ— æ–‡ç« åˆ—è¡¨u   
åˆ—è¡¨æ€»è®¡: u    æ�¡r�   zBSELECT page_url FROM gov_raw WHERE page_url LIKE '%kaihua.gov.cn%'TrO   )r�   r   rQ   r   r^   u   å·²çŸ¥URL: ra   rc   z  [ú/z] r[   é2   z...r   rM   )rQ   rR   rW   u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)g333333Ó?u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rd   ry   ÚlenÚsetr’   r“   r”   r•   r–   r   Úsplitrk   Ú	enumeratere   r<   rh   ÚtimeÚsleeprŠ   r   r©   )rp   ÚarticlesÚ
known_urlsr¥   ÚaddedÚskippedÚir#   ra   rr   rs   Úd_titleÚd_dateÚd_sourcerƒ   s                  r   Úmainr»   ÿ   s=  € Ü	Ð5Ô7Ü˜)Ó$€HÙÜÐÔ ØÜ	ÐœS ›]˜O¨4Ð
0Ô1ä“€JðÜ—‘ØœÐ!eÐfØ d°Bô
ˆð ×Ñ Ò! f§m¡m×&9Ñ&9Ô&;Ü˜VŸ]™]×0Ñ0Ó2×8Ñ8¸Ó>Ó?ˆJô 
ˆKœ˜J›Ð(Ð
)Ô*à€EØ€GÜ˜(Ó#ò ‰ˆˆ1Ø�‰hˆØ�*ÑØ�q‰LˆGØä��A�a‘C�5˜œ#˜h›-˜¨¨1¨W©:°c°r¨?Ð*;¸3Ð?ÀSÕIð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJô .:¸!¿&¹&À#Ó-FÑ*ˆ�˜ 7Ø�}‰}ŒÜÐ"Ô#Ø�q‰LˆGØä˜!˜W f¨h¸Ô@Ø�Q‰JˆEÜ�Dœ˜WŸ]™]›_Ó-Ð.¨dÐ3Õ4à�q‰LˆGÜÐ0Ô1Ü�
‰
�3�ð7ô: 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôI ò Úðûô  ò 	Ü�D˜˜�*ÔÜ�J‰J�qŒMÝûð	ús+   ÁA;H Ä(HÈ	HÈHÈ	I	È#IÉI	Ú__main__rc   z--pages=ú=)rp   )rK   )&Ú__doc__r   Úsysr±   r’   Úurllib.parser   ÚrequestsÚbs4r   r   ro   Ú	LIST_PATHr�   r‘   r”   rf   rg   ÚHEADERSÚSessionre   ÚheadersÚupdater   rJ   ry   rŠ   r©   r»   Ú__name__Úpagesr­   ÚargvÚargr6   r—   r¯   r˜   © r   r   ú<module>rÍ      sI  ðñó 
Û 
Û Û Ý  ã ß "ð '€Ø €	Ø#€	Ø€Ø
€ð ÐNÑ
N€àØØ'ØØØØñ€
ð DØ˜)Ñ# mÑ3ñ€ð
 ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò9óx1òh)0òX)óX4ðn ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Ã
C1Ã1C9Ã8C9