Ë
    V_ŠjQ"  ã                   ór  — 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mZ ddlmZm	Z	 ddl
Z
dZdZ e
j                  dd«      Zd	Zd
Z ej"                  «       Zej&                  j)                  ddi«        ej*                  «        e	d¬«      z
  j-                  d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uw   
Crawl å®œæ˜Œé«˜æ–°åŒº - é€šçŸ¥å…¬å‘Š (gxq.yichang.gov.cn/list-23-1.html)
Same structure as list-103 but column ID 23.
é    N)ÚBeautifulSoup)ÚdatetimeÚ	timedeltazhttp://gxq.yichang.gov.cnÚ23Ú	SEARCH_DBz/root/search.dbu   å®œæ˜Œé«˜æ–°åŒº - é€šçŸ¥å…¬å‘Šu   å®œæ˜Œz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36iG  )Údaysz%Y-%m-%dc                 óÆ  — |j                  «       }d}d}| D ]‘  }|d   r|d   t        k  r|dz  }Œ|j                  dd«      }|r|d d nd}	 |j                  dt        |d   |d	   |j                  dd«      ||t
        |j                  d
d«      f«       |j                  dkD  r|dz  }Œ“ |j                  «        ||fS # t        $ r}t        d|› �«       Y d }~ŒÄd }~ww xY w)Nr   Údateé   ÚcontentÚ éÈ   z²INSERT OR IGNORE INTO gov_raw 
                (site_name, page_url, title, publish_date, summary, content, category, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)ÚurlÚtitleÚattachmentsz  DB error: )
ÚcursorÚTHREE_YEARS_AGOÚgetÚexecuteÚ	SITE_NAMEÚCATEGORYÚrowcountÚ	ExceptionÚprintÚcommit)	ÚrecordsÚconnr   ÚinsertedÚskippedÚrecr   ÚsummaryÚes	            ú+/root/gov_crawler/crawl_gxq_yichang_tzgg.pyÚinsert_to_dbr$      s  € Ø�[‰[‹]€FØ€HØ€GØò &ˆØˆvŠ;˜3˜v™;¬Ò8Ø�q‰LˆGØØ—'‘'˜) RÓ(ˆÙ#*�'˜$˜3‘-°ˆð
	&Ø�N‰Nð 3ô ˜3˜u™: s¨7¡|°S·W±W¸VÀRÓ5HØ˜¤(¨C¯G©G°MÀ2Ó,Fð5ôð �‰ Ò"Ø˜A‘�øð&ð" 	‡K�K„MØ�WÐÐøô ò 	&Ü�L  Ð$×%Ñ%ûð	&ús   ÁAB?Â?	C ÃCÃC c                 óÐ  — g }t        | d«      }|j                  dd¬«      D �]@  }|j                  dd¬«      }|j                  dd¬«      }|sŒ-|j                  d«      }|sŒA|j                  dd	«      }|j	                  d
¬«      }|r|sŒjt        j                  dd	|«      j                  «       }|j                  d«      rd|z   }nG|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|r|j	                  d
¬«      nd	}	t        j                  d|	«      }
|
r|
j                  d«      }	|j                  |||	dœ«       �ŒC |S )Núhtml.parserÚdivz
list-views©Úclass_zlistview-btzlistview-dateÚaÚhrefr   T©Ústripz
<!--.*?-->z//zhttp:ú/Úhttpz(\d{4}-\d{2}-\d{2})r   )r   r   r
   )r   Úfind_allÚfindr   Úget_textÚreÚsubr-   Ú
startswithÚBASE_URLÚlstripÚmatchÚgroupÚappend)Ú	html_textr   ÚsoupÚitemÚbt_divÚdate_divr*   r+   r   Údate_strÚdms              r#   Úparse_list_pagerB   2   sQ  € Ø€GÜ˜ MÓ2€DØ—‘˜e¨L�Ó9ó HˆØ—‘˜5¨�Ó7ˆØ—9‘9˜U¨?�9Ó;ˆÙØØ�K‰K˜ÓˆÙØØ�u‰u�V˜RÓ ˆØ—
‘
 �
Ó&ˆÙ™5ØÜ—‘�} b¨%Ó0×6Ñ6Ó8ˆØ�?‰?˜4Ô Ø˜T‘>‰DØ�_‰_˜SÔ!Ü˜d‘?‰DØ—‘ Ô(Ü˜c‘> D§K¡K°Ó$4Ñ4ˆDÙ4<�8×$Ñ$¨4Ð$Ô0À"ˆÜ�X‰XÐ,¨hÓ7ˆÙØ—x‘x “{ˆHØ�‰ ¨t¸XÑFÖGð/Hð0 €Nó    c           	      óˆ  ‡— | j                  dd¬«      }|s| j                  dd„ ¬«      }|syg }g }|j                  D �]§  }|j                  dk(  r'|j                  d¬«      }|sŒ(|j	                  |«       Œ:|j                  d	k(  r•g }|j                  d
«      D ][  }|j                  ddg«      D �cg c]  }|j                  d¬«      ‘Œ }	}|	sŒ6|j	                  ddj                  |	«      z   dz   «       Œ] |sŒ½|j	                  dj                  |«      «       ŒÞ|j                  sŒë|j                  d¬«      sŒþ|j                  d	«      D ]–  }
g }|
j                  d
«      D ][  }|j                  ddg«      D �cg c]  }|j                  d¬«      ‘Œ }	}|	sŒ6|j	                  ddj                  |	«      z   dz   «       Œ] |sŒw|j	                  dj                  |«      «       Œ˜ �Œª |j                  d«      D ]-  }|j                  d¬«      }|sŒ||vsŒ|j	                  |«       Œ/ |j                  d«      D ]¶  }|j                  dd«      Št        ˆfd„dD «       «      sŒ*|j                  d¬«      xs t        j                  j                  ‰«      }‰j                  d«      s5‰j                  d«      r	t        ‰z   nt        dz   ‰j                  d«      z   Š|j	                  |‰dœ«       Œ¸ dj                  t        j!                  |«      «      }t#        |j%                  «       «      dk  rhdj'                  d| j                  d«      r!| j                  d«      j                  d¬«      nd«      }|r"|D ]  }|dj'                  |d    |d!   «      z  }Œ ||rt)        j*                  |d"¬#«      fS dfS c c}w c c}w )$zEExtract clean text from detail page: paragraphs, tables, attachments.r'   ztxtcontent-divr(   c                 óH   — | r| xr dt        | «      j                  «       v S dS )Nr   F)ÚstrÚlower)Úcs    r#   ú<lambda>z&extract_text_content.<locals>.<lambda>T   s"   € Ñ]^¸Ò8Y¸iÌ3ÈqË6Ï<É<Ë>Ð>Y€ Ðdi€ rC   )r   r   ÚpTr,   ÚtableÚtrÚtdÚthz| z | z |ú
r*   r+   r   c              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)rG   Úendswith)Ú.0Úextr+   s     €r#   ú	<genexpr>z'extract_text_content.<locals>.<genexpr>~   s"   øè ø€ Òp¨cˆt�z‰z‹|×$Ñ$ S×)Ñpùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarr/   r.   )Únamer   z

é   z<p><a href="{}">{}</a></p>ÚNONEÚh1u   æ–‡ä»¶u    
ðŸ“Ž <p><a href="{}">{}</a></p>r   rU   F)Úensure_ascii)r1   ÚchildrenrU   r2   r:   r0   Újoinr   ÚanyÚosÚpathÚbasenamer5   r6   r7   ÚdictÚfromkeysÚlenr-   ÚformatÚjsonÚdumps)r<   Úcontent_divÚcontent_partsr   ÚchildÚtxtÚrowsrL   rM   ÚcellsrK   rJ   r*   Úfnamer   Úattr+   s                   @r#   Úextract_text_contentrn   P   s„  ø€ à—)‘)˜EÐ*:�)Ó;€KÙØ—i‘i Ñ.i�iÓjˆáØà€MØ€Kð ×%Ñ%ó :ˆØ�:‰:˜ÒØ—.‘. t�.Ó,ˆCÚØ×$Ñ$ SÕ)Ø�Z‰Z˜7Ò"ØˆDØ—n‘n TÓ*ò A�Ø;=¿;¹;ÈÈdÀ|Ó;TÖU°R˜Ÿ™¨4˜Õ0ÐU�ÐUÚØ—K‘K  u§z¡z°%Ó'8Ñ 8¸4Ñ ?Õ@ðAò Ø×$Ñ$ T§Y¡Y¨t£_Õ5Ø�Z‹Z˜EŸN™N°˜NÕ6àŸ™¨Ó0ò :�Ø�ØŸ.™.¨Ó.ò E�BØ?A¿{¹{ÈDÐRVÈ<Ó?XÖY¸˜RŸ[™[¨t˜[Õ4ÐY�EÐYÚØŸ™ D¨5¯:©:°eÓ+<Ñ$<¸tÑ$CÕDðEò Ø!×(Ñ(¨¯©°4«Õ9ò:ð:ð2 ×!Ñ! #Ó&ò &ˆØ�j‰j˜tˆjÓ$ˆÚ�3˜mÒ+Ø× Ñ  Õ%ð&ð ×!Ñ! #Ó&ò =ˆØ�u‰u�V˜RÓ ˆÜÓpÐ5oÔpÕpØ—J‘J T�JÓ*ÒD¬b¯g©g×.>Ñ.>¸tÓ.DˆEØ—?‘? 6Ô*Ø*.¯/©/¸#Ô*>”x $’ÄHÈsÁNÐUY×U`ÑU`ÐadÓUeÑDe�Ø×Ñ¨°dÑ;Õ<ð=ð �k‰kœ$Ÿ-™-¨Ó6Ó7€Gô ˆ7�=‰=‹?Ó˜bÒ Ø.×5Ñ5ØØ48·I±I¸d´OˆD�I‰I�d‹O×$Ñ$¨4Ð$Ô0Èó
ˆñ Ø"ò _�ØÐ>×EÑEÀcÈ%ÁjÐRUÐV\ÑR]Ó^Ñ^‘ð_ð Á;”D—J‘J˜{¸Ô?ÐVÐVÐTVÐVÐVùòW Vùò Zs   Â2N:Å;N?
c                 ó€  — 	 t         j                  | d¬«      }d|_        t	        |j
                  d«      }t        |«      \  }}d}|j                  ddd	i¬
«      }|r'|j                  d«      r|d   j                  «       d d }d}|j                  d«      }|r|j                  d¬«      }||||fS # t        $ r Y yw xY w)Né   ©Útimeoutúutf-8)r   r   r   r   r&   r   ÚmetarU   ÚPubDate)Úattrsr   é
   rX   Tr,   )
Úsessionr   Úencodingr   r   Útextrn   r1   r-   r2   )	r   Úrespr<   r   r   r@   rt   Ú
full_titlerX   s	            r#   Úfetch_detailr}   “   sÌ   € ðÜ�{‰{˜3¨ˆ{Ó+ˆØˆŒô ˜Ÿ™ MÓ2€Dä/°Ó5Ñ€Gˆ[à€HØ�9‰9�V F¨IÐ#6ˆ9Ó7€DÙ�—‘˜Ô#Ø˜	‘?×(Ñ(Ó*¨3¨BÐ/ˆà€JØ	�‰�4‹€BÙ	Ø—[‘[ t�[Ó,ˆ
à�H˜j¨+Ð5Ð5øô! ò Ùðús   ‚B1 Â1	B=Â<B=c            	      óÌ  — dt         j                  v xs t         j                  d   dk(  } dd l}|j                  t        «      }|j                  d«       t        dt        › d�«       | rt        d«       d	}nd
}t        › dt        › d�}t        j                  |d¬«      }d|_        t        |j                  «      }t        dt        |«      › d�«       | sñt!        |j                  d«      }|j#                  dd¬«      }|rÆ|j%                  d«      }	d	}
|	D ]U  }t'        j(                  dt        › d�|j                  dd«      «      }|sŒ4t+        |j-                  d	«      «      }||
kD  sŒT|}
ŒW |
dkD  r|
|k  r|
}t'        j(                  d|j/                  «       «      }|r|j-                  d	«      nd}t        d|› d|
› d|› �«       t1        d |d	z   «      D ]Ÿ  }t        › dt        › d!|› d"�}	 t        j                  |d¬«      }d|_        |j2                  d#k7  r n\t        |j                  «      }|s nCt        d$|› d%t        |«      › d�«       |j5                  |«       t7        j8                  d&«       Œ¡ t        d(t        |«      › �«       t        d)«       t=        |«      D ]Y  \  }}|d*z  dk(  rt        d+|› d,t        |«      › �d-¬.«       t?        |d/   «      \  }}}}|r||d0<   |r||d1<   |r||d2<   |sŒU||d3<   Œ[ tA        ||«      \  }}|jC                  «        t        d4«       t        d5|› d6|› �«       y # t:        $ r}t        d$|› d'|› �«       Y d }~ Œåd }~ww xY w)7NÚincrementaléÿÿÿÿÚ1r   zPRAGMA busy_timeout=5000z=== z ===zMode: incremental (page 1 only)r   é   z/list-z-1.htmlrp   rq   rs   z
  Page 1: z recordsr&   r'   Úpages)Úidr*   zlist-z-(\d+)\.htmlr+   r   u   (\d+)æ�¡ú?z	  Total: z
 records, z pages, crawling é   ú-z.htmlr   z  Page z: g333333Ó?z error: z
Total collected: zFetching details...rw   z  r.   T)Úflushr   r   r
   r   r   z
=== SUMMARY ===z
Inserted: z, Skipped (old): )"ÚsysÚargvÚsqlite3ÚconnectÚDB_PATHr   r   r   r6   ÚCOLUMNrx   r   ry   rB   rz   rb   r   r1   r0   r3   ÚsearchÚintr9   r2   ÚrangeÚstatus_codeÚextendÚtimeÚsleepr   Ú	enumerater}   r$   Úclose)r   r‹   r   Úpages_to_crawlÚurl1r{   Úall_recordsr<   Ú	pages_divÚlinksÚtotal_pagesr*   ÚmrJ   Útotal_matchÚ	total_recÚpageÚpage_urlr   r"   Úir    r   Údate_from_detailr|   r   r   r   s                               r#   Úmainr¥   ª   s`  € Ø¤3§8¡8Ð+ÒB¬s¯x©x¸©|¸sÑ/B€KÛØ�?‰?œ7Ó#€DØ‡L�LÐ+Ô,Ü	ˆD”�˜4Ð
 Ô!ÙÜÐ/Ô0Ø‰àˆäˆZ�vœf˜X WÐ-€DÜ�;‰;�t Rˆ;Ó(€DØ€D„MÜ! $§)¡)Ó,€KÜ	ˆJ”s˜;Ó'Ð(¨Ð
1Ô2áÜ˜TŸY™Y¨Ó6ˆØ—I‘I˜e¨�IÓ0ˆ	ÙØ×&Ñ& sÓ+ˆEØˆKØò (�Ü—I‘I ¤v h¨lÐ;¸Q¿U¹UÀ6È2Ó=NÓO�ÚÜ˜AŸG™G A›J›�AØ˜;“Ø&'™ð(ð ˜QŠ ;°Ò#?Ø!,�ÜŸ)™) K°×1CÑ1CÓ1EÓFˆKÙ0;˜×)Ñ)¨!Ô,ÀˆIÜ�I˜i˜[¨
°;°-Ð?PÐQ_ÐP`ÐaÔbä�a˜¨!Ñ+Ó,ò ˆÜ�Z˜v¤f X¨Q¨t¨f°EÐ:ˆð	Ü—;‘;˜x°�;Ó4ˆDØ#ˆDŒMØ×Ñ 3Ò&ÙÜ% d§i¡iÓ0ˆGÙÙÜ�G˜D˜6 ¤C¨£L >°Ð:Ô;Ø×Ñ˜wÔ'Ü�J‰J�s�Oðô" 
Ð¤ KÓ 0Ð1Ð
2Ô3Ü	Ð
Ô Ü˜KÓ(ò -‰ˆˆ3Øˆr‰6�QŠ;Ü�B�q�c˜œ3˜{Ó+Ð,Ð-°TÕ:Ü=IÈ#ÈeÉ*Ó=UÑ:ˆÐ! :¨{ÙØ$ˆC�	‰NÙØ*ˆC�‰KÙØ%ˆC�‰LÚØ!,ˆC�Òð-ô % [°$Ó7Ñ€HˆgØ‡J�J„LÜ	ÐÔÜ	ˆJ�x�jÐ 1°'°Ð
;Õ<øô- ò 	Ü�G˜D˜6 ¨!¨Ð-Ô.Ýûð	ús%   Ç.-L>ÈL>È6AL>Ì>	M#ÍMÍM#Ú__main__)Ú__doc__rd   r‰   r3   r”   ÚrequestsÚbs4r   r   r   r]   r6   rŽ   Úgetenvr�   r   r   ÚSessionrx   ÚheadersÚupdateÚnowÚstrftimer   r$   rB   rn   r}   r¥   Ú__name__© rC   r#   ú<module>r²      sÎ   ðñó ß Ó Û Ý ß (Û 	à&€Ø	€Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø,€	Ø€à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ Øð  Dðô ð  �8—<‘<“>¡I°5Ô$9Ñ9×CÑCÀJÓO€òò2ò<@WòF6ò.G=ðT ˆzÒÙ…Fð rC   