Ë
    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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„ Zd„ Z d„ Z!e"dk(  r e!«        yy)u   
æ°¸ä¿®åŽ¿äººæ°‘æ”¿åºœ-éƒ¨é—¨ä¹¡é•‡æ �ç›®æ±‡æ€»çˆ¬è™«
crawl_yongxiu_tzgg.py
åˆ—è¡¨: div.tzlx > ul.comlist2 > li > a[title] æ ‡é¢˜ + span æ—¥æœŸ
åˆ†é¡µ: index.html + index_1~4.html (5é¡µ, 20æ�¡/é¡µ)
è¯¦æƒ…: div#content.xl-text, meta[ArticleTitle]/[PubDate]
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttp://www.yongxiu.gov.cnz	/bmxzlmhzz/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                 ó^   — t         j                  | t        ¬«      }d|_        |j                  S )N)Útimeoutzutf-8)ÚsessionÚgetÚTIMEOUTÚencodingÚtext)ÚurlÚresps     ú'/root/gov_crawler/crawl_yongxiu_tzgg.pyÚfetchr   "   s%   € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ�9‰9Ðó    c                 ó¸  — t        | d«      }g }|j                  dd¬«      D �]4  }|j                  dd¬«      }|sŒ|j                  dd¬	«      D �]  }|j                  d
d¬«      }|sŒ|j                  d«      xs |j	                  d¬«      }|d   j                  «       }|j                  d«      }	|	r|	j	                  d¬«      dd nd}
|j                  d«      rt        t        z   dz   |dd z   }n?|j                  d«      r
t        |z   }n$|j                  d«      st        t        z   dz   |z   }|j                  |j                  «       ||
f«       �Œ �Œ7 |S )uA   è§£æž�åˆ—è¡¨é¡µ â€” div.tzlx > ul.comlist2 > li > a[title] + spanúhtml.parserÚdivÚtzlx©Úclass_ÚulÚcomlist2ÚliF)Ú	recursiveÚaT©ÚhrefÚtitle©Ústripr$   ÚspanNé
   Ú z./ú/é   Úhttp)
r   Úfind_allÚfindr   Úget_textr'   Ú
startswithÚBASE_URLÚ	LIST_PATHÚappend)ÚhtmlÚsoupÚitemsr   r   r    r"   r%   r$   Ú	date_spanÚdate_strs              r   Ú
parse_listr:   '   sN  € ä˜˜}Ó-€DØ€EØ—‘˜e¨F�Ó3ó :ˆØ�Y‰Y�t JˆYÓ/ˆÙØØ—+‘+˜d¨e�+Ó4ó 	:ˆBØ—‘˜ $�Ó'ˆAÙØà—E‘E˜'“NÒ< a§j¡j°t jÓ&<ˆEØ�V‘9—?‘?Ó$ˆDàŸ™ ›ˆIÙ>G�y×)Ñ)°Ð)Ó5°c°rÑ:ÈRˆHà�‰˜tÔ$Ü¤)Ñ+¨cÑ1°D¸¸°HÑ<‘Ø—‘ Ô%Ü $‘‘Ø—_‘_ VÔ,Ü¤)Ñ+¨cÑ1°DÑ8�Ø�L‰L˜%Ÿ+™+›-¨¨xÐ8Ö9ò#	:ð	:ð, €Lr   c           	      ó  — t        | d«      }d}|j                  ddt        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|sK|j                  d«      xs$ |j                  d	«      xs |j                  d
«      }|r|j                  d¬«      }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ë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�ŒG|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   «       �Œ¼|j                  dk(  s�ŒÍ|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                  |«       Œ² �Œ“ |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)                  d0«      d1   |d2œ«       |	d3|› d4|j                  d¬«      › d5�z  }	Œ¯ |||	|fS c c}w )6u4   è§£æž�è¯¦æƒ…é¡µ â€” div#content.xl-text + metaæ ‡ç­¾r   r*   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1Úh2Úh3Tr&   ÚPubDateNr)   z(\d{4}-\d{2}-\d{2})é   r   )Úidzxl-textr   zcontent|wenzhang|textÚpz&<a[^>]*href="([^"]*)"[^>]*>([^<]*)</a>z[\2](\1)z<img[^>]*src="([^"]*)"[^>]*>z![](\1)z<[^>]+>ú\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   u   

é™„ä»¶ï¼š<p><a href="z">z</a></p>)r   r/   ÚreÚcompileÚIr   r'   r0   ÚsearchÚgroupÚchildrenr=   ÚstrÚsubr4   r.   ÚjoinÚcountÚlowerr   Úsplit)r5   r   r6   r%   Ú
meta_titleÚhÚpub_dateÚ	meta_dateÚdate_mr@   Úcontent_divÚ
paragraphsÚchildÚp_htmlr   ÚrowsrK   rL   ÚcellsÚrow0ÚseprG   ÚattachmentsÚscopeÚa_tagÚahrefÚfull_urls                              r   Úparse_detailro   C   s   € ä˜˜}Ó-€Dð €EØ—‘˜6¨&´"·*±*¸_ÌbÏdÉdÓ2SÐ)T�ÓU€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆÙØ�I‰I�d‹OÒA˜tŸy™y¨›ÒA°$·)±)¸D³/ˆÙØ—J‘J T�JÓ*ˆEð €HØ—	‘	˜&¨´·±¸JÌÏÉÓ1MÐ(N�	ÓO€IÙ�Y—]‘] 9Ô-Ø˜YÑ'×-Ñ-Ó/°°Ð4ˆÙÜ—‘Ð1°4Ó8ˆÙØ—|‘| A“ˆHð €GØ—)‘)˜E i�)Ó0€KÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i ¬b¯j©jÐ9QÔSU×SWÑSWÓ.X�iÓYˆÚØˆ
Ø ×)Ñ)ó 	0ˆ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Õ+Ø—‘˜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Ø—‘˜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ð/	0ñ@ Ø—k‘k *Ó-‰Gä—f‘f˜Z¨¬S°Ó-=Ó>×DÑDÓFˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð €KØÒ˜4€EØ—‘ ¨$�Ó/ò dˆØ�f‘×#Ñ#Ó%×+Ñ+Ó-ˆÜ�9‰9Ð:¸EÕBÜ˜s E¨&¡M×$7Ñ$7Ó$9Ó:ˆHØ×ÑØŸ™¨T˜Ó2ÒM°h·n±nÀSÓ6IÈ"Ñ6MØñ ô ð Ð2°8°*¸B¸u¿~¹~ÐTX¸~Ó?YÐ>ZÐZbÐcÑc‰Gðdð �(˜G [Ð0Ð0ùòK _s   Ê4V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Ústrptimer4   )r7   ÚcutoffÚfilteredr%   r   r9   Ú	item_dates          r   Úincremental_filterrx   š   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 ]%  }|j	                  t
        t        z   d|› d�z   «       Œ' g }t        |«      D ]w  \  }}	 t        |«      }t        |«      }t        d|dz   › dt        › dt        |«      › d	�t        j                  ¬
«       |j                  |«       t        j                   d«       Œy 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 �]_  \  }\  }}}	 t        |«      }t-        ||«      \  }}}}|xs |}|xs |}|r|d d nd}t/        j0                  dd|d d «      j3                  «       xs |}|rt5        j6                  |d¬«      nd}t9        j:                  t<        «      }|j?                  «       }|jA                  d|||tB        tD        ||||f	«       |jF                  dkD  r|dz  }n|dz  }|jI                  «        |jK                  «        |dz   dz  dk(  r6t        d|dz   › dt        |
«      › d|› d|› d|› �
t        j                  ¬
«       t        j                   d«       �Œb t        d"d#› �t        j                  ¬
«       t        d$tB        › d%|› d&|› d'|› �t        j                  ¬
«       t        d#› t        j                  ¬
«       y # t"        $ r/}t        d|dz   › d|› �t        j                  ¬
«       Y d }~�ŒPd }~ww xY w# t"        $ rO}t        d|dz   › dd d  › d|› �t        j                  ¬
«       |dz  }t        j                   d!«       Y d }~�ŒWd }~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ÚincrE   z/index_z.htmlz  Page r+   z: z items)Úfileg333333Ó?z error: z	  Total: z  Incremental (zd): z
  Unique: r   iPÃ  r*   rH   rI   éÈ   F)Úensure_asciiz»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      à?rO   z2==================================================ú[z] Done! Saved: z, Skipped: z
, Errors: )&ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr4   r2   r3   Ú	enumerater   r:   ÚprintÚlenr{   ÚstderrÚextendÚtimeÚsleepÚ	Exceptionrx   rs   ÚsetÚaddro   rQ   rX   r'   ÚjsonÚdumpsÚsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚGROUPÚrowcountÚcommitÚclose)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr   r5   r7   ÚeÚseenÚuniqueÚitemÚsavedÚskippedÚerrorsr%   Ú	list_dateÚ	det_titleÚdet_dater@   rj   Úfinal_titleÚ
final_dateÚcontent_textÚsummaryÚatt_jsonÚconnÚcs                               r   Úmainr·   ª   sØ  € ÜÑ\Ð4[Ô\Ó\€Nô �
€IÜ�1”iÓ ò DˆØ×Ñœ¤IÑ-°'¸!¸¸EÐ0BÑBÕCðDð €IÜ˜iÓ(ò A‰ˆˆSð	AÜ˜“:ˆDÜ˜tÓ$ˆ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Ü8DÀTÈ3Ó8OÑ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Ó+ˆ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ð5ô@ 
ˆBˆvˆhˆ-œcŸj™jÕ)Ü	ˆAŒiˆ[˜¨ w¨k¸'¸À*ÈVÈHÐ
UÔ\_×\fÑ\fÕgÜ	ˆVˆHœCŸJ™JÖ'øôo ò 	AÜ�G˜C ™E˜7 (¨1¨#Ð.´S·Z±Z×@Ó@ûð	Aûô` ò 	Ü�C˜˜A™�w˜h {°3°BÐ'7Ð&8¸¸1¸#Ð>ÄSÇZÁZÕPØ�a‰KˆFÜ�J‰J�s�OŠOûð	ús3   Á&A1M<Æ?EN7Í<	N4Î$N/Î/N4Î7	PÏ AP
Ð
PÚ__main__)#Ú__doc__rQ   r•   r�   r{   Úosr—   r   r   ÚrequestsÚbs4r   Úurllib.parser   r2   r3   rˆ   rœ   r�   Úgetenvr™   rs   rŠ   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r:   ro   rx   r·   Ú__name__© r   r   ú<module>rÅ      sÏ   ðñ÷ (× '× 'ß (Û Ý Ý  à&€Ø€	Ø�iÑ -Ñ/€Ø0€	Ø€Ø
ˆ"�)‰)�KÐ!2Ó
3€ØÐ Ø€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò
ò8T1ònò H(ðV ˆzÒÙ…Fð r   