Ë
    ¸¬ujl  ã                   óx  — d Z ddlZddlZddlZddlZddlZej                  j                  dd«       ddlm	Z	m
Z
 ddlZddlZdZdZ ej                  dd«      Zd	Ze› d
�ZddddddddœZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r8 ej                  «       Z e«         ed ej                  «       ez
  d›d�«       yy)u—   
æµŽå�—å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å·²æ‰¹å‡†é¡¹ç›®å…¬å‘Š
https://jnepb.jinan.gov.cn/col/col115241/index.html

JPaaS CMS ç³»ç»Ÿï¼ŒAPI ç¿»é¡µ + æ ‡å‡†è¯¦æƒ…é¡µ
é    Nz/root/gov_crawler)Ú
fetch_pageÚ
clean_htmlu   æµŽå�—å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€zhttps://jnepb.jinan.gov.cnÚ	SEARCH_DBz/root/search.dbz
2023-06-01z7/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ21ÚpMB9pkaz19HYYbLAOTZtYÚcolumnu   ä¿¡æ�¯åˆ—è¡¨ÚnullÚ115241)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdéz   é   c                 óx  — t        t        «      }t        | «      |d<   	 ddl}|j	                  t
        |dddi¬«      }|j                  dk(  rJ|j                  «       }|j	                  d	«      r)|j	                  d
i «      j	                  d«      r|d
   d   S y# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)u&   è°ƒç”¨JPaaS APIèŽ·å�–ç¬¬Né¡µåˆ—è¡¨HTMLÚpageNor   Né   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36)ÚparamsÚtimeoutÚheaderséÈ   ÚsuccessÚdataÚhtmlu       âš  APIè¯·æ±‚å¼‚å¸¸: )
ÚdictÚ
API_PARAMSÚstrÚrequestsÚgetÚAPI_URLÚstatus_codeÚjsonÚ	ExceptionÚprint)Úpage_nor   r"   Úrr   Úes         ú&/root/gov_crawler/crawl_jinan_jnepb.pyÚfetch_list_pager-   !   sµ   € ä”*Ó€FÜ˜7“|€Fˆ8ÑðÛØ�L‰Lœ¨¸Ø!Ð#aÐbð ó dˆà�=‰=˜CÒØ—6‘6“8ˆDØ�x‰x˜	Ô" t§x¡x°¸Ó';×'?Ñ'?ÀÔ'GØ˜F‘| FÑ+Ð+ØøÜò ÜÐ)¨!¨Ð-Ô.Üûðús   ŸA7B Â	B9Â!B4Â4B9c                 óP  — g }t        j                  dt         j                  «      }|j                  | «      D ]k  }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j	                  d«      }|sŒU|sŒX|j                  |||f«       Œm |S )u3   ä»ŽAPIè¿”å›žçš„HTMLä¸­æ��å�– (title, url, date_str)zg<li>.*?<a\s+href="(/[^"]+)"\s+title="([^"]+)"[^>]*>.*?</a>\s*<span[^>]*>\[(\d{4}-\d{2}-\d{2})\].*?</li>é   é   é   )ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚappend)r   ÚitemsÚpatternÚmÚhrefÚtitleÚdate_strs          r,   Ú
parse_listr?   2   s“   € à€Eä�j‰jØrÜ
�	‰	ó€Gð ×Ñ˜dÓ#ò 2ˆØ�w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:ˆÚ’EØ�L‰L˜%  xÐ0Õ1ð2ð €Ló    c                 ó¾  — | j                  d«      r	t        | z   n| }t        |d¬«      }|syd}t        j                  d|«      }|r|j                  d«      }d}t        j                  d|t        j                  «      }|r|j                  d«      j                  «       }|sFt        j                  d	|t        j                  «      }|r|j                  d«      j                  «       }|�r_t        j                  d
d|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        |«      }g }t        j                  d|t        j                  «      D ]9  \  }}|j                  d«      r	t        |z   n|}	|j                  d|	› d|› d�«       Œ; t        j                  d|t        j                  «      D ]9  \  }
}|
j                  d«      r	t        |
z   n|
}	|j                  d|	› d|› d�«       Œ; |r|ddj                  d„ |D «       «      z   z  }d}t        j                  d|t        j                  «      }|s%t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }|xs d|xs d|xs dfS )u   èŽ·å�–è¯¦æƒ…é¡µçš„æ­£æ–‡å†…å®¹ú/zutf-8)Úencoding)NNNÚ u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r/   z$<div\s+id="zoom"[^>]*>(.*?)</div>\s*z!<div\s+id="zoom"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>zO<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar))"[^>]*>\s*([^<]+)\s*</a>z	<a href="z" target="_blank">z</a>zE<a[^>]*href="(/api-gateway[^"]*download[^"]*)"[^>]*>\s*([^<]+)\s*</a>u#   
<p><strong>é™„ä»¶ï¼š</strong></p>
ú
c              3   ó(   K  — | ]
  }d |› d�–— Œ y­w)z<p>z</p>N© )Ú.0Úas     r,   ú	<genexpr>zfetch_detail.<locals>.<genexpr>q   s   è ø€ ÒJnÐ]^ÈSÐQRÐPSÐSWÌ=ÑJnùs   ‚z*<div\s+class="news-title"[^>]*>(.*?)</div>z-<div\s+class="article-title"[^>]*>(.*?)</div>ú<[^>]+>N)Ú
startswithÚBASEr   r2   Úsearchr6   r4   r7   ÚsubÚIr   ÚfindallÚ
IGNORECASEr8   Újoin)ÚurlÚfull_urlr   Úpub_dater;   ÚcontentÚattachmentsÚatt_hrefÚatt_textÚatt_fullÚdl_hrefÚdl_textr=   s                r,   Úfetch_detailr_   B   s�  € à Ÿ^™^¨CÔ0Œt�cŠz°c€HÜ�h¨Ô1€DÙØð €HÜ
�	‰	Ð=¸tÓD€AÙØ—7‘7˜1“:ˆð €GÜ
�	‰	Ð9¸4ÄÇÁÓK€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆÙä�I‰IÐ:¸DÄ"Ç)Á)ÓLˆÙØ—g‘g˜a“j×&Ñ&Ó(ˆGâä—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆä˜WÓ%ˆð ˆÜ"$§*¡*Ø^Ø”"—-‘-ó#
ò 	WÑˆH�hð +3×*=Ñ*=¸cÔ*B”t˜h’ÈˆHØ×Ñ ¨8¨*Ð4FÀxÀjÐPTÐUÕVð	Wô !#§
¡
ØTÐVZÔ\^×\iÑ\ió!
ò 	VÑˆG�Wð *1×);Ñ);¸CÔ)@”t˜g’~ÀgˆHØ×Ñ ¨8¨*Ð4FÀwÀiÈtÐTÕUð		Vñ ØÐ>ÀÇÁÑJnÐbmÔJnÓAnÑnÑnˆGð €EÜ
�	‰	Ð?ÀÄrÇyÁyÓQ€AÙÜ�I‰IÐFÈÌbÏiÉiÓXˆÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆàŠ=�D˜'š/ T¨8Ò+;°tÐ;Ð;r@   c                 ó  — | st        d«       y t        j                  t        «      }|j	                  d«       |j	                  d«       d\  }}| D ]Ô  }	 |j	                  d|j                  dd«      d d |j                  d	d«      |j                  d	d«      |j                  d
«      xs dd d |j                  d«      xs dd d |j                  d«      xs dd d |j                  dd«      dd|j                  d«      xs dd d f
«       |j                  dkD  r|dz  }n|dz  }ŒÖ |j                  «        |j	                  dt        f«       |j                  «        |j                  «        t        d|› d|› d�«       y #  |dz  }Y �Œ;xY w)Nu     â�­ æ— æ•°æ�®zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMAL)r   r   z¤INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, summary, content, status, category, tags) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Ú	site_namerD   r   rU   r=   iô  rW   é
   ÚsummaryrX   ÚactiveÚtagséd   r   r/   z·INSERT INTO gov_search(rowid, title, site_name, summary) SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?u     ðŸ’¾ å…¥åº“: æ–°å¢žu   , è·³è¿‡u   , FTSå·²å�Œæ­¥)
r(   Úsqlite3Úconnectr   Úexecuter#   Útotal_changesÚcommitÚ	SITE_NAMEÚclose)r9   ÚdbÚokÚskipÚitems        r,   Úinsert_to_dbrr   ~   s“  € ÙÜÐÔ ØÜ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð 8ð —‘˜ RÓ(¨¨#Ð.Ø—‘˜˜rÓ"Ø—‘˜˜rÓ"Ø—‘˜'Ó"Ò( b¨$¨3Ð/Ø—‘˜*Ó%Ò+¨¨S¨bÐ1Ø—‘˜)Ó$Ò*¨¨D¨SÐ1Ø—‘˜ 2Ó&Ø˜"˜tŸx™x¨Ó/Ò5°2°t¸Ð<ð	:ôð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð#ð( ‡I�I„KØ‡J�Jð MäOXÈlô\ð ‡I�I„KØ‡H�H„JÜ	Ð! "  X¨d¨V°>Ð
BÕCøð	Ø�A‰I‹Dús   ÁCFÆFc                  ó¤  — t        dd› �«       t        dt        › d�«       t        d› «       g } t        «       }d}t        t        j
                  «      dkD  r't        j
                  d   dk(  rt        }t        d«       t        d|dz   «      D �]š  }t        d	|› d
|› d�dd¬«       t        |«      }|st        d«        �njt        |«      }|st        d«        �nOt        dt        |«      › d�«       |D ]û  \  }}}|j                  d
«      r	t        |z   n|}	|	|v rŒ(|j                  |	«       |r
|t        k  rŒEt        d|d d › d�dd¬«       t        |«      \  }
}}|
r|
}|r|}t        j                   dd|xs d«      j#                  «       d d }t        j                   dd|«      }| j%                  t        ||	|xs d|xs d|ddœ«       t        d|› �«       t'        j(                  d«       Œý t        |«      t*        k  rt        d«        nt'        j(                  d«       �Œ� | rt-        | «       t        dt        | «      › d�«       y ) NrF   z2==================================================u   ðŸ�  u    - å·²æ‰¹å‡†é¡¹ç›®å…¬å‘Šr1   r/   Úfullu   ðŸ“‹ å…¨é‡�æ¨¡å¼�ï¼š122é¡µu     ðŸ“„ ç¬¬ rB   u    é¡µ...ú T)ÚendÚflushu   â�Œ æ— å“�åº”u   0 æ�¡ï¼ˆå�¯èƒ½å·²åˆ°åº•ï¼‰u   âœ… u    æ�¡z    é7   z...rL   rD   i,  z\s+u   çŽ¯è¯„å®¡æ‰¹)ra   r=   rU   rX   rW   rc   re   g333333Ó?u       (æœ«é¡µ)g      à?u   
âœ… å®Œæˆ�! å…± )r(   rl   ÚsetÚlenÚsysÚargvÚTOTAL_PAGESÚranger-   r?   rM   rN   ÚaddÚTHREE_YEARS_AGOr_   r2   rP   r7   r8   ÚtimeÚsleepÚ	PAGE_SIZErr   )Ú	all_itemsÚ	seen_urlsÚ	MAX_PAGESr)   r   r9   r=   r<   r>   rV   ÚdtrX   rW   rc   s                 r,   Úmainrˆ   ¢   sA  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð4Ð
5Ô6Ü	ˆVˆHÔà€IÜ“€Ið €IÜ
Œ3�8‰8ƒ}�qÒœSŸX™X a™[¨FÒ2Üˆ	ÜÐ*Ô+ä˜˜I¨™MÓ*ó .ˆÜ�˜G˜9 A i [°Ð8¸cÈÕNÜ˜wÓ'ˆÙÜ�/Ô"ÚÜ˜4Ó ˆÙÜÐ.Ô/ÚÜ�”S˜“Z�L Ð%Ô&à%*ò 	Ñ!ˆE�4˜Ø&*§o¡o°cÔ&:”t˜d’{ÀˆHØ˜9Ñ$ØØ�M‰M˜(Ô#á˜H¤Ò6Øä�D˜˜s ˜˜ CÐ(¨c¸Õ>Ü$0°Ó$6Ñ!ˆB�˜ÙØ�ÙØ#�ä—f‘f˜Z¨¨gªm¸Ó<×BÑBÓDÀTÀcÐJˆGÜ—f‘f˜V S¨'Ó2ˆGà×ÑÜ&ØØØ"š= bØ$šN¨Ø"Ø&ñô ô �D˜˜
Ð#Ô$Ü�J‰J�s�Oð;	ô> ˆu‹:œ	Ò!Ü�.Ô!ÙÜ�
‰
�3Žð].ñ` Ü�YÔÜ	Ðœs 9›~Ð.¨dÐ
3Õ4r@   Ú__main__u   â�± è€—æ—¶: z.1fÚs)Ú__doc__r{   Úosr2   r�   r&   ÚpathÚinsertÚcrawler_libr   r   rg   rl   rN   Úgetenvr   r€   r$   r    r}   rƒ   r-   r?   r_   rr   rˆ   Ú__name__Út0r(   rH   r@   r,   ú<module>r“      sé   ðñ÷ × Ó Ø ‡�‡��Ð&Ô 'ß .Û Û 	à&€	Ø#€ØˆB�I‰I�kÐ#4Ó5€	Ø€ð ˆFÐIÐ
J€àØØ'ØØØØñ€
ð €Ø€	òò"ò 9<òx"DòHA5ðH ˆzÒØ	ˆ�‰‹€BÙ„FÙ	ˆL˜˜Ÿ™› R™¨Ð,¨AÐ
.Õ/ð r@   