Ë
    ¸¬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 dZ	dZ
e	e
z   dz   ZdZd	Zd
ZdZddiZ ej"                  «       Zej&                  j)                  e«       d„ Zd„ Zefd„Zd„ Zd„ Zefd„Zedk(  rbeZ eej<                  «      dkD  rAej<                  dd D ]/  ZejA                  d«      sŒ	  e!ejE                  d«      d   «      ZŒ1  ee¬«       yy# e#$ r Y ŒDw xY w)u  
ä¹�åŽŸåŒºäººæ°‘æ”¿åºœ - ç”Ÿæ€�çŽ¯å¢ƒ çˆ¬è™«
CMS: ä¹�åŽŸåŒºè‡ªå»º CMS (layui)
åˆ—è¡¨: /zwgk/zfxxgk/fdzdgknr/zdlyxxgk/sthj/index.html (page1)
       /zwgk/zfxxgk/fdzdgknr/zdlyxxgk/sthj/index_N.html (page N+1)
è¯¦æƒ…: /zwgk/zfxxgk/fdzdgknr/zdlyxxgk/sthj/YYYYMM/tYYYYMMDD_N.html
é    N)Údatetime)ÚBeautifulSoupzhttps://www.jiuyuanqu.gov.cnz#/zwgk/zfxxgk/fdzdgknr/zdlyxxgk/sthjú/u   ä¹�åŽŸåŒºäººæ°‘æ”¿åºœu	   å†…è’™å�¤z/mnt/data/search.dbé   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 óV   — | syt        j                  dd| «      } | j                  «       S )NÚ z(&middot;|&nbsp;|\s)+ú )ÚreÚsubÚstrip)Útexts    ú)/root/gov_crawler/crawl_jiuyuanqu_sthj.pyÚ
clean_textr   &   s'   € ÙØä�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 ó~  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]m  }|j                  sŒ|j                  dk(  r'|j	                  d¬«      }|sŒ5|j                  |«       ŒG|j                  dk(  r|j                  t        |«      «       Œq|j                  d	v r„|j                  dd¬
«      D ]:  }|j                  d«      rŒ|j	                  d¬«      }|sŒ*|j                  |«       Œ< |j                  dd¬
«      D ]  }|j                  t        |«      «       Œ �Œ|j                  dk(  s�Œ|j                  dd«      }|j                  dd«      }	|s�Œ<|j                  d«      r	t        |z   }|j                  d|	› d|› d�«       �Œp dj                  |«      S )uF   æ��å�–æ­£æ–‡ï¼Œå�ªå¤„ç�†ç›´æŽ¥å­�å…ƒç´ é�¿å…�é‡�å¤�ï¼Œè¡¨æ ¼ä¿�æŒ�HTMLr   úhtml.parserÚscriptÚstyleÚpT)r   Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltr   z![z](ú)ú

)r   Ú	decomposeÚchildrenÚnameÚget_textÚappendÚstrÚfind_allÚfind_parentÚgetÚ
startswithÚBASE_URLÚjoin)
Úhtml_contentÚsoupÚtagÚpartsÚchildÚtr   Útblr   r   s
             r   Úclean_content_htmlr3   .   s’  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðà€EØ—‘ó 1ˆØ�zŠzØØ�:‰:˜ÒØ—‘ T�Ó*ˆAÚØ—‘˜Q•Ø�Z‰Z˜7Ò"Ø�L‰Lœ˜U›Õ$Ø�Z‰ZÐ8Ñ8Ø—^‘^ C°4�^Ó8ò $�Ø—=‘= Ô)ØØ—J‘J T�JÓ*�ÚØ—L‘L •Oð$ð —~‘~ g¸�~Ó>ò '�Ø—‘œS ›XÕ&ò'à�Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ—>‘> #Ô&Ü" S™.�CØ—‘˜r #  b¨¨¨QÐ/Ö0ð11ð2 �;‰;�uÓÐr   c                 ón  — g }t        | «      D �]ý  }|dk(  r
t        dz   }nt        d|› d�z   }t        d|dz   › d�d¬	«       	 t        j	                  |d
¬«      }d|_        |j                  dk7  rt        d|j                  › �«        |S 	 t        |j                  d«      }|j                  dd¬«      }|s&|j                  d«      }|st        d«        |S |d   }|j                  d«      }d}	|D ]ô  }
|
j                  d«      }|sŒ|j	                  dd«      }|j                  d«      }t        |«      dk  rŒIt        |d   j                  «       «      }t        |d   j                  «       «      }|r|sŒ†|}|j!                  d«      rt        |dd z   }n5|j!                  d«      r
t"        |z   }n|j!                  d«      s	t        |z   }|j%                  |||d œ«       |	dz  }	Œö t        |	› d!�«       t'        j(                  d"«       �Œ  |S # t        $ r}t        d|› �«       Y d}~ |S d}~ww xY w)#u$   é��åŽ†æ‰€æœ‰åˆ†é¡µèŽ·å�–æ–‡ç« åˆ—è¡¨r   z
index.htmlÚindex_z.htmlu     ç¬¬é   u   é¡µ...r	   ©Úendé   ©Útimeoutúutf-8éÈ   zHTTP úERR Nr   ÚulÚmodule_list©Úclass_zul.module_listu	   æ— åˆ—è¡¨ÚliÚaÚhrefr   Úspané   z./r   Úhttp)ÚurlÚtitleÚdateu   æ�¡ç333333Ó?)ÚrangeÚLIST_URLÚprintÚsessionr(   ÚencodingÚstatus_codeÚ	Exceptionr   r   ÚfindÚselectr&   Úlenr   r#   r)   r*   r$   ÚtimeÚsleep)Ú	max_pagesÚ	all_itemsÚpagerI   ÚrÚer-   r?   ÚlisÚcountrC   rD   rE   ÚspansrJ   rK   Úfull_urls                    r   Ú
fetch_listrb   S   sO  € à€IÜ�iÓ ó 2ˆØ�1Š9Ü˜\Ñ)‰Cä˜v d V¨5Ð1Ñ1ˆCÜ��d˜1‘f�X˜VÐ$¨#Õ.ð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØ�}‰} Ò#Ü˜˜aŸm™m˜_Ð-Ô.ØðP ÐðU $ô ˜QŸV™V ]Ó3ˆØ�Y‰Y�t MˆYÓ2ˆÙØ—‘Ð-Ó.ˆBÙÜ�kÔ"Øð: Ðð9 �A‘ˆBà�k‰k˜$ÓˆØˆØò 	ˆBØ—‘˜“ˆAÙØØ—5‘5˜ Ó$ˆDØ—J‘J˜vÓ&ˆEÜ�5‹z˜AŠ~ØÜ˜u Q™x×0Ñ0Ó2Ó3ˆEÜ˜e A™h×/Ñ/Ó1Ó2ˆDÙ™uØØˆHØ�‰˜tÔ$Ü# d¨1¨2 hÑ.‘Ø—‘ Ô%Ü# d™?‘Ø—_‘_ VÔ,Ü# d™?�Ø×Ñ X¸ÀtÑLÔMØ�Q‰J‰Eð)	ô, 	���sˆmÔÜ�
‰
�3Žðe2ðf ÐøôO ò 	Ü�D˜˜�*ÔÜðJ ÐûðO	ús   ÁAHÈ	H4ÈH/È/H4c           	      ó¼  — t        | d«      }d}d}d}d}|j                  dddi¬«      }|r|j                  d«      rt        |d   «      }|sA|j                  dd	¬
«      }|r,|j                  d«      }	|	rt        |	j	                  «       «      }|s6|j                  dddi¬«      }
|
r|
j                  d«      rt        |
d   «      }|j                  dddi¬«      }|r=|j                  d«      r,t        j                  d|d   «      }|r|j                  d«      }|sL|j                  dd¬
«      }|r7t        j                  d|j	                  «       «      }|r|j                  d«      }|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|sZ|j                  dd¬
«      }|rEt        j                  d|j	                  «       «      }|r|j                  d«      j                  «       }|j                  dd¬
«      }|s|j                  dd¬«      }|r<|j                  d«      }|D ]  }|j                  «        Œ t        t        |«      «      }|sl|j                  d«      D �	cg c]A  }	t        t        |	j	                  «       «      «      dkD  sŒ)t        |	j	                  «       «      ‘ŒC }}	dj                  |«      }||||fS c c}	w )u?   è§£æž�è¯¦æƒ…é¡µï¼Œè¿”å›ž (title, publish_date, source, content)r   r   Úmetar"   ÚArticleTitle)ÚattrsÚcontentr   Ú
info_titlerA   r   ÚNewTitleÚPubDatez(\d{4}-\d{2}-\d{2})r6   rF   Úinfo_msg_flÚContentSourceÚinfo_msg_fru   æ�¥æº�[ï¼š:]\s*(.+)Úinfo_msg)Úidr?   r   r   )r   rT   r(   r   r#   r
   ÚsearchÚgroupr   r&   r    r3   r%   rV   r+   )ÚhtmlrI   r-   rJ   Úpublish_dateÚsourcerg   Ú
meta_titleÚ	div_titler   Úmeta_tÚ	meta_dateÚmÚ	date_spanÚmeta_srcÚsrc_spanÚcontent_divÚulsr?   Úpss                       r   Úparse_detailr€   �   s©  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð —‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ü˜: iÑ0Ó1ˆÙØ—I‘I˜e¨L�IÓ9ˆ	ÙØ—‘˜sÓ#ˆAÙÜ" 1§:¡:£<Ó0�ÙØ—‘˜6¨&°*Ð)=�Ó>ˆÙ�f—j‘j Ô+Ü˜v iÑ0Ó1ˆEð —	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØŸ7™7 1›:ˆLÙØ—I‘I˜f¨]�IÓ;ˆ	ÙÜ—	‘	Ð0°)×2DÑ2DÓ2FÓGˆAÙØ Ÿw™w q›z�ð �y‰y˜¨°Ð'@ˆyÓA€HÙ�H—L‘L Ô+Ø˜)Ñ$×*Ñ*Ó,ˆÙØ—9‘9˜V¨M�9Ó:ˆÙÜ—	‘	Ð0°(×2CÑ2CÓ2EÓFˆAÙØŸ™ ›×)Ñ)Ó+�ð —)‘)˜E¨*�)Ó5€KÙØ—i‘i ¨)�iÓ4ˆÙà×"Ñ" 4Ó(ˆØò 	ˆBØ�L‰L�Nð	ä$¤S¨Ó%5Ó6ˆñ Ø04·±¸cÓ0BÖi¨1ÄcÌ*ÐUV×U_ÑU_ÓUaÓJbÓFcÐfhÓFhŒj˜Ÿ™›Õ&ÐiˆÐiØ—+‘+˜b“/ˆà�, ¨Ð/Ð/ùò js   É:*KÊ%Kc                 ó"  — | 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	|› d
|› d
|› d
|› d
|› d
|
› d
|	› d
t        › 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)u   å†™å…¥gov_raw + FTS gov_searchrI   ú'z''rJ   rK   r   Nr=   zœINSERT OR IGNORE INTO gov_raw 
        (page_url, title, content, publish_date, source_url, site_name, summary, group_name, industry)
    VALUES 
        ('z', 'u   ', 'æ”¿åºœå…¬å‘Š');
zDSELECT CASE WHEN changes() > 0 THEN last_insert_rowid() ELSE 0 END;
Úsqlite3Tr9   )ÚinputÚcapture_outputr   r;   r   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)Úreplacer(   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr   ÚintÚ
ValueErrorÚstderrrO   rS   )ÚitemÚdetail_titleÚpub_datert   rg   Úpage_urlrJ   rs   Úsource_nameÚsummaryÚ	site_nameÚsql_rawÚcombined_sqlÚresultÚoutÚrowidÚfts_sqlr]   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Ø�o‰o˜c 4Ó(€GØ�D�Sˆk€GÜ€Iðð ˆ*�D˜˜˜t G 9¨D°°¸dÀ8À*ÈDÐQZÐP[Ð[_Ð`gÐ_hÐhlÔmrÐlsð tð€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	E- Ã-E Ä+E- Ä2)E- ÅE*Å'E- Å)E*Å*E- Å-	FÅ6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ƒ   zESELECT page_url FROM gov_raw WHERE page_url LIKE '%jiuyuanqu.gov.cn%'Tr9   )r…   r   r;   r   ú
u   å·²çŸ¥URL: rI   r6   z  [r   z] rJ   é2   z...r	   r7   r:   r<   r>   u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)rL   u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rO   rb   rV   Úsetr‰   rŠ   r‹   rŒ   r�   r   ÚsplitrS   Ú	enumeraterP   r(   rQ   rW   rX   r€   r   rž   )rY   ÚarticlesÚ
known_urlsrš   ÚaddedÚskippedÚirD   rI   r\   r]   Úd_titleÚd_dateÚd_sourcerg   s                  r   Úmainr­   ý   sC  € Ü	Ð5Ô7ô ˜)Ó$€HÙÜÐÔ ØÜ	ÐœS ›]˜O¨4Ð
0Ô1ô “€JðÜ—‘ØœÐ!hÐiØ 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�ð9ô< 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôM ò Úðûô" ò 	Ü�D˜˜�*ÔÜ�J‰J�qŒMÝûð	ús+   ÁA;H Ä(HÈ	HÈHÈ	I	È#IÉI	Ú__main__r6   z--pages=ú=)rY   )$Ú__doc__r
   ÚsysrW   r‰   r   ÚrequestsÚbs4r   r*   ÚLIST_DIRrN   r‡   rˆ   r‹   ÚTOTAL_PAGESÚHEADERSÚSessionrP   ÚheadersÚupdater   r3   rb   r€   rž   r­   Ú__name__ÚpagesrV   ÚargvÚargr)   rŽ   r£   r�   © r   r   ú<module>r¿      s6  ðñó 
Û 
Û Û Ý ã Ý ð *€Ø0€Ø�hÑ Ñ$€Ø#€	Ø€Ø
€Ø€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò!ðJ %ó 6òt?0òF)ðZ ó 9ðx ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Â>C%Ã%C-Ã,C-