Ë
    ¸¬ujŒ#  ã                   ó¾  — 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ej                  j                  ej                  j                  e«      «      Z ej                  dd«      ZdZdZdZd	d
iZ ej(                  «       j+                  d«      Z 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)ua   
Crawl é˜œæ–°å¸‚ç»†æ²³åŒº - ä¾¿æ°‘é€šçŸ¥ (fixed)
https://www.fxxh.gov.cn/channel/list/11354.html
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   ç»†æ²³åŒº-ä¾¿æ°‘é€šçŸ¥zwww.fxxh.gov.cné
   z
User-AgentzMMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0z%Y-%m-%d %H:%M:%SiG  )Údaysú%Y-%m-%dc           	      ó¸  — dD �]g  }| j                  |«      }|dk\  sŒ| j                  dd|«      }|dk\  sŒ4| |d }d}t        t        |«      «      D �]  }|||dz    dk(  r!|dz   t        |«      k\  s
||dz      dv r|dz  }Œ0|||dz    d	k(  sŒ<|dz  }|dk(  sŒG|j                  d
d|«      }|dkD  r	||dz   | }n|d| }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  ¬«      }|j                  «       c c S  �Œj dD �]g  }| j                  |«      }|dk\  sŒ| j                  dd|«      }|dk\  sŒ4| |d }d}t        t        |«      «      D �]  }|||dz    dk(  r!|dz   t        |«      k\  s
||dz      dv r|dz  }Œ0|||dz    d	k(  sŒ<|dz  }|dk(  sŒG|j                  d
d|«      }|dkD  r	||dz   | }n|d| }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  t        j                  z  ¬«      }t	        j
                  dd|t        j                  ¬«      }|j                  «       c c S  �Œj y)z8Extract content from detail page - try multiple patterns)zid="Detailcontent"zid=Detailcontentr   z<divNé   z >
	é   é   z</div>ú>é   z<script[^>]*>.*?</script>Ú )Úflagsz<style[^>]*>.*?</style>z
<!--.*?-->)zclass="news_inner"zclass=news_inner)	ÚfindÚrfindÚrangeÚlenÚreÚsubÚDOTALLÚIÚstrip)	ÚhtmlÚpatÚidxÚ	div_startÚsectionÚdepthÚiÚgt_posÚcontents	            ú/root/gov_crawler/crawl_fxxh.pyÚextract_contentr$      sã  € ð :ó 3ˆØ�i‰i˜‹nˆØ�!‹8ØŸ
™
 6¨1¨cÓ2ˆIØ˜A‹~Ø˜y˜zÐ*�Ø�Üœs 7›|Ó,ó 3�AØ˜q  1¡�~¨Ò/°Q°q±S¼CÀ»LÒ5HÈGÐTUÐVWÑTWÉLÐ\fÑLfØ ™
™Ø   1 Q¡3˜¨8Ó3Ø ™
˜Ø  A›:Ø%,§\¡\°#°q¸!Ó%<˜FØ%¨šzØ*1°&¸±(¸1Ð*=¡à*1°!°A¨, ä&(§f¡fÐ-IÈ2ÈwÔ^`×^gÑ^gÔhj×hlÑhlÑ^lÔ&m˜GÜ&(§f¡fÐ-GÈÈWÔ\^×\eÑ\eÔfh×fjÑfjÑ\jÔ&k˜GÜ&(§f¡f¨]¸BÀÌrÏyÉyÔ&Y˜GØ#*§=¡=£?Ô2ò3ð3ð2 :ó 3ˆØ�i‰i˜‹nˆØ�!‹8ØŸ
™
 6¨1¨cÓ2ˆIØ˜A‹~Ø˜y˜zÐ*�Ø�Üœs 7›|Ó,ó 3�AØ˜q  1¡�~¨Ò/°Q°q±S¼CÀ»LÒ5HÈGÐTUÐVWÑTWÉLÐ\fÑLfØ ™
™Ø   1 Q¡3˜¨8Ó3Ø ™
˜Ø  A›:Ø%,§\¡\°#°q¸!Ó%<˜FØ%¨šzØ*1°&¸±(¸1Ð*=¡à*1°!°A¨, Ü&(§f¡fÐ-IÈ2ÈwÔ^`×^gÑ^gÔhj×hlÑhlÑ^lÔ&m˜GÜ&(§f¡fÐ-GÈÈWÔ\^×\eÑ\eÔfh×fjÑfjÑ\jÔ&k˜GÜ&(§f¡f¨]¸BÀÌrÏyÉyÔ&Y˜GØ#*§=¡=£?Ô2ò3ð3ð. ó    c                 ó  — 	 | j                  |d¬«      }|j                  dk7  ryd|_        |j                  }t        |«      }t        j                  d|«      }|r|j                  d«      j                  «       nd	}d	}t        j                  d
|«      }	|	rY|	j                  d«      j                  «       j                  d«      d   }
	 t        j                  |
d«      }|j                  d«      }|rt        j                  dd	|«      dd nd	}t        j                  dd|«      j                  «       }||||fS # t        $ r
}Y d}~yd}~ww xY w#  	 t        j                  |
d«      }|j                  d«      }n	#  |
}Y nxY wY Œ•xY w)zFetch detail pageé   ©ÚtimeoutéÈ   )NNNNúutf-8Nz<title>(.*?)<r   r   z*<meta name="PubDate"[^>]*content="([^"]+)"ú r   r   z
%Y-%-m-%-dú<[^>]+>z\s+)ÚgetÚstatus_codeÚencodingÚtextÚ	Exceptionr$   r   ÚsearchÚgroupr   Úsplitr   ÚstrptimeÚstrftimer   )ÚsessionÚurlÚrr   Úer"   Útitle_mÚtitleÚdate_strÚdate_mÚrawÚdtÚsummarys                r#   Úfetch_detailrC   I   sl  € ð&Ø�K‰K˜ RˆKÓ(ˆØ�=‰=˜CÒØ)ØˆŒ
Ø�v‰vˆô ˜dÓ#€Gô �i‰iÐ(¨$Ó/€GÙ(/ˆG�M‰M˜!Ó×"Ñ"Ô$°R€Eð €HÜ�Y‰YÐDÀdÓK€FÙØ�l‰l˜1‹o×#Ñ#Ó%×+Ñ+¨CÓ0°Ñ3ˆð	Ü×"Ñ" 3¨
Ó3ˆBØ—{‘{ :Ó.ˆHñ 8?Œb�f‰f�Z  WÓ-¨d¨sÑ3ÀB€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€Gà�(˜G WÐ,Ð,øô7 ò &Ü%ûð&ûð"	ðÜ×&Ñ& s¨LÓ9�ØŸ;™; zÓ2‘øðØ’ÿs:   ‚"D8 ¥D8 Ã'E Ä8	EÅEÅFÅ'E9Å8FÅ9E?Å=Fc                 óx  — g }t        j                  d| t         j                  «      D ]�  }|j                  d«      j	                  «       }t        j
                  dd|j                  d«      «      j	                  «       }|j                  d«      j	                  «       }|sŒx|sŒ{|j                  |||dœ«       Œ‘ |S )zIExtract article items from list page - handle both full URLs and relativez‘<a class="list1-ul-link" href="([^"]+)"[^>]*>.*?<div class="list1-ul-link-inner">(.*?)</div>.*?<div class="tabs2Right-part2">\s*([\d-]+)\s*</div>r   r-   r   é   é   )r9   r=   Údate)r   Úfinditerr   r4   r   r   Úappend)r   ÚitemsÚmr9   r=   rG   s         r#   Ú
parse_listrL   n   s¢   € à€EÜ�[‰[ð	Að 	Œb�i‰ió	ò 
Eˆð �g‰g�a‹j×ÑÓ ˆÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆØ�w‰w�q‹z×ÑÓ!ˆÚ’SØ�L‰L ¨u¸dÑCÕDð
Eð €Lr%   c                 ó”  — |d   j                  dd«      }|d   j                  dd«      }|j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      }|j                  dd«      j                  dd«      }d	}	 t        j                  |d
«      }t	        |j                  «       «      }dt        › d|› d|› d|› d|› d|› d|› d�}		 | j                  |	«       | j                  «        y#  t	        t        j                  «       «      }Y Œ`xY w# t        $ r}
t        d|
› �«       Y d}
~
yd}
~
ww xY w)zInsert or replace one itemr=   ú'z''r9   r"   r   rB   rG   r   r   z‹INSERT OR REPLACE INTO gov_raw 
        (site_name, page_url, title, publish_date, content, summary, date_rank, category)
        VALUES ('z', 'z',
                'z', u   , 'ä¾¿æ°‘é€šçŸ¥')Tu       â�Œ DB: NF)Úreplacer.   r   r6   ÚintÚ	timestampÚtimeÚNAMEÚexecuteÚcommitr2   Úprint)ÚconnÚitemr=   Úpage_urlr"   rB   rG   Ú	date_rankrA   Úsqlr;   s              r#   Úinsert_itemr\   ~   sE  € à�‰M×!Ñ! # tÓ,€EØ�E‰{×"Ñ" 3¨Ó-€HØ�h‰h�y "Ó%×-Ñ-¨c°4Ó8€GØ�h‰h�y "Ó%×-Ñ-¨c°4Ó8€GØ�8‰8�F˜BÓ×'Ñ'¨¨TÓ2€Dà€Ið%Ü×Ñ˜t ZÓ0ˆÜ˜Ÿ™›Ó'ˆ	ðä��t˜H˜: T¨%¨°°T°Fð ;Ø�˜$˜w˜i s¨9¨+Ð5FðJ€CðØ�‰�SÔØ�‰ŒØøð%ÜœŸ	™	›Ó$Š	ûô ò Ü�˜Q˜CÐ Ô!Üûðús$   Â/D Ã !D& ÄD#Ä&	EÄ/EÅEc                  ób  — t        dd› �«       t        dt        › d�«       t        dt        › �«       t        dt        › �«       t        d› d�«       t	        j
                  «       } | j                  j                  t        «       t        j                  t        «      }|j                  d«       d}d}t        j                  «       }t        d	t        d	z   «      D �]=  }|d	k(  rd
}nd|› d�}t        d|› dt        › d�«       	 | j                  |d¬«      }d|_        |j"                  dk7  rt        d|j"                  › �«       Œkt%        |j&                  «      }|st        d«       ŒŽt        dt+        |«      › d�«       |D �
cg c]  }
|
d   t        k\  sŒ|
‘Œ }}
|t+        |«      t+        |«      z
  z  }|st        d«        �nUt-        |«      D �]9  \  }}|j                  d|d   f«      j/                  «       }|r(t        d|d	z   › dt+        |«      › d|d   d d  › d!�«       ŒUt        d|d	z   › dt+        |«      › d"|d   d d  › d!�d#d$¬%«       t1        | |d   «      \  }}}}|r`||d&<   |xs |d   |d'<   |xs |d   |d<   |xs |d   |d<   t3        ||«      r|d	z  }t        d(t+        |«      d)›d*�«       n<t        d+«       n0d,|d&<   |d   |d'<   t3        ||«      rt        d-«       nt        d+«       t        j4                  d.«       �Œ< t        «        �Œ@ t        j                  «       |z
  }t        d› «       t        d/|› d0|› d�«       t        d1|d2›d3|d4z  d5›d6�«       t        d› «       |j7                  «        |S # t(        $ r}	t        d|	› �«       Y d }	~	�ŒÈd }	~	ww xY wc c}
w )7Nú
z<============================================================u   ðŸš€ u    çˆ¬è™«u      é¡µé�¢: 1~u      æ—¥æœŸæˆªæ­¢: zPRAGMA journal_mode=WALr   r   z/https://www.fxxh.gov.cn/channel/list/11354.htmlz+https://www.fxxh.gov.cn/channel/list/11354_z.htmlu   ðŸ“„ ç¬¬ú/u   é¡µé   r(   r+   r*   u     â�Œ HTTP u     â�Œ é”™è¯¯: u     âš ï¸� æ— æ•°æ�®u     ðŸ“‹ u    æ�¡rG   u"     âœ… å·²æ— 3å¹´å†…æ•°æ�®ï¼Œå�œæ­¢zPSELECT 1 FROM gov_raw WHERE page_url=? AND content IS NOT NULL AND content != ''r9   z  [u	   ] â�­ï¸� r=   é#   z...z] r,   T)ÚendÚflushr"   rB   u   âœ… ú,u   å­—u   â�Œ DBå¤±è´¥r   u"   âš ï¸� æ— æ­£æ–‡ï¼Œå·²ä¿�å­˜æ ‡é¢˜g      à?u   ðŸ“Š å®Œæˆ�ï¼�æ–°å¢ž u    æ�¡ | è·³è¿‡ u   â�± è€—æ—¶: z.0fzs (é<   z.1fzmin))rV   rS   ÚPAGESÚCUTOFF_DATEÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚsqlite3Úconnectr   rT   rR   r   r.   r0   r/   rL   r1   r2   r   Ú	enumerateÚfetchonerC   r\   ÚsleepÚclose)r8   rW   Ú	total_newÚtotal_skippedÚ
start_timeÚpageÚlist_urlr:   rJ   r;   ÚitÚrecentr   rX   Úhasr=   rG   r"   rB   Úelapseds                       r#   Úmainr|   ™   sÀ  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”$��wÐ
Ô Ü	ˆMœ%˜Ð
!Ô"Ü	Ðœk˜]Ð
+Ô,Ü	ˆVˆH�Bˆ-Ôä×ÑÓ €GØ‡O�O×Ñœ7Ô#ä�?‰?œ9Ó%€DØ‡L�LÐ*Ô+à€IØ€MÜ—‘“€Jä�aœ ™Ó#ó DˆØ�1Š9ØH‰HàDÀTÀFÈ%ÐPˆHä�˜˜˜a¤˜w cÐ*Ô+ð		Ø—‘˜H¨b�Ó1ˆAØ ˆAŒJØ�}‰} Ò#Ü˜ A§M¡M ?Ð3Ô4ØÜ˜qŸv™vÓ&ˆEñ
 ÜÐ&Ô(Øä�œ˜E›
�| 4Ð(Ô)ð  %ÖB˜¨¨6©
´kÓ(A’"ÐBˆÐBØœ˜U›¤c¨&£kÑ1Ñ1ˆÙÜÐ6Ô8Úä" 6Ó*ó "	‰IˆC�à—,‘,ØbØ�e‘�ó÷ ‰h‹jð ñ
 Ü˜˜C ™E˜7 !¤C¨£K =°	¸$¸w¹-ÈÈÐ:LÐ9MÈSÐQÔRØä�C˜˜A™�w˜a¤ F£˜}¨B¨t°G©}¸S¸bÐ/AÐ.BÀ#ÐFÈCÐW[Õ\ä,8¸À$ÀuÁ+Ó,NÑ)ˆE�4˜ 'áØ")��Y‘Ø")Ò":¨T°'©]��Y‘Ø %Ò 6¨¨g©��W‘Ø#Ò3 t¨F¡|��V‘Ü˜t TÔ*Ø ‘N�IÜ˜D¤ W£¨aÐ 0°Ð4Õ5ä˜LÕ*ð #%��Y‘Ø"& w¡-��Y‘Ü˜t TÔ*ÜÐ>Õ@ä˜LÔ*ä�J‰J�sŽOðE"	ôH 	ŽðIDôL �i‰i‹k˜JÑ&€GÜ	ˆVˆHÔÜ	Ð! ) ¨N¸=¸/ÈÐ
NÔOÜ	ˆL˜ ˜ S¨°©°CÐ(8¸Ð
=Ô>Ü	ˆVˆHÔà‡J�J„LØÐøô} ò 	Ü�N 1 #Ð&Ô'Ýûð	üò Cs+   ÄANÅNÆN,ÆN,Î	N)ÎN$Î$N)Ú__main__)Ú__doc__rh   r   rm   ÚsysÚosrR   r   r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   rS   ÚDOMAINrf   rl   Únowr7   ÚNOWrg   r$   rC   rL   r\   r|   Ú__name__© r%   r#   ú<module>rŒ      sÓ   ðñ÷ ,× +× +ß (Û 	à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#4Ó5€	Ø€Ø	€à
€ØÐhÐ
i€Ø€h‡l�lƒn×ÑÐ1Ó2€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€ò3òj#-òJò ò6^ð@ ˆzÒÙ…Fð r%   