Ë
    V_Šj�&  ã                   óV  — 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Z
dZdZej                  j                  dd«      Zd	Zd
dddœZ ej$                  «       Zej(                  j+                  e«       dd„Zd„ Zd„ Zefd„Zd„ Zedk(  rdej8                  v rdZ e«        yy)u  
å®œåŸŽå¸‚äººæ°‘æ”¿åºœé—¨æˆ·ç½‘ç«™ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
CMS: æ”¿åºœç½‘ç«™ï¼ˆè¥„é˜³å¸‚æ”¿åºœå­�ç«™ï¼‰
åˆ—è¡¨: /xwzx/gsgg/index_N.shtmlï¼ˆNä»Ž1å¼€å§‹ï¼ŒN=1å�³/index.shtmlï¼‰
é¡µç �å®žé™…ä»Žindex_2.shtmlå¼€å§‹ï¼Œæ¯�é¡µ15æ�¡ï¼Œå…±55é¡µ
è¯¦æƒ…: /xwzx/gsgg/YYYYMM/tYYYYMMDD_XXXXXXX.shtml
é    N)ÚBeautifulSoupzhttp://yc.xiangyang.gov.cnu"   å®œåŸŽå¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šu   æ”¿åºœÚDB_PATHz/root/search.dbé   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 óB   — t         j                  | |¬«      }d|_        |S )N)Útimeoutzutf-8)ÚsessionÚgetÚencoding)Úurlr   Úresps      ú/root/gov_crawler/crawl_yc.pyÚfetchr   $   s    € Ü�;‰;�s Gˆ;Ó,€DØ€D„MØ€Kó    c                 óŠ  — | dk(  r
t         › d�}nt         › d| › d�}t        d| › d|› �«       	 t        |«      }|j                  «        t        |j                  d	«      }g }|j                  d
«      D �]'  }|j                  d«      }|D �]  }|j                  dt        j                  d«      ¬«      }	|	sŒ-|	j                  dd«      }
|	j                  dd«      xs |	j                  d¬«      }|sŒh|
j                  d«      sG|
j                  d«      rt         › d|
dd › �}
n'|
j                  d«      rt         › |
› �}
nt         › d|
› �}
d}t        j                  d|j                  «       «      }|r|j                  d«      }|j!                  ||
|dœ«       �Œ �Œ* |S # t        $ r}t        d|› �«       g cY d}~S d}~ww xY w)u   çˆ¬å�–åˆ—è¡¨é¡µé   ú/xwzx/gsgg/z/xwzx/gsgg/index_z.shtmlz  Fetching page z: z	  Error: Núhtml.parserÚulÚliÚaz\./t\d+|\./\d{6}/©Úhrefr   Ú ÚtitleT©ÚstripÚhttpú./é   ú/z(\d{4}-\d{2}-\d{2}))r   r   Údate)ÚBASE_URLÚprintr   Úraise_for_statusÚ	Exceptionr   ÚtextÚfind_allÚfindÚreÚcompiler
   Úget_textÚ
startswithÚsearchÚgroupÚappend)Úpage_numr   r   ÚeÚsoupÚitemsr   Úlisr   Úa_tagr   r   r"   Ú
date_matchs                 r   Ú
crawl_listr8   *   sÏ  € à�1‚}Ü�
˜+Ð&‰ä�
Ð+¨H¨:°VÐ<ˆä	Ð˜X˜J b¨¨Ð
.Ô/ðÜ�S‹zˆØ×ÑÔô
 ˜Ÿ™ MÓ2€DØ€Eð �m‰m˜DÓ!ó ˆØ�k‰k˜$ÓˆØó 	ˆBØ—G‘G˜C¤b§j¡jÐ1EÓ&F�GÓGˆEÙØà—9‘9˜V RÓ(ˆDà—I‘I˜g rÓ*ÒH¨e¯n©nÀ4¨nÓ.HˆEÙØà—?‘? 6Ô*Ø—?‘? 4Ô(Ü&˜Z {°4¸¸°8°*Ð=‘DØ—_‘_ SÔ)Ü&˜Z¨ vÐ.‘Dä&˜Z {°4°&Ð9�Dð ˆDÜŸ™Ð#9¸2¿;¹;»=ÓIˆJÙØ!×'Ñ'¨Ó*�à�L‰LØØØñö ò3	ððB €LøôU ò Ü�	˜!˜ˆoÔØ�	ûðús   ®F Æ	GÆ(F=Æ7GÆ=Gc                 óê	  — | d   }t        d| d   dd › d�«       	 t        |«      }|j                  «        t	        |j
                  d«      }| d   }|j                  d«      }|r;|j                  d	¬
«      }t        j                  dd|«      j                  «       }|r|}| d   }t        j                  d|j
                  «      xs  t        j                  d|j
                  «      }	|	r&|	j                  d«      }
t        |
«      dkD  r|
dd n|
}g }g }|j                  dd¬«      }|�r|j                  d«      }|r|j                  d	¬
«      }|r|}|j                  dd¬«      }|s&|j                  dt        j                  d«      ¬«      }|rgt        j                  d|j                  «       «      }	|	rA|	j                  d«      j                  dd«      j                  dd«      j                  dd«      }|j                  dt        j                  d«      ¬«      }|sQ|j                  dd¬«      }|r<|j!                  d¬ «      D ]'  }|j"                  dk(  sŒ|j%                  d!«      sŒ%|} n |s&|j                  dt        j                  d"«      ¬«      }|�r›|j!                  d#d	¬$«      D ]×  }|d%   }t        j                  d&|t        j&                  «      sŒ.|j                  d	¬
«      }|j)                  d'«      sR|j)                  d(«      rt*        › d)|d*d › �}n2|j)                  d+«      rt*        › |› �}n|j-                  d+«      › d+|› �}|j/                  |xs t0        j2                  j5                  |«      |d,œ«       ŒÙ |j!                  d-dg«      D ]˜  }|j                  d	¬
«      sŒ|j7                  g d.¢«      rŒ*|j                  d	¬
«      }t        j8                  d/|«      rŒS|j!                  d0«      }|r"|D ]  }|j/                  t;        |«      «       Œ Œˆ|j/                  |«       Œš d1j=                  d2„ |D «       «      }t        |j                  «       «      d3k  r/d4j=                  d5„ |D «       «      }|rd6|› d7|› d8|› �}n	d6|› d7|› d9�}|r|dd: n|}t>        d|||||t@        d;|rtC        jD                  |d¬<«      d=œ
S dd=œ
S # t        $ r}t        d|› �«       Y d}~yd}~ww xY w)>u   çˆ¬å�–è¯¦æƒ…é¡µr   z    Detail: r   Né(   ú...z    Error: r   Tr   u)   \s*-\s*å®œåŸŽå¸‚äººæ°‘æ”¿åºœé—¨æˆ·ç½‘ç«™$r   r"   z!(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})u2   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})r   é
   Údivzby-content-box)Úclass_Úh2z
xqym-titleztitle|info|metau   (\d{4}å¹´\d{1,2}æœˆ\d{1,2}æ—¥)u   å¹´ú-u   æœˆu   æ—¥zTRS_UEDITOR|UEDITOR|viewzxqym-pF)Ú	recursiveÚclasszview|content|article|text|TRSr   r   r   z+\.(doc|docx|pdf|xls|xlsx|ppt|pptx|zip|rar)$r   r   r   r    r!   )r   r   Úp)ÚformÚtextareaÚscriptuK   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|ç¼–è¾‘[ï¼š:]|æ�¥æº�[ï¼š:]|å�‘å¸ƒæ—¥æœŸ)Útablez

c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­w)N© )Ú.0Úparts     r   ú	<genexpr>zcrawl_detail.<locals>.<genexpr>Ì   s   è ø€ ÒA 4ºDœ$ÑAùs   ‚Šé   ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)ú[r   z](r   ú)NrI   )rJ   r   s     r   rL   zcrawl_detail.<locals>.<genexpr>Ð   s'   è ø€ Ò TÀ1 1 Q w¡Z L°°1°U±8°*¸AÔ!>Ñ Tùs   ‚z<p><a href="z">u   </a></p>

é™„ä»¶ï¼š
z</a></p>éÈ   Ú	published)Úensure_ascii)
Ú	site_nameÚ
source_urlÚpage_urlr   Úpublish_dateÚcontentÚsummaryÚcategoryÚstatusÚattachments)#r$   r   r%   r&   r   r'   r)   r,   r*   Úsubr   r.   r/   Úlenr+   Úreplacer(   Únamer
   ÚIr-   r#   Úrstripr0   ÚosÚpathÚbasenameÚfind_parentÚmatchÚstrÚjoinÚ	SITE_NAMEÚGROUPÚjsonÚdumps)Úitemr   r   r2   r3   r   Ú	title_tagÚt_textr"   r7   ÚdÚcontent_partsr]   Úcontent_divr?   ÚtÚ	info_spanÚarticle_divÚchildr6   r   Úattach_titlerC   r'   ÚtablesrG   rY   Úattach_linksrZ   s                                r   Úcrawl_detailr|   c   s   € à
ˆu‰+€CÜ	ˆL˜˜g™ s¨Ð+Ð,¨CÐ
0Ô1ðÜ�S‹zˆØ×ÑÔô
 ˜Ÿ™ MÓ2€Dð �‰M€EØ—	‘	˜'Ó"€IÙØ×#Ñ#¨$Ð#Ó/ˆÜ—‘ÐDÀbÈ&ÓQ×WÑWÓYˆÙØˆEð �‰<€DÜ—‘Ð?ÀÇÁÓKò ]Ü—‘ÐPÐRV×R[ÑR[Ó\ð áØ×Ñ˜QÓˆÜ˜Q› "šˆq��"‰v¨!ˆð €MØ€Kð —)‘)˜EÐ*:�)Ó;€Kâà×Ñ˜dÓ#ˆÙØ—‘ $�Ó'ˆAÙØ�ð  ×$Ñ$ U°<Ð$Ó@ˆ	ÙØ#×(Ñ(¨´r·z±zÐBTÓ7UÐ(ÓVˆIÙÜŸ™Ð#DÀi×FXÑFXÓFZÓ[ˆJÙØ!×'Ñ'¨Ó*×2Ñ2°5¸#Ó>×FÑFÀuÈcÓR×ZÑZÐ[`ÐbdÓe�ð "×&Ñ& u´R·Z±ZÐ@[Ó5\Ð&Ó]ˆÙØ%×*Ñ*¨5¸Ð*ÓBˆKÙà(×1Ñ1¸EÐ1ÓBò �EØ—z‘z UÓ*¨u¯y©y¸Õ/AØ&+˜Ùðñ Ø%×*Ñ*¨5¼¿¹ÐDdÓ9eÐ*ÓfˆKâà$×-Ñ-¨c¸Ð-Ó=ò �Ø˜V‘}�Ü—9‘9ÐKÈTÔSU×SWÑSWÕXØ#(§>¡>¸ >Ó#=�LØŸ?™?¨6Ô2ØŸ?™?¨4Ô0Ü&. Z¨{¸4ÀÀ¸8¸*Ð#E™DØ!Ÿ_™_¨SÔ1Ü&. Z°¨vÐ#6™Dà&)§j¡j°£oÐ%6°a¸°vÐ#>˜DØ×&Ñ&Ø!-Ò!G´·±×1AÑ1AÀ$Ó1GØ#ñ(õ ðð" !×)Ñ)¨3°¨,Ó7ò +�Ø—z‘z¨�zÔ-ØØ—=‘=Ò!?Ô@Øà—z‘z¨�zÓ-�Ü—8‘8ÐjÐlpÔqØàŸ™ GÓ,�ÙØ!'ò 9˜Ø%×,Ñ,¬S°«ZÕ8ð9àà×$Ñ$ TÕ*ð!+ð$ �k‰kÑA¨=ÔAÓA€Gô ˆ7�=‰=‹?Ó˜bÒ Ø—y‘yÑ TÈÔ TÓTˆÙØ$ S E¨¨E¨7Ð2IÈ,ÈÐX‰Gà$ S E¨¨E¨7°(Ð;ˆGá&ˆg�d�s‰m¨E€Gô ØØØØØØÜØÙFQ”t—z‘z +¸EÔBñð ð XZñð øô[ ò Ü�˜A˜3ÐÔ Üûðús   œS Ó	S2ÓS-Ó-S2c                 ó$  — | syt        j                  |«      }|j                  «       }d}t        | «      D ]�  \  }}	 |j	                  d|d   |d   |d   |d   |d   |d   |d	   |d
   |d   |d   f
«       |j
                  dkD  r>|dz  }|dk  s|dz   dz  dk(  r)t        d|dz   › dt        | «      › d|d   d d › d|› �«       Œ� |j                  «        |j                  «        |S # t        $ r}t        d|d   › d|› �«       Y d }~ŒÔd }~ww xY w)Nr   zÝINSERT OR IGNORE INTO gov_raw 
                (site_name, source_url, page_url, title, publish_date,
                 content, summary, category, status, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)rU   rV   rW   r   rX   rY   rZ   r[   r\   r]   r   r   rM   ú  [r!   ú] r:   z +z	  ERROR [z]: )Úsqlite3ÚconnectÚcursorÚ	enumerateÚexecuteÚrowcountr$   r_   r&   ÚcommitÚclose)ÚrecordsÚdb_pathÚconnÚcÚ	new_countÚiÚrecr2   s           r   Ú
save_to_dbr�   æ   sI  € ÙØÜ�?‰?˜7Ó#€DØ�‰‹€AØ€IÜ˜GÓ$ò 7‰ˆˆ3ð	7Ø�I‰Ið 9ð �[Ñ! 3 |Ñ#4°c¸*±oØ�W‘˜s >Ñ2°C¸	±NØ�Y‘  Z¡°#°h±-Ø�]Ñ#ð%ô	&ð �z‰z˜AŠ~Ø˜Q‘�	Ø ’> a¨¡c¨R¡Z°1¢_Ü˜C  !¡˜u A¤c¨'£l ^°2°c¸'±lÀ3ÀBÐ6GÐ5HÈÈ9È+ÐVÔWøð7ð  	‡K�K„MØ‡J�J„LØÐøô	 ò 	7Ü�I˜c *™oÐ.¨c°!°Ð5×6Ñ6ûð	7ús   ½BC(Ã(	DÃ1D
Ä
Dc                  ó¦  — t        dt        › d�«       g } t        «       }t        dt        dz   «      D ]n  }t        |«      }|st        d|› d�«        nPt        dt        |«      › d|› �«       |D ]/  }|d   |vsŒ|j                  |d   «       | j                  |«       Œ1 Œp t        d	t        | «      › �«       g }t        | «      D ]_  \  }}t        d
|dz   › dt        | «      › d|d   d d › d�«       t        |«      }|r|j                  |«       t        j                  d«       Œa |rt        |«      }t        d|› d�«       y t        d«       y )Nz=== u    - å…¨é‡�çˆ¬å�– ===r   z  -> 0 items on page z
, stoppingz  -> z items on page r   z
Total unique items: r~   r!   r   r   é   r;   g333333Ó?z

Inserted z% new records (trigger auto-syncs FTS)z
No records to insert)r$   rk   ÚsetÚrangeÚ	MAX_PAGESr8   r_   Úaddr0   rƒ   r|   ÚtimeÚsleepr�   )	Ú	all_itemsÚ	seen_urlsÚpager4   ro   rˆ   ÚidxÚdetailÚcounts	            r   Úmainrž     sb  € Ü	ˆD”�Ð.Ð
/Ô0Ø€IÜ“€Iä�aœ Q™Ó'ò 	'ˆÜ˜4Ó ˆÙÜÐ)¨$¨¨zÐ:Ô;ÙÜ�”c˜%“j�\ °°Ð7Ô8Øò 	'ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Õ&ñ	'ð	'ô 
Ð"¤3 y£>Ð"2Ð
3Ô4à€GÜ˜yÓ)ò ‰	ˆˆTÜ��C˜‘E�7˜!œC 	›NÐ+¨2¨d°7©m¸C¸RÐ.@Ð-AÀÐEÔFÜ˜dÓ#ˆÙØ�N‰N˜6Ô"Ü�
‰
�3�ðñ Ü˜7Ó#ˆÜ�˜E˜7Ð"GÐHÕIäÐ&Õ'r   Ú__main__z--incrementalr   )r‘   )Ú__doc__Úrequestsr*   rm   r–   Úsysrd   r€   Úbs4r   r#   rk   rl   Úenvironr
   r   r”   ÚHEADERSÚSessionr	   ÚheadersÚupdater   r8   r|   r�   rž   Ú__name__ÚargvrI   r   r   ú<module>r«      sË   ðñó Û 	Û Û Û 
Û 	Û Ý à'€Ø0€	Ø€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø€	ð DØOØ0ñ€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ óò6òr@ðF !(ó ò6(ðB ˆzÒØ˜#Ÿ(™(Ñ"Øˆ	Ù…Fð r   