Ë
    ¸¬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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 jC                  d«      sŒ	  e"e jG                  d«      d   «      ZŒ1  ee¬«       yy# e$$ r Y ŒDw xY w)uÁ   
å¹³åŽŸåŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
CMS: å¹³åŽŸåŽ¿è‡ªå»º (TRSæ¨¡æ�¿)
åˆ—è¡¨: index.html (page1) / index_61478998_N.html (page N+1)
è¯¦æƒ…: h1.cont_t æ ‡é¢˜, div.con_time æ—¥æœŸ/æ�¥æº�
é    N)Úurljoin)ÚBeautifulSoupzhttps://www.zgpingyuan.gov.cnz/n30446770/n84207328ú/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_zgpingyuan_tzgg.pyÚ
clean_textr   $   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 óˆ  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]r  }|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«      st        ||	«      n|	}|j                  d|
› d|› d�«       �Œu dj                  |«      S )u   æ��å�–æ­£æ–‡ï¼Œè¡¨æ ¼ä¿�ç•™HTMLr   úhtml.parserÚscriptÚstyleÚpT©r   Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltÚhttpz![ú](ú)ú

)r   Ú	decomposeÚchildrenÚnameÚget_textÚappendÚstrÚfind_allÚfind_parentÚgetÚ
startswithr   Újoin)Úhtml_contentÚ
detail_urlÚsoupÚtagÚpartsÚchildÚtr   Útblr   r   Úfull_srcs               r   Úclean_content_htmlr7   +   s—  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðà€EØ—‘ó 6ˆØ�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ÛØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜r #  b¨¨
°!Ð4Ö5ð/6ð0 �;‰;�uÓÐr   é   c                 óT  — 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«      }|s!|j                  d«      }|st        d«        |S d}|j                  d«      xs |j                  d«      D ]Ý  }	|	j                  dk(  r|	j                  d«      nd}
|
s|	j                  dk(  rŒ7|
sŒ:|
j	                  dd«      }d|vrŒQ|
j                  dd¬«      }|rt        |j                  «       «      nd}|
j                  d«      }|rt        |j                  «       «      nd}|r|sŒ´t!        t        |«      }|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_61478998_z.htmlu     ç¬¬é   u   é¡µ...r	   ©Úendé   ©Útimeoutúutf-8éÈ   zHTTP úERR Nr   z#comp_61478998 ul lizli a[href*="content.html"]u	   æ— åˆ—è¡¨ÚliÚaÚhrefr   zcontent.htmlr   r   ©Úclass_Úspan)ÚurlÚtitleÚdateu   æ�¡ç333333Ó?)ÚrangeÚLIST_URLÚprintÚsessionr+   ÚencodingÚstatus_codeÚ	Exceptionr   r   Úselectr)   r%   Úfindr   r&   r   r'   ÚtimeÚsleep)Ú	max_pagesÚ	all_itemsÚpagerJ   ÚrÚer0   ÚlisÚcountrD   rE   rF   Ú	title_divrK   rI   rL   Úfull_urls                    r   Ú
fetch_listrb   N   s5  € à€IÜ�iÓ ó -ˆØ�1Š9Ü˜\Ñ)‰Cä˜¨t¨f°EÐ:Ñ:ˆCÜ��d˜1‘f�X˜VÐ$¨#Õ.ð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØ�}‰} Ò#Ü˜˜aŸm™m˜_Ð-Ô.ØðF ÐðK $ô ˜QŸV™V ]Ó3ˆØ�k‰kÐ0Ó1ˆÙØ—+‘+Ð:Ó;ˆCÙÜ�kÔ"Øð0 Ðð- ˆØ—+‘+Ð4Ó5ÒL¸¿¹ÀtÓ9Lò 	ˆBØ "§¡¨4¢�—‘˜”°TˆAÙ˜Ÿ™ DšØÙØØ—5‘5˜ Ó$ˆDØ TÑ)ØØŸ™˜u¨V˜Ó4ˆIÙ8A”J˜y×1Ñ1Ó3Ô4ÀrˆEØ—6‘6˜&“>ˆDÙ26”:˜dŸm™m›oÔ.¸BˆDÙ™uØÜœx¨Ó.ˆHØ×Ñ X¸ÀtÑLÔMØ�Q‰J‰Eð#	ô& 	���sˆmÔÜ�
‰
�3Žð[-ð\ ÐøôE ò 	Ü�D˜˜�*ÔÜð@ ÐûðE	ús   ÁAHÈ	H'ÈH"È"H'c           
      ó¨  — t        | d«      }d}d}d}d}|j                  dd¬«      }|rt        |j                  «       «      }|j                  dd¬«      }|rp|j                  «       }	t	        j
                  d|	«      }
|
r|
j                  d	«      }t	        j
                  d
|	«      }|r|j                  d	«      j                  «       }|j                  dd¬«      }|�rp|j                  «       }g }|�rJd|j                  dg «      v�r5|j                  dk(  rÕ|j                  d¬«      }|rê|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¬«      «       n)|j                  dk(  r|j#                  t%        |«      «       |j                  «       }|rd|j                  dg «      vr�Œ5dj'                  |«      }||||fS )u   è§£æž�è¯¦æƒ…é¡µr   r   Úh1Úcont_trG   r   Úcon_timez(\d{4}-\d{2}-\d{2})r;   u   æ�¥æº�[ï¼š:]\s*([^\s]+)ÚclearÚclassr   Tr   rE   )rF   rF   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r   z [r    z) r   r"   )r   rV   r   r&   r
   ÚsearchÚgroupr   Úfind_next_siblingr+   r%   r)   ÚIr,   r   Úreplace_withÚ
new_stringr'   r(   r-   )ÚhtmlrJ   r0   rK   Úpublish_dateÚsourceÚcontentrd   ÚctÚtxtÚdmÚsmÚct_divÚcontent_elemÚcontent_partsr4   Úa_tagrF   Úa_textra   s                       r   Úparse_detailr|   ‚   s9  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð 
�‰�4 ˆÓ	)€BÙ	Ü˜2Ÿ;™;›=Ó)ˆð 
�‰�5 ˆÓ	,€BÙ	Ø�k‰k‹mˆÜ�Y‰YÐ-¨sÓ3ˆÙØŸ8™8 A›;ˆLÜ�Y‰YÐ1°3Ó7ˆÙØ—X‘X˜a“[×&Ñ&Ó(ˆFð �Y‰Y�u ZˆYÓ0€FÚØ×/Ñ/Ó1ˆØˆÚ˜w¨l×.>Ñ.>¸wÈÓ.KÒKØ× Ñ  CÒ'Ø ×)Ñ)°Ð)Ó5�Ùà!-×!6Ñ!6°sÀÐ!6Ó!Fò ]˜Ø$ V™}˜ÜŸ9™9Ð%JÈDÔRT×RVÑRVÕWØ%*§^¡^¸$ ^Ó%?Ò%GÀ4˜FØAEÇÁÐQWÔAX¤w¨s°DÔ'9Ð^b˜HØ!×.Ñ.¨t¯©ÀÀFÀ8È2ÈhÈZÐWYÐ?ZÓ/[Õ\ð]ð "×(Ñ(¨×)>Ñ)>ÀTÐ)>Ó)JÕKØ×"Ñ" gÒ-Ø×$Ñ$¤S¨Ó%6Ô7Ø'×9Ñ9Ó;ˆLñ ˜w¨l×.>Ñ.>¸wÈÓ.KÓKð —+‘+˜mÓ,ˆà�, ¨Ð/Ð/r   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)NrJ   ú'z''rK   rL   r   rB   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;
Úsqlite3Tr>   )Ú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ÚstderrrP   rT   )ÚitemÚdetail_titleÚpub_daterq   rr   Úpage_urlrK   rp   Úsource_nameÚcontent_safeÚ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Ø—?‘? 3¨Ó-€LØ�D�Sˆk€GÜ€Iðð ˆ*�D˜˜˜t L >°°l°^À4ÈÀzÐQUÐV_ÐU`Ð`dÐelÐdmÐmqÔrwÐqxð yð€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   zFSELECT page_url FROM gov_raw WHERE page_url LIKE '%zgpingyuan.gov.cn%'Tr>   )r�   r   r@   r   ú
u   å·²çŸ¥URL: rJ   r;   z  [r   z] rK   é2   z...r	   r<   r?   rA   rC   u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)rM   u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rP   rb   ÚlenÚsetr…   r†   r‡   rˆ   r‰   r   ÚsplitrT   Ú	enumeraterQ   r+   rR   rW   rX   r|   r   r›   )rY   ÚarticlesÚ
known_urlsr—   ÚaddedÚskippedÚirE   rJ   r\   r]   Úd_titleÚd_dateÚd_sourcerr   s                  r   Úmainr«   Þ   s=  € Ü	Ð5Ô7Ü˜)Ó$€HÙÜÐÔ ØÜ	ÐœS ›]˜O¨4Ð
0Ô1ä“€JðÜ—‘ØœÐ!iÐjØ 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__r;   z--pages=ú=)rY   )r8   )%Ú__doc__r
   ÚsysrW   r…   Úurllib.parser   ÚrequestsÚbs4r   ÚBASE_URLÚ	LIST_PATHrO   rƒ   r„   r‡   ÚTOTAL_PAGESÚHEADERSÚSessionrQ   ÚheadersÚupdater   r7   rb   r|   r›   r«   Ú__name__ÚpagesrŸ   ÚargvÚargr,   rŠ   r¡   r‹   © r   r   ú<module>r¿      s,  ðñó 
Û 
Û Û Ý  ã Ý ð +€Ø"€	Ø�iÑ #Ñ%€Ø#€	Ø€Ø
€Ø€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò óF1òh.0òb(óV4ðn ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Â<C#Ã#C+Ã*C+