Ë
    ¸¬ujŸ)  ã                   óÎ  — d 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Zddlm	Z	 dZ
dZdZdZd	Zd
diZ ej                   «       Zej$                  j'                  e«       d„ Zd„ Zd„ Zdd„Zd„ Zd„ Zdd„Zedk(  rbdZ eej<                  «      dkD  rAej<                  dd D ]/  ZejA                  d«      sŒ	  e!ejE                  d«      d   «      ZŒ1  ee¬«       yy# e#$ r Y ŒDw xY w)ub  
æ±Ÿè‹�æ–¹æ­£çŽ¯ä¿�é›†å›¢æœ‰é™�å…¬å�¸ - éªŒæ”¶å…¬ç¤º çˆ¬è™«
CMS: MyXYPTä¼�ä¸šCMS (jsfzep.com)
WAF: JSæŒ‘æˆ˜ (visitToken cookie)
åˆ—è¡¨: ul.xypg-news-list > li > a[href] > h3(æ ‡é¢˜) + div.date(æ—¥æœŸ)
åˆ†é¡µ: /news/9/pN.html (page N, 6æ�¡/é¡µ, å…±3é¡µ14æ�¡)
è¯¦æƒ…: h1.xypg-detail-title(æ ‡é¢˜), div.detail-info-time(æ—¥æœŸ), div.xypg-detail-con(æ­£æ–‡)
é    N)Úurljoin)ÚBeautifulSoupzhttps://www.jsfzep.comz/news/9u1   æ±Ÿè‹�æ–¹æ­£çŽ¯ä¿�é›†å›¢æœ‰é™�å…¬å�¸-éªŒæ”¶å…¬ç¤ºu   ä¼�ä¸šz/mnt/data/search.dbz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó   — 	 t         j                  | d¬«      }t	        j
                  d|j                  «      }|rK|j                  d«      }t         j                  j                  d|«       	 t         j                  | d¬«      }|S |S # t        $ r}t        d|› �«       Y d}~yd}~ww xY w# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)	u<   ç»•è¿‡JSæŒ‘æˆ˜WAFï¼šæ��å�–md5_hashå¹¶è®¾ç½®visitToken cookieé   )Útimeoutz  [WAF] Nzvar md5_hash = '([^']+)'é   Ú
visitTokenz  [WAF retry] )
ÚsessionÚgetÚ	ExceptionÚprintÚreÚsearchÚtextÚgroupÚcookiesÚset)ÚurlÚrÚeÚmatchÚmd5_hashs        ú)/root/gov_crawler/crawl_jsfzep_yanshou.pyÚ
bypass_wafr   $   s¼   € ðÜ�K‰K˜ RˆKÓ(ˆô �I‰IÐ1°1·6±6Ó:€EÙØ—;‘;˜q“>ˆÜ�‰×Ñ˜L¨(Ô3ð	Ü—‘˜C¨�Ó,ˆAð €Hˆ1€Høô ò Ü�˜˜ˆnÔÜûðûô ò 	Ü�N 1 #Ð&Ô'Üûð	ús/   ‚B Á-B, Â	B)ÂB$Â$B)Â,	CÂ5CÃCc                 óV   — | syt        j                  dd| «      } | j                  «       S )NÚ z(&middot;|&nbsp;|\s)+ú )r   ÚsubÚstrip)r   s    r   Ú
clean_textr    :   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 óð  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]&  }|j                  sŒ|j                  dk(  rÆ|j	                  d¬«      }|sŒ5|j                  dd¬	«      D ]‰  }|d
   }t        j                  d|t        j                  «      sŒ.|j	                  d¬«      xs |}	|j                  d«      st        ||«      n|}
|j                  |j                  d|	› d|
› d�«      «       Œ‹ |j                  |«       Œæ|j                  dk(  r|j                  t        |«      «       �Œ|j                  dv �r—|j                  dd¬«      D ]Ù  }|j                  d«      rŒ|j	                  d¬«      }|sŒ*|j                  dd¬	«      D ]‰  }|d
   }t        j                  d|t        j                  «      sŒ.|j	                  d¬«      xs |}	|j                  d«      st        ||«      n|}
|j                  |j                  d|	› d|
› d�«      «       Œ‹ |j                  |«       ŒÛ |j                  dd¬«      D ]  }|j                  t        |«      «       Œ |j                  d«      D ]`  }|j!                  dd«      }|j!                  dd«      }|sŒ*|j                  d«      st        ||«      n|}|j                  d|› d|› d�«       Œb �Œ·|j                  dk(  s�ŒÈ|j!                  dd«      }|j!                  dd«      }|s�Œð|j                  d«      st        ||«      n|}|j                  d|› d|› d�«       �Œ) dj#                  |«      S )u.   æ��å�–æ­£æ–‡ï¼Œè¡¨æ ¼ä¿�ç•™HTMLï¼Œé™„ä»¶åµŒå…¥r   úhtml.parserÚscriptÚstyleÚpT©r   Úa)Úhrefr)   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$Úhttpz [z](z) Útable)ÚdivÚsectionÚarticle©Ú	recursiveÚimgÚsrcÚaltz![ú)z

)r   Ú	decomposeÚchildrenÚnameÚget_textÚfind_allr   r   ÚIÚ
startswithr   Úreplace_withÚ
new_stringÚappendÚstrÚfind_parentr   Újoin)Úhtml_contentÚ
detail_urlÚsoupÚtagÚpartsÚchildÚtÚa_tagr)   Úa_textÚfull_urlr&   Útblr1   r2   r3   Úfull_srcs                    r   Úclean_content_htmlrN   A   s:  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðð €EØ—‘ó .6ˆØ�zŠzØà�:‰:˜ÒØ—‘ T�Ó*ˆAÚà"Ÿ^™^¨C°d˜^Ó;ò Y�EØ  ™=�DÜ—y‘yÐ!FÈÌbÏdÉdÕSØ!&§¡°d Ó!;Ò!C¸t˜ØDHÇOÁOÐTZÔD[¤7¨:°tÔ#<Ðae˜Ø×*Ñ*¨4¯?©?¸RÀ¸xÀrÈ(ÈÐSUÐ;VÓ+WÕXðYð —‘˜Q•à�Z‰Z˜7Ò"Ø�L‰Lœ˜U›Ö$à�Z‰ZÐ8Ò8Ø—^‘^ C°4�^Ó8ò $�Ø—=‘= Ô)ØØ—J‘J T�JÓ*�ÚØ!"§¡¨C°d Ó!;ò ]˜Ø$ V™}˜ÜŸ9™9Ð%JÈDÔRT×RVÑRVÕWØ%*§^¡^¸$ ^Ó%?Ò%GÀ4˜FØHLÏÉÐX^ÔH_¤w¨z¸4Ô'@Ðei˜HØ!×.Ñ.¨t¯©ÀÀFÀ8È2ÈhÈZÐWYÐ?ZÓ/[Õ\ð]ð —L‘L •Oð$ð —~‘~ g¸�~Ó>ò '�Ø—‘œS ›XÕ&ð'à—~‘~ eÓ,ò :�Ø—g‘g˜e RÓ(�Ø—g‘g˜e RÓ(�ÚØ?B¿~¹~ÈfÔ?Uœw z°3Ô7Ð[^�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Õ9ò:ð �Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜r #  b¨¨
°!Ð4Ö5ð].6ð` �;‰;�uÓÐr!   é   c                 ó   — g }t        | «      D �]ì  }|dk(  rt        t        z   dz   }nt        t        z   d|dz   › d�z   }t        d|dz   › d�d¬	«       t	        |«      }|€t        d
«        |S |j
                  dk7  rt        d|j
                  › �«        |S t        |j                  d«      }|j                  dd¬«      }|st        d«        |S d}|j                  dd¬«      D ]ï  }|j                  d«      }	|	sŒ|	j                  dd«      }
|
sŒ,|	j                  d«      rEt        |	j                  dd«      «      xs* t        |	j                  d«      j                  «       «      nd}|st        |	j                  d¬«      «      }|	j                  dd¬«      }|rt        |j                  «       «      nd}|
r|sŒÖ|j                  |
||dœ«       |dz  }Œñ t        |› d�«       t        j                  d «       �Œï |S )!u   èŽ·å�–æ–‡ç« åˆ—è¡¨r   ú/z/pr   z.htmlu     ç¬¬u   é¡µ...r   ©Úendu	   WAFå¤±è´¥éÈ   zHTTP r#   Úulzxypg-news-list©Úclass_u	   æ— åˆ—è¡¨ÚliFr/   r(   r)   r   Úh3ÚtitleTr'   r,   Údate)r   rZ   r[   u   æ�¡ç333333Ó?)ÚrangeÚBASE_URLÚ	LIST_PATHr   r   Ústatus_coder   r   Úfindr9   r   r    r8   r>   ÚtimeÚsleep)Ú	max_pagesÚ	all_itemsÚpager   r   rD   rU   ÚcountrX   r(   r)   rZ   Údate_divr[   s                 r   Ú
fetch_listri   }   s  € à€IÜ�iÓ ó )ˆØ�1Š9ÜœYÑ&¨Ñ,‰CäœYÑ&¨2¨d°1©f¨X°UÐ);Ñ;ˆCÜ��d˜1‘f�X˜VÐ$¨#Õ.ä�s‹OˆØˆ9Ü�+ÔØð@ Ðð? �=‰=˜CÒÜ�E˜!Ÿ-™-˜Ð)Ô*Øð: Ðô7 ˜QŸV™V ]Ó3ˆØ�Y‰Y�tÐ$4ˆYÓ5ˆÙÜ�+ÔØð. Ðð+ ˆØ—+‘+˜d¨e�+Ó4ò 	ˆBØ—‘˜“ˆAÙØØ—5‘5˜ Ó$ˆDÙØØ]^×]cÑ]cÐdhÔ]i”J˜qŸu™u W¨bÓ1Ó2ÒY´jÀÇÁÈÃ×AVÑAVÓAXÔ6YÐoqˆEÙÜ" 1§:¡:°D :Ó#9Ó:�à—v‘v˜e¨F�vÓ3ˆHÙ6>”:˜h×/Ñ/Ó1Ô2ÀBˆDÙ™uØØ×Ñ T°EÀ4ÑHÔIØ�Q‰J‰Eð!	ô$ 	���sˆmÔÜ�
‰
�3ŽðS)ðT Ðr!   c                 óî  — t        | d«      }d}d}d}d}|j                  dd¬«      }|rt        |j                  «       «      }|j                  dd¬«      }|ro|j                  d¬	«      }	t	        j
                  d
|	«      }
|
rE|
j                  d«      }|j                  dd«      j                  dd«      j                  dd«      }|}|j                  dd¬«      }|rt        t        |«      |«      }||||fS )u   è§£æž�è¯¦æƒ…é¡µr#   r   Úh1zxypg-detail-titlerV   r,   zdetail-info-timeTr'   u!   (\d{4}[-å¹´]\d{1,2}[-æœˆ]\d{1,2})r   u   å¹´ú-u   æœˆu   æ—¥zxypg-detail-con)
r   ra   r    r8   r   r   r   ÚreplacerN   r?   )Úhtmlr   rD   rZ   Úpublish_dateÚsourceÚcontentrk   Útime_divÚtxtÚdmÚrawÚ
detail_cons                r   Úparse_detailrw   ­   sü   € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð 
�‰�4Ð 3ˆÓ	4€BÙ	Ü˜2Ÿ;™;›=Ó)ˆð �y‰y˜Ð'9ˆyÓ:€HÙØ×Ñ dÐÓ+ˆÜ�Y‰YÐ;¸SÓAˆÙØ—(‘(˜1“+ˆCØ—+‘+˜e SÓ)×1Ñ1°%¸Ó=×EÑEÀeÈRÓPˆCØˆLð —‘˜5Ð):�Ó;€JÙÜ$¤S¨£_°cÓ:ˆà�, ¨Ð/Ð/r!   c                 ó"  — | d   j                  dd«      }|xs | d   j                  dd«      }|xs | j                  dd«      }|xs t        }|j                  dd«      }|j                  dd«      }	|d d }
t        }d|› d	|› d	|	› d	|› d	|› d	|› d	|
› d	t        › d
�}|dz   }	 t	        j
                  dt        g|ddd¬«      }|j                  dk(  r`|j                  j                  «       }	 t        |j                  «       «      }|dkD  rPd|› d�}t	        j
                  dt        g|ddd¬«       yd|j                  vrt        d|j                  d d › �«       y# t        $ r d}Y Œcw xY w# t        $ r}t        d|› �«       Y d }~yd }~ww xY w)Nr   ú'z''rZ   r[   r   rT   zœINSERT OR IGNORE INTO gov_raw 
        (page_url, title, content, publish_date, source_url, site_name, summary, group_name, industry)
    VALUES 
        ('z', 'u   ', 'çŽ¯å¢ƒå…¬ç¤º');
zDSELECT CASE WHEN changes() > 0 THEN last_insert_rowid() ELSE 0 END;
Úsqlite3Tr   )ÚinputÚcapture_outputr   r   r   z‡INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary)
SELECT rowid, title, site_name, summary FROM gov_raw WHERE rowid = z;
zUNIQUE constraintz	    [DB] u       [DB] é”™è¯¯: F)rm   r   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr   ÚintÚ
ValueErrorÚstderrr   r   )ÚitemÚdetail_titleÚpub_daterp   rq   Úpage_urlrZ   ro   Úsource_nameÚcontent_safeÚsummaryÚ	site_nameÚsql_rawÚcombined_sqlÚresultÚoutÚrowidÚfts_sqlr   s                      r   Úinsert_articler•   Ì   sè  € Ø�E‰{×"Ñ" 3¨Ó-€HØÒ*˜T '™]×3Ñ3°C¸Ó>€EØÒ3˜tŸx™x¨°Ó3€LØÒ%œI€KØ×%Ñ% c¨4Ó0€KØ—?‘? 3¨Ó-€LØ�D�Sˆk€GÜ€Iðð ˆ*�D˜˜˜t L >°°l°^À4ÈÀzÐQUÐV_ÐU`Ð`dÐelÐdmÐmqÔrwÐqxð yð€Gð
 ð ñ €Lð'Ü—‘ØœÐ ØØ d°Bô
ˆð
 ×Ñ Ò!Ø—-‘-×%Ñ%Ó'ˆCðÜ˜CŸI™I›KÓ(�ð �qŠyðDØDIÀ7ð Kð�ô —‘ 	¬7Ð3¸7ÐSWÐ^bÐlnÕoØà"¨&¯-©-Ñ7Ü˜	 &§-¡-°°Ð"5Ð!6Ð7Ô8ð øô ò Ø’ðûô ò 'ÜÐ! ! Ð%×&Ð&Øûð'úsC   Â#A	E- Ã-E Ä+E- Ä2)E- ÅE*Å'E- Å)E*Å*E- Å-	FÅ6F	Æ	Fc                 ó   — t        d«       t        dd¬«       t        t        t        z   dz   «      }|�|j                  dk7  rt        d«       y t        d«       t        | «      }|st        d	«       y t        d
t        |«      › d�«       t        «       }	 t        j                  dt        dgddd¬«      }|j                  dk(  rL|j                  j                  «       r2t        |j                  j                  «       j                  d«      «      }t        dt        |«      › �«       d}d}t!        |«      D �]  \  }}|d   }	|	|v r|dz  }Œt        d|dz   › dt        |«      › d|d   d d › d�d¬«       t        |	«      }|�|j                  dk7  r!t        d«       t#        j$                  d«       Œ|t'        |j(                  |	«      \  }
}}}|j                  «       st        d«       |dz  }Œ¸t+        ||
|||«      r,|dz  }t        dt        |j                  «       «      › d�«       n|dz  }t        d«       t#        j$                  d «       �Œ t        d!|› d"|› d�«       t        d#«       y # t        $ r Y �Œkw xY w)$Nu1   === æ±Ÿè‹�æ–¹æ­£çŽ¯ä¿� - éªŒæ”¶å…¬ç¤º çˆ¬è™« ===
u   æ­£åœ¨ç»•è¿‡WAF...r   rR   rQ   rT   u   WAFç»•è¿‡å¤±è´¥ÚOKu   æ— æ–‡ç« åˆ—è¡¨u   
åˆ—è¡¨æ€»è®¡: u    æ�¡rz   z?SELECT page_url FROM gov_raw WHERE page_url LIKE '%jsfzep.com%'Tr   )r|   r   r   r   ú
u   å·²çŸ¥URL: r   r   z  [z] rZ   é2   z...u   ERR èŽ·å�–å¤±è´¥u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)r\   u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)r   r   r^   r_   r`   ri   Úlenr   r   r€   r�   r‚   rƒ   r   Úsplitr   Ú	enumeraterb   rc   rw   r   r•   )rd   r   ÚarticlesÚ
known_urlsr‘   ÚaddedÚskippedÚir(   r   Úd_titleÚd_dateÚd_sourcerq   s                 r   Úmainr¥   ÷   sd  € Ü	Ð>Ô@ô 
Ð
 CÕ(Ü”8œiÑ'¨#Ñ-Ó.€AØ€y�A—M‘M SÒ(ÜÐÔ ØÜ	ˆ$„Kä˜)Ó$€HÙÜÐÔ ØÜ	ÐœS ›]˜O¨4Ð
0Ô1ä“€JðÜ—‘ØœÐ!bÐcØ d°Bô
ˆð ×Ñ Ò! f§m¡m×&9Ñ&9Ô&;Ü˜VŸ]™]×0Ñ0Ó2×8Ñ8¸Ó>Ó?ˆJô 
ˆKœ˜J›Ð(Ð
)Ô*à€EØ€GÜ˜(Ó#ó ‰ˆˆ1Ø�‰hˆØ�*ÑØ�q‰LˆGØä��A�a‘C�5˜œ#˜h›-˜¨¨1¨W©:°c°r¨?Ð*;¸3Ð?ÀSÕIÜ�s‹OˆØˆ9˜Ÿ™¨Ò,ÜÐ$Ô&Ü�J‰J�qŒMØä-9¸!¿&¹&À#Ó-FÑ*ˆ�˜ 7Ø�}‰}ŒÜÐ"Ô#Ø�q‰LˆGØä˜!˜W f¨h¸Ô@Ø�Q‰JˆEÜ�Dœ˜WŸ]™]›_Ó-Ð.¨dÐ3Õ4à�q‰LˆGÜÐ0Ô1Ü�
‰
�3Žð3ô6 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôE ò Úðús   ÂA;I0 É0	I=É<I=Ú__main__r   z--pages=ú=)rd   )rO   )$Ú__doc__r   Úsysrb   r   Úurllib.parser   ÚrequestsÚbs4r   r^   r_   r}   r~   r�   ÚHEADERSÚSessionr
   ÚheadersÚupdater   r    rN   ri   rw   r•   r¥   Ú__name__Úpagesrš   ÚargvÚargr;   r„   r›   r…   © r!   r   ú<module>r¶      s  ðñó 
Û 
Û Û Ý  ã Ý ð $€Ø€	Ø?€	Ø€Ø
€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò,ò9óx-ò`0ò>(óV;ð| ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Â5CÃC$Ã#C$