Ë
    ¸¬uj2"  ã                   óº   — 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	m
Z
  ej                  dd«      ZddiZdZd	„ Zd
„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u‘   
å…­å®‰å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - è¡Œæ”¿è®¸å�¯ç»“æžœ + å…¬ç¤ºå…¬å‘Š (EpointWebBuilder CMS)
v2: ä½¿ç”¨æ­£ç¡®çš„ label/8888 API (pageIndex æœ‰æ•ˆåˆ†é¡µ)
é    N)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z.https://sthjj.luan.gov.cn/luan/site/label/8888c                  óö  — g } ddddddddd	d
ddddœ}d|d<   t        j                  t        |t        d¬«      }|j	                  «       }t        |j                  dd«      «      }t        |j                  dd«      «      }t        d|› d|› �«       t        d|dz   «      D �]/  }t        |«      |d<   	 t        j                  t        |t        d¬«      }|j	                  «       }|j                  dg «      }|D ]¢  }| j                  |j                  dd«      |j                  dd«      xs dj                  «       |j                  dd«      xs dd|j                  dd«      xs d|j                  dd«      xs dt        |j                  dd«      «      dœ«       Œ¤ t        d |› d!|› d"t        |«      › d#�«       t        j                  d&«       �Œ2 | S # t        $ r}	t        d |› d$|	› �«       Y d%}	~	Œ9d%}	~	ww xY w)'u/   è¡Œæ”¿è®¸å�¯ç»“æžœ - ä½¿ç”¨ label/8888 JSON APIÚpublicInfoListÚ6789941Ú6608281Ú20Útruez
yyyy-MM-ddÚ50Ú4Ú7053922ÚlistÚ )Ú	labelNameÚsiteIdÚorganIdÚpageSizeÚisDateÚ
dateFormatÚlengthÚtypeÚcatIdÚactionÚresultÚisJsonÚ
isSetValueÚ1Ú	pageIndexé   ©ÚdataÚheadersÚtimeoutÚ	pageCounté   Útotalr   zXZXK API: total=z, pages=r"   ÚlinkÚtitleÚpublishDateÚ	luan_xzxkÚ	summarizeÚfileNumÚid)Úurlr)   ÚdateÚsiter,   Úfile_numÚ
content_idz  Page ú/ú: ú itemsz error: Nç333333Ó?)ÚrequestsÚpostÚ	API_LABELÚHEADERSÚjsonÚintÚgetÚprintÚrangeÚstrÚappendÚstripÚlenÚ	ExceptionÚtimeÚsleep)
ÚitemsÚpayloadÚrÚjÚ
page_countr'   Úpager"   ÚitemÚes
             ú/root/gov_crawler/crawl_luan.pyÚget_xzxk_listrQ      s÷  € à€Eà%ØØØØØ"ØØØØØØØñ€Gð" €GˆKÑÜ�‰”i g´wÈÔK€AØ	�‰‹€AÜ�Q—U‘U˜;¨Ó*Ó+€JÜ�—‘�g˜qÓ!Ó"€EÜ	Ð˜U˜G 8¨J¨<Ð
8Ô9ä�a˜ a™Ó(ó ˆÜ" 4›yˆ�Ñð	/Ü—‘œi¨g¼wÐPRÔSˆAØ—‘“ˆAØ—5‘5˜ Ó$ˆDØò 	�Ø—‘ØŸ8™8 F¨BÓ/Ø"Ÿh™h w°Ó3Ò9°r×@Ñ@ÓBØ!ŸX™X m°RÓ8Ò>¸BØ'Ø"&§(¡(¨;¸Ó";Ò"A¸rØ!%§¡¨)°RÓ!8Ò!>¸BÜ"% d§h¡h¨t°RÓ&8Ó"9ñõ ð	ô �G˜D˜6  : ,¨b´°T³°¸6ÐBÔCô 	�
‰
�3Žð'ð* €Løô	 ò 	/Ü�G˜D˜6 ¨!¨Ð-×.Ñ.ûð	/ús   Â2DGÇ	G8ÇG3Ç3G8c                  ó|  — g } t        dd«      D �])  }t        j                  ddddddd	d
dddddddt        |«      dœt        d¬«      }d|_        |j                  }t        j                  d|«      }t        j                  d|«      }t        j                  d|«      }|s | S t        |«      D ]b  \  }}|t        |«      k  r||   nd}	|t        |«      k  r||   nd}
| j                  dj                  |«      |	j                  «       |
ddœ«       Œd t        |«      dk  r | S t        j                  d«       �Œ, | S )u=   Fallback: ç›´æŽ¥ä»Žå…¬å¼€é¡µé�¢èŽ·å�–åˆ—è¡¨ï¼ˆå¤‡ç”¨æ–¹æ¡ˆï¼‰r&   é!   z0https://sthjj.luan.gov.cn/luan/site/label/481565r
   Ú	luan_govaÚfalseÚdescr   Úpublic_contentr	   r   r)   r   Ú0z/c1/luan/searchDataList-gk-2020r   )r   ÚplatformCodeÚ	isAllSiteÚsortÚwithOutDomainÚtypeCodeÚcolumnIdÚcatIdsÚfromCodeÚ	orderTypeÚisLimitScoreÚfuzzySearchÚfileÚkeywordsrM   r    r!   úutf-8z/public/6608281/(\d+)\.htmlztitle="([^"]*)"z<td>(\d{4}-\d{2}-\d{2})</td>z0https://sthjj.luan.gov.cn/public/6608281/{}.htmlr+   ©r/   r)   r0   r1   é   r7   )r@   r8   r9   rA   r;   ÚencodingÚtextÚreÚfindallÚ	enumeraterD   rB   ÚformatrC   rF   rG   )rH   rM   rJ   ÚhtmlÚidsÚtitlesÚdatesÚiÚid_r)   r0   s              rP   Úget_xzxk_items_from_publicru   A   sT  € à€EÜ�a˜“ó ˆÜ�M‰MÐLØ¨kÈØ¨VÐAQØ!¨YØ¨cÀ3Ø"Ð,MØ¤C¨£IñT
ô  Bô(ˆð ˆŒ
Ø�v‰vˆÜ�j‰jÐ7¸Ó>ˆÜ—‘Ð.°Ó5ˆÜ—
‘
Ð:¸DÓAˆáØð  €Lô   “nò 	‰FˆAˆsØ!"¤S¨£[¢�F˜1’I°bˆEØ ¤3 u£:š~�5˜’8°2ˆDØ�L‰LØI×PÑPÐQTÓUØŸ™›ØØ#ñ	õ ð	ô ˆs‹8�bŠ=Øð €Lô 	�
‰
�3Žð=ð@ €Ló    c                  ó¤  — g } t        dd«      D ]š  }	 t        j                  dj                  |«      t        d¬«      }d|_        |j                  }t        j                  d	|«      }|s | S |D ]  }| j                  |«       Œ t        |«      d
k  r | S t        j                  d«       Œœ | S # t        $ r}t        d|«       Y d}~ | S d}~ww xY w)u!   æ£€æŸ¥é€šçŸ¥å…¬å‘Šæ˜¯å�¦å·²å…¨é‡�r&   éÈ   z=https://sthjj.luan.gov.cn/content/column/6806171?pageIndex={}r    ©r#   r$   rf   z  tzgg list error:Nz9href="(https://sthjj\.luan\.gov\.cn/zwzx/tzgg/\d+\.html)"é   r7   )r@   r8   r>   rn   r;   ri   rj   rE   r?   rk   rl   rB   rD   rF   rG   )Ú
tzgg_itemsrM   rJ   ro   rO   ÚurlsÚus          rP   Úcheck_tzgg_fullr~   g   sï   € ð €JÜ�a˜“ò ˆð	Ü—‘Ð\×cÑcÐdhÓiÔszð  EGô  HˆAØ ˆAŒJØ—6‘6ˆDô
 �z‰zÐVÐX\Ó]ˆÙØð Ðð ò 	!ˆAØ×Ñ˜aÕ ð	!äˆt‹9�rŠ>Øð Ðô 	�
‰
�3�ð!ð$ Ðøô ò 	ÜÐ&¨Ô*Üð Ðûð	ús   “>B.Â.	CÂ7C
Ã
Cc                 ó¦  — | d   }	 t        j                  |t        d¬«      }d|_        |j                  }| j                  dd«      }t        j                  d	|«      }|r#|j                  d
«      j                  «       }|r|}d}t        j                  d|t        j                  «      }|s%t        j                  d|t        j                  «      }|r‘|j                  d
«      j                  «       }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }|}| j                  dd«      }	|	s2dD ]-  }
t        j                  |
|«      }|sŒ|j                  d
«      }	 n ||||	| d   fS # t
        $ r || d   d| d   | d   fcY S w xY w)u   æŠ“å�–è¯¦æƒ…é¡µæ­£æ–‡r/   r    ry   rf   r)   r   r0   r1   z/<meta name="ArticleTitle"[^>]*content="([^"]*)"r&   z<class="gkwz_contnet j-fontContent"[^>]*>(.*?)</div>\s*</div>z2class="j-fontContent newscontnet"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)u.   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}[-/]\d{2}[-/]\d{2})z*<meta name="PubDate"[^>]*content="([^"]*)")r8   r>   r;   ri   rj   rE   rk   ÚsearchÚgrouprC   ÚDOTALLÚsubÚI)rN   r/   rJ   ro   r)   ÚmÚtÚcontentÚrawr0   Úpats              rP   Úfetch_detailr‹   €   s¤  € à
ˆu‰+€CðDÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆð
 �H‰H�W˜bÓ!€EÜ
�	‰	ÐDÀdÓK€AÙØ�G‰G�A‹J×ÑÓˆÙØˆEð €GÜ
�	‰	ÐQÐSWÔY[×YbÑYbÓc€AÙÜ�I‰IÐKÈTÔSU×S\ÑS\Ó]ˆÙØ�g‰g�a‹j×ÑÓ ˆÜ�f‰fÐ1°2°sÄ"Ç)Á)ÌBÏDÉDÁ.ÔQˆÜ�f‰fÐ/°°SÄÇ	Á	Ì"Ï$É$ÁÔOˆØˆð �8‰8�F˜BÓ€DÙØuò 	ˆCÜ—	‘	˜#˜tÓ$ˆAÚØ—w‘w˜q“z�Ùð		ð �˜  t¨F¡|Ð4Ð4øô? ò DØ�T˜'‘] B¨¨V©°d¸6±lÐCÒCðDús   ‡/F4 Æ4GÇGc                  ót  — d} t        d«       t        d«       t        «       }t        dt        |«      › �«       t        d«       t        d«       t        «       }t        dt        |«      › d�«       t	        j
                  t        «      }|j                  d«       t        d	„ |j                  d
«      j                  «       D «       «      }t        d„ |j                  d«      j                  «       D «       «      }|j                  «        t        dt        |«      › dt        |«      › �«       |D �cg c]  }|d   |vsŒ|‘Œ }}t        dt        |«      › �«       g }|D ]  }	|	|vsŒ|j                  |	ddddœ«       Œ t        dt        |«      › �«       ||z   }
|
st        d«       y t        dt        |
«      › d�«       t	        j
                  t        «      }|j                  d«       d}t        d¬«      5 }|
D �ci c]  }|j                  t        |«      |“Œ }}t        |«      D ]Ž  }|j!                  «       \  }	}}}}	 |j                  d||	|	|||f«      }|j#                  «        |j$                  dkD  r| dz  } |dz  }|dz  dk(  s|t        |
«      k(  sŒrt        d|› d t        |
«      › d!| › �«       Œ� 	 d d d «       t        d"d› �«       t        d#t        |
«      › d$| › d%�«       |j                  «        y c c}w c c}w # t&        $ r}t        d|	› d|› �«       Y d }~Œ§d }~ww xY w# 1 sw Y   ŒtxY w)&Nr   z2==================================================u?   Step 1: Fetching xzxk (è¡Œæ”¿è®¸å�¯) list via label/8888 API...z  Total xzxk items from API: u,   Step 2: Checking tzgg (é€šçŸ¥å…¬å‘Š) list...z  TZGG pages found: r6   zPRAGMA busy_timeout=30000c              3   ó&   K  — | ]	  }|d    –— Œ y­w©r   N© ©Ú.0rJ   s     rP   ú	<genexpr>zmain.<locals>.<genexpr>½   ó   è ø€ ò  ˜˜!�ñ ùó   ‚z8SELECT page_url FROM gov_raw WHERE site_name='luan_tzgg'c              3   ó&   K  — | ]	  }|d    –— Œ y­wrŽ   r�   r�   s     rP   r’   zmain.<locals>.<genexpr>Á   r“   r”   z8SELECT page_url FROM gov_raw WHERE site_name='luan_xzxk'z  Existing: xzxk=z, tzgg=r/   z  New xzxk items to fetch: r   Ú	luan_tzggrg   z  New tzgg items to fetch: z'
No new items to fetch. All up to date!z
Total new items: z!, fetching details (5 threads)...é   )Úmax_workerszwINSERT OR IGNORE INTO gov_raw (title, page_url, source_url, content, publish_date, site_name) VALUES (?, ?, ?, ?, ?, ?)r&   z  DB insert error for r5   é2   z  r4   z processed, new=ú
zDone! Processed z new items, inserted ú.)r?   rQ   rD   r~   Úsqlite3Úconnectr   ÚexecuteÚsetÚfetchallÚcloserB   r   Úsubmitr‹   r   r   ÚcommitÚrowcountrE   )Ú	total_newÚxzxkÚ	tzgg_urlsÚconnÚexisting_tzggÚexisting_xzxkÚitÚnew_xzxkÚnew_tzggr/   Úall_newÚdoneÚpoolrN   Úfut_mapÚfr)   rˆ   r0   r1   ÚcrO   s                         rP   Úmainr´   ©   s;  € Ø€Iô 
ˆ(„OÜ	Ð
KÔLÜ‹?€DÜ	Ð)¬#¨d«)¨Ð
5Ô6ô 
ˆ(„OÜ	Ð
8Ô9äÓ!€IÜ	Ð ¤ Y£Ð 0°Ð
7Ô8ô �?‰?œ9Ó%€DØ‡L�LÐ,Ô-äñ  d§l¡lØBó'ç�hƒjôó €Mô ñ  d§l¡lØBó'ç�hƒjôó €Mð 	‡J�J„Lä	Ðœc -Ó0Ð1°¼¸]Ó9KÐ8LÐ
MÔNð "ÖD�r R¨¡Y°mÒ%C’ÐD€HÐDÜ	Ð'¬¨H« Ð
7Ô8ð €HØò XˆØ�mÒ#à�O‰O C°"¸bÈ+ÑVÕWðXô 
Ð'¬¨H« Ð
7Ô8à˜Ñ!€GÙÜÐ8Ô9Øä	Ð¤ G£˜~Ð-NÐ
OÔPä�?‰?œ9Ó%€DØ‡L�LÐ,Ô-à€DÜ	¨Ô	*ð M¨dØELÖM¸T�4—;‘;œ|¨TÓ2°DÑ8ÐMˆÐMÜ˜gÓ&ò 	MˆAØ./¯h©h«jÑ+ˆC�˜  tð	;Ø—L‘Lð NØ˜C  g¨t°TÐ:ó�ð —‘”Ø—:‘: ’>Ø ‘N�Ið �A‰IˆDØ�b‰y˜AŠ~ ¬¨W«Ó!5Ü˜˜4˜& ¤# g£, Ð/?À	¸{ÐKÕLñ	M÷Mô$ 
ˆBˆxˆjˆ/ÔÜ	ÐœS ›\˜NÐ*?À	¸{È!Ð
LÔMØ‡J�J…LùòU Eùò. Nøô ò ;ÜÐ.¨s¨e°2°a°SÐ9×:Ñ:ûð;ú÷Mð MúsZ   Ä1K=Ä>K=Ç9L.Ç>LÈ&L.É<LÉ?L.ÊL.ÌL.Ì	L+ÌL&Ì!L.Ì&L+Ì+L.Ì.L7Ú__main__)Ú__doc__ÚsysÚosrk   rF   r8   rœ   r<   Úconcurrent.futuresr   r   Úgetenvr   r;   r:   rQ   ru   r~   r‹   r´   Ú__name__r�   rv   rP   ú<module>r¼      sp   ðñ÷ 2× 1× 1Ó 1ß ?àˆB�I‰I�kÐ#4Ó5€	ØÐWÐ
X€Ø<€	ò0òf#òLò2&5òRJðZ ˆzÒÙ…Fð rv   