Ë
    V_Šj8&  ã                   óX  — 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mZmZ ddl	Z	ddl
mZ ddlmZ dZdZeez   dz   Zd	Zd
Z ej&                  dd«      ZdZdZddddœZdZ e	j2                  «       Zej6                  j9                  e«       d„ Zd„ Zdd„Zd„ Z d„ Z!e"dk(  r e!«        yy)u)  
æ°¸ä¿®åŽ¿çŽ¯ä¿�å±€-é€šçŸ¥å…¬å‘Šçˆ¬è™«
crawl_yongxiu_gzdt_hjbhj.py
åˆ—è¡¨: ul.info-list > li.td01 > a[title] æ ‡é¢˜ + span æ—¥æœŸ
åˆ†é¡µ: index.html + index_2~5.html (5é¡µ, 20æ�¡/é¡µ)
è¯¦æƒ…: div#content.xl-text, æ ‡é¢˜ meta[ArticleTitle]/p.mainTitle
è¯¦æƒ…404æ—¶ä½¿ç”¨ [æ ‡é¢˜](åŽŸæ–‡URL) å›žé€€
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttp://www.yongxiu.gov.cnz!/bmgkxx/hjbhj/gzdt_3117/gggs_3119z/index.htmlu   æ°¸ä¿®åŽ¿çŽ¯ä¿�å±€-é€šçŸ¥å…¬å‘Šu   æ±Ÿè¥¿Ú	SEARCH_DBz/root/search.dbé   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.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-Languageé   c                 óJ   — t         j                  | t        ¬«      }d|_        |S )N©Útimeoutzutf-8)ÚsessionÚgetÚTIMEOUTÚencoding)ÚurlÚresps     ú-/root/gov_crawler/crawl_yongxiu_gzdt_hjbhj.pyÚfetchr   #   s    € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ€Kó    c                 ó:  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  ddd¬«      D ]Þ  }|j                  d	d
¬«      }|sŒ|j                  d«      xs |j	                  d
¬«      }|sŒA|d   j                  «       }|j                  d«      r
t        |z   }n$|j                  d«      st        t        z   dz   |z   }|j                  d«      }|r|j	                  d
¬«      dd nd}	|j                  |j                  «       ||	f«       Œà |S )u<   è§£æž�åˆ—è¡¨é¡µ â€” ul.info-list > li.td01 > a[title] + spanúhtml.parserÚulz	info-list©Úclass_ÚliÚtd01F)r   Ú	recursiveÚaT©ÚhrefÚtitle©Ústripr"   ú/ÚhttpÚspanNé
   Ú )
r   ÚfindÚfind_allr   Úget_textr%   Ú
startswithÚBASE_URLÚ	LIST_PATHÚappend)
ÚhtmlÚsoupÚitemsr   r   r    r#   r"   Ú	date_spanÚdate_strs
             r   Ú
parse_listr7   (   s  € ä˜˜}Ó-€DØ€EØ	�‰�4 ˆÓ	,€BÙØˆØ�k‰k˜$ v¸ˆkÓ?ò 6ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØØ�‰y�‰Ó ˆØ�?‰?˜3ÔÜ˜d‘?‰DØ—‘ Ô(ÜœiÑ'¨#Ñ-°Ñ4ˆDØ—G‘G˜F“Oˆ	Ù:C�9×%Ñ%¨DÐ%Ó1°#°2Ñ6ÈˆØ�‰�e—k‘k“m T¨8Ð4Õ5ð6ð €Lr   c           	      óN  — t        | d«      }d}|j                  ddt        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|s'|j                  dd	¬
«      }|r|j                  d¬«      }|s[t        j                  d| t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }d}|j                  ddt        j                  dt        j                  «      i¬«      }	|	r'|	j                  d«      r|	d   j                  «       dd }|s)t        j                  d| «      }
|
r|
j                  d«      }d}|j                  dd¬«      }|s|j                  dd¬
«      }|s5|j                  dt        j                  dt        j                  «      ¬
«      }|�r	g }|j                  D �]�  }|j                  dk(  r¯t        |«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }t        j                  dd|«      }t        j                  dd|«      j                  «       }|sŒ°|j                  |«       ŒÂ|j                  dk(  rÆ|j!                  d«      D ]°  }t        |«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }t        j                  dd|«      }t        j                  dd|«      j                  «       }|sŒ |j                  |«       Œ² �Œ—|j                  dk(  s�Œ¨g }|j!                  d «      D ]\  }|j!                  d!d"g«      D �cg c]  }|j                  dd¬«      ‘Œ }}|sŒ7|j                  d#d$j#                  |«      z   d%z   «       Œ^ |s�Œ|d&   }d#d$j#                  d'g|j%                  d(«      dz
  z  «      z   d%z   }|j                  d)j#                  |dd «      d)z   |z   d)z   d)j#                  |dd «      z   «       �Œ“ |rd*j#                  |«      }nSt        j                  ddt        |«      «      j                  «       }t        j                  dd|«      j                  «       }g }|xs |}|j!                  d+d¬,«      D ]‘  }|d-   j                  «       j'                  «       }t        j                  d.|«      sŒ;t)        ||d-   j                  «       «      }|j                  |j                  d¬«      xs |j+                  d/«      d0   |d1œ«       Œ“ t-        |j                  «       «      d2k  re|xs8 |xs4 |j+                  d/«      d0   j/                  d3d«      j/                  d4d5«      }d6|› d7|› d8�}|r|d9z  }|D ]  }|d:|d   › d;|d<   › d=�z  }Œ ||||fS c c}w )>u;   è§£æž�è¯¦æƒ…é¡µ â€” æ³¨æ„�è¯¦æƒ…å�¯èƒ½404ï¼Œç©ºå†…å®¹å›žé€€r   r*   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚpÚ	mainTitler   Tr$   z%<p\s+class="mainTitle"[^>]*>(.*?)</p>z<[^>]+>é   ÚPubDateNr)   z(\d{4}-\d{2}-\d{2})Údiv)Úidzxl-textzTRS_UEDITOR|TRS_WEBz&<a[^>]*href="([^"]*)"[^>]*>([^<]*)</a>z[\2](\1)z<img[^>]*src="([^"]*)"[^>]*>z![](\1)ú\s+ú z&nbsp;ÚtableÚtrÚtdÚthz| z | z |r   z---ú|ú
z

r    r!   r"   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r&   éÿÿÿÿ)r:   r   r   ú.htmlÚtÚ20z<p><a href="z">z</a></p>u   

é™„ä»¶ï¼šz
  - [z](r   ú))r   r+   ÚreÚcompileÚIr   r%   r-   ÚsearchÚSÚsubÚgroupÚchildrenr:   Ústrr1   r,   ÚjoinÚcountÚlowerr   ÚsplitÚlenÚreplace)Ú	html_textr   Ú
list_titler3   r#   Úmeta_tÚhÚtitle_mÚpub_dateÚmeta_dÚdmr=   Úcontent_divÚ
paragraphsÚchildÚp_htmlÚtextr>   ÚrowsrG   rH   ÚcellsÚrow0ÚsepÚattachmentsÚscopeÚa_tagÚahrefÚfull_urlÚfallback_titleÚatts                                  r   Úparse_detailrx   @   s¨  € ä˜ MÓ2€Dð €EØ�Y‰Y�v f¬b¯j©j¸Ì"Ï$É$Ó.OÐ%PˆYÓQ€FÙ�&—*‘*˜YÔ'Ø�yÑ!×'Ñ'Ó)ˆÙØ�I‰I�c +ˆIÓ.ˆÙØ—J‘J T�JÓ*ˆEÙÜ—)‘)ÐDÀiÔQS×QUÑQUÓVˆÙÜ—F‘F˜: r¨7¯=©=¸Ó+;Ó<×BÑBÓDˆEð €HØ�Y‰Y�v f¬b¯j©j¸ÄRÇTÁTÓ.JÐ%KˆYÓL€FÙ�&—*‘*˜YÔ'Ø˜)Ñ$×*Ñ*Ó,¨S¨bÐ1ˆÙÜ�Y‰YÐ-¨yÓ9ˆÙØ—x‘x “{ˆHð €GØ—)‘)˜E i�)Ó0€KÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i ¬b¯j©jÐ9OÔQS×QUÑQUÓ.V�iÓWˆâØˆ
Ø ×)Ñ)ó 	eˆEØ�z‰z˜SÒ Ü˜U›�ÜŸ™Ð IÈ;ÐX^Ó_�ÜŸ™Ð ?ÀÈVÓT�Ü—v‘v˜j¨"¨fÓ5×;Ñ;Ó=�Ü—v‘v˜f c¨4Ó0�Ü—v‘v˜i¨¨dÓ3×9Ñ9Ó;�ÚØ×%Ñ% dÕ+Ø—‘˜uÒ$ØŸ™¨Ó,ò 0�AÜ  ›V�FÜŸV™VÐ$MÈ{Ð\bÓc�FÜŸV™VÐ$CÀZÐQWÓX�FÜŸ6™6 *¨b°&Ó9×?Ñ?ÓA�DÜŸ6™6 &¨#¨tÓ4�DÜŸ6™6 )¨S°$Ó7×=Ñ=Ó?�DÚØ"×)Ñ)¨$Õ/ò0ð —‘˜wÔ&Ø�ØŸ.™.¨Ó.ò E�BØDFÇKÁKÐQUÐW[ÐP\ÓD]Ö^¸b˜RŸ[™[¨°D˜[Õ9Ð^�EÐ^ÚØŸ™ D¨5¯:©:°eÓ+<Ñ$<¸tÑ$CÕDðEó Ø ™7�DØ §¡¨U¨G°t·z±zÀ#³ÈÑ7JÑ,KÓ!LÑLÈtÑS�CØ×%Ñ% d§i¡i°°R°a°Ó&9¸DÑ&@À3Ñ&FÈÑ&MÐPT×PYÑPYÐZ^Ð_`Ð_aÐZbÓPcÑ&cÖdð;	eñ< Ø—k‘k *Ó-‰Gä—f‘f˜Z¨¬S°Ó-=Ó>×DÑDÓFˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð €KØÒ˜4€EØ—‘ ¨$�Ó/ò ˆØ�f‘×#Ñ#Ó%×+Ñ+Ó-ˆÜ�9‰9Ð:¸EÕBÜ˜s E¨&¡M×$7Ñ$7Ó$9Ó:ˆHØ×ÑØŸ™¨T˜Ó2ÒM°h·n±nÀSÓ6IÈ"Ñ6MØñ õ ð	ô ˆ7�=‰=‹?Ó˜bÒ ØÒj *Òj°·	±	¸#³¸rÑ0B×0JÑ0JÈ7ÐTVÓ0W×0_Ñ0_Ð`cÐeiÓ0jˆØ    R¨Ð'7°xÐ@ˆÙØ�Ñ&ˆGØ"ò B�Ø˜W S¨¡[ M°°C¸±J°<¸qÐAÑA‘ðBð �(˜G [Ð0Ð0ùòE _s   ÏX"c                 ó.  — t        j                  «       t        t        ¬«      z
  }g }| D ]M  \  }}}	 |r0t        j                  |d«      }||k\  r)|j                  |||f«       n|j                  |||f«       ŒO |S #  |j                  |||f«       Y ŒjxY w)N)Údaysz%Y-%m-%d)r   Únowr   ÚINCREMENTAL_DAYSÚstrptimer1   )r4   ÚcutoffÚfilteredr#   r   r6   Ú	item_dates          r   Úincremental_filterr�   ¢   s�   € Ü�\‰\‹^œiÔ-=Ô>Ñ>€FØ€HØ %ò 	4Ñˆˆs�Hð	4ÙÜ$×-Ñ-¨h¸
ÓC�	Ø Ò&Ø—O‘O U¨C°Ð$:Õ;à—‘ ¨¨XÐ 6Ô7øð	4ð €Oøð	4Ø�O‰O˜U C¨Ð2Ö3ús   ²AA<Á<Bc                  ó`  — t        d„ dD «       «      } t        g}t        dt        dz   «      D ]%  }|j	                  t
        t        z   d|› d�z   «       Œ' g }t        |«      D ]ƒ  \  }}	 t        |«      }|j                  }t        |«      }t        d|dz   › dt        › d	t        |«      › d
�t        j                  ¬«       |j                  |«       t!        j"                  d«       Œ… t        dt        |«      › �t        j                  ¬«       | r9t'        |«      }t        dt(        › dt        |«      › �t        j                  ¬«       t+        «       }
g }|D ]/  }|d   |
vsŒ|
j-                  |d   «       |j	                  |«       Œ1 t        dt        |«      › �t        j                  ¬«       d}d}d}t        |«      D �]n  \  }\  }}}	 t        |«      }|j                  }t/        |||«      \  }}}}|xs |}|xs |}|r|d d nd}t1        j2                  dd|d d «      j5                  «       xs |}|rt7        j8                  |d¬«      nd}t;        j<                  t>        d¬«      }|jA                  «       }|jC                  d|||tD        tF        ||||f	«       |jH                  dkD  r|dz  }n|dz  }|jK                  «        |jM                  «        |dz   dz  dk(  r6t        d|dz   › dt        |«      › d|› d |› d!|› �
t        j                  ¬«       t!        j"                  d«       �Œq t        d%d&› �t        j                  ¬«       t        d'tD        › d(|› d)|› d*|› �t        j                  ¬«       t        d&› t        j                  ¬«       y # t$        $ r/}	t        d|dz   › d|	› �t        j                  ¬«       Y d }	~	�Œkd }	~	ww xY w# t$        $ rO}	t        d|dz   › d"|d d# › d	|	› �t        j                  ¬«       |dz  }t!        j"                  d$«       Y d }	~	�Œfd }	~	ww xY w)+Nc              3   ó@   K  — | ]  }|t         j                  v –— Œ y ­w)N)ÚsysÚargv)Ú.0Úargs     r   ú	<genexpr>zmain.<locals>.<genexpr>³   s   è ø€ Ò\¨S˜¤§¡œÑ\ùs   ‚)z--incrementalÚincrementalÚincé   r@   z/index_rM   z  Page r&   z: z items)Úfileg333333Ó?z error: z	  Total: z  Incremental (zd): z
  Unique: r   iPÃ  r*   rD   rE   éÈ   F)Úensure_asciir)   r   z»INSERT OR IGNORE INTO gov_raw 
                (page_url, title, publish_date, site_name, group_name, summary, content, attachments, source_url)
                VALUES (?,?,?,?,?,?,?,?,?)r   z  [z] saved z
, skipped z	, errors z] ERROR é   g      à?rK   z2==================================================ú[z] Done! Saved: z, Skipped: z
, Errors: )'ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr1   r/   r0   Ú	enumerater   rl   r7   Úprintr^   r„   ÚstderrÚextendÚtimeÚsleepÚ	Exceptionr�   r|   ÚsetÚaddrx   rQ   rV   r%   ÚjsonÚdumpsÚsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚGROUPÚrowcountÚcommitÚclose)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr   r   r`   r4   ÚeÚseenÚuniqueÚitemÚsavedÚskippedÚerrorsr#   Ú	list_dateÚ	det_titleÚdet_dater=   rq   Úfinal_titleÚ
final_dateÚcontent_textÚsummaryÚatt_jsonÚconnÚcs                                r   ÚmainrÀ   ²   sñ  € ÜÑ\Ð4[Ô\Ó\€Nä�
€IÜ�1”i !‘mÓ$ò DˆØ×Ñœ¤IÑ-°'¸!¸¸EÐ0BÑBÕCðDð €IÜ˜iÓ(ò 	A‰ˆˆSð	AÜ˜“:ˆDØŸ	™	ˆIÜ˜yÓ)ˆEÜ�G˜C ™E˜7 !¤I ;¨b´°U³°¸FÐCÌ#Ï*É*ÕUØ×Ñ˜UÔ#Ü�J‰J�s�Oð	Aô 
ˆI”c˜)“nÐ%Ð
&¬S¯Z©ZÕ8áÜ& yÓ1ˆ	Ü�Ô 0Ð1°´c¸)³nÐ5EÐFÌSÏZÉZÕXä‹5€DØ€FØò  ˆØ�‰7˜$ÒØ�H‰H�T˜!‘WÔØ�M‰M˜$Õð ô 
ˆJ”s˜6“{�mÐ
$¬3¯:©:Õ6à€EØ€GØ€FÜ(1°&Ó(9ó !Ñ$ˆÑ$ˆe�S˜)ð 	Ü˜“:ˆDØŸ	™	ˆIô 9EÀYÐPSÐUZÓ8[Ñ5ˆI�x ¨+Ø#Ò, uˆKØ!Ò. YˆJá.5˜7 6 E™?¸2ˆLÜ—f‘f˜V S¨,°t¸Ð*<Ó=×CÑCÓEÒTÈˆGÙFQ”t—z‘z +¸EÕBÐWYˆHä—?‘?¤7°BÔ7ˆDØ—‘“ˆAØ�I‰Ið .ð �k :¬y¼%Ø˜,¨°#ð7ô8ð
 �z‰z˜AŠ~Ø˜‘
‘à˜1‘�Ø�K‰KŒMØ�J‰JŒLØ�a‘˜2‰~ Ò"Ü˜˜C ™E˜7 !¤C¨£K =°¸¸¸zÈ'ÈÐR[Ð\bÐ[cÐdÔkn×kuÑkuÕvÜ�J‰J�sŽOð;!ôF 
ˆBˆvˆhˆ-œcŸj™jÕ)Ü	ˆAŒiˆ[˜¨ w¨k¸'¸À*ÈVÈHÐ
UÔ\_×\fÑ\fÕgÜ	ˆVˆHœCŸJ™JÖ'øôs ò 	AÜ�G˜C ™E˜7 (¨1¨#Ð.´S·Z±Z×@Ó@ûð	Aûôd ò 	Ü�C˜˜A™�w˜h u¨S¨b z l°"°Q°CÐ8¼s¿z¹zÕJØ�a‰KˆFÜ�J‰J�s�OŠOûð	ús3   Á)A=NÇE#OÎ	OÎ#$OÏOÏ	P-ÏAP(Ð(P-Ú__main__)r*   )#Ú__doc__rQ   rž   r™   r„   Úosr    r   r   ÚrequestsÚbs4r   Úurllib.parser   r/   r0   r’   r¥   r¦   Úgetenvr¢   r|   r”   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r7   rx   r�   rÀ   Ú__name__© r   r   ú<module>rÎ      sÏ   ðñ÷ (× '× 'ß (Û Ý Ý  à&€Ø/€	Ø�iÑ -Ñ/€Ø-€	Ø€Ø
ˆ"�)‰)�KÐ!2Ó
3€ØÐ Ø€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò
ó0_1òDò I(ðX ˆzÒÙ…Fð r   