Ë
    ¬X€jz  ã                   óô   — 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	 ddl
mZ  ej                  dd«      ZdZdZd	Zd
ZdZdZdZ e	ddd«      ZdZdde› d�dœZd„ Zd„ Zd„ Zedk(  r e«        yy)uÊ  
ä¹‰ä¹Œå¸‚äººæ°‘æ”¿åºœ - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯å…¬ç¤º çˆ¬è™«
CMS: JCMS (æµ™æ±Ÿæ”¿åŠ¡ jpaas-publish-server)
åˆ—è¡¨: GET api-gateway/jpaas-publish-server/front/page/build/unit
      (webId=3549, pageId=1229856974, tagId=æ”¿åºœä¿¡æ�¯å…¬å¼€åˆ—è¡¨, ç¿»é¡µç”¨ paramJson={"pageNo":N,"pageSize":"15"})
è¯¦æƒ…: curl ç›´è¿ž, æ­£æ–‡åœ¨ div.main_section (åµŒå¥—), é™„ä»¶é“¾æŽ¥ç»�å¯¹åŒ–
ç”¨æ³•: python3 crawl_yw_jhgh.py [--pages N]  (é»˜è®¤ 5 é¡µ = 75 æ�¡)
é    N)ÚdatetimeÚdate)ÚBeautifulSoupÚ	SEARCH_DBz/root/search.dbu(   yw.gov.cn-çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯å…¬ç¤ºzLhttps://www.yw.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitzhttps://www.yw.gov.cnÚ3549Ú
1229856974u   æ”¿åºœä¿¡æ�¯å…¬å¼€åˆ—è¡¨ÚzfHuDn7pjzPV0dB1wLhu9iç  é   é   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36zhttps://www.yw.gov.cn/col/colz/index.html)z
User-AgentÚRefererc                 óT  — dt         t        t        t        ddœ}| dkD  rt	        j
                  | ddœd¬«      |d	<   t        j                  t        |t        d
¬«      }|j                  «        |j	                  «       }|j                  d«      s2t        d| › d|j                  d«      › �t        j                  ¬«       g S t        |d   d   d«      }g }|j                  d«      D ]À  }|j!                  dd¬«      }|sŒ|j                  dd«      }|sŒ.|j#                  d«      s	t$        |z   }|j!                  d«      }	|	r|	j'                  d¬«      n|j'                  d¬«      }
|j!                  d«      }|r|j'                  d¬«      nd}|sŒ©|
sŒ¬|j)                  ||
|dœ«       ŒÂ |S ) zHFetch one list page from the JCMS build/unit API. Returns list of dicts.ÚbulidstaticÚcolumn)Ú	parseTypeÚwebIdÚpageIdÚtagIdÚtplSetIdÚpageTypeé   Ú15)ÚpageNoÚpageSizeF)Úensure_asciiÚ	paramJsoné   )ÚparamsÚheadersÚtimeoutÚsuccessz  [API] page z not success: Úmessage©ÚfileÚdataÚhtmlÚlxmlÚliÚaÚbt_link©Úclass_ÚhrefÚ ÚhttpÚpT©ÚstripÚspan)ÚurlÚtitleÚpub_date)ÚWEB_IDÚPAGE_IDÚTAG_IDÚ
TPL_SET_IDÚjsonÚdumpsÚrequestsÚgetÚAPIÚHEADERSÚraise_for_statusÚprintÚsysÚstderrr   Úfind_allÚfindÚ
startswithÚBASEÚget_textÚappend)Úpnr   ÚrÚdÚsoupÚitemsr(   r)   r-   r0   r5   r3   r6   s                ú"/root/gov_crawler/crawl_yw_jhgh.pyÚfetch_list_pagerQ      s…  € ð #ÜÜÜÜØñ€Fð 
ˆA‚vÜ"Ÿj™j°BÀDÑ)IÐX]Ô^ˆˆ{ÑÜ�‰”S ´À"ÔE€AØ×ÑÔØ	�‰‹€AØ�5‰5�ÔÜ�˜b˜T °·±°iÓ0@Ð/AÐBÌÏÉÕTØˆ	Ü˜˜6™ 6Ñ*¨FÓ3€DØ€EØ�m‰m˜DÓ!ò NˆØ�G‰G�C 	ˆGÓ*ˆÙØØ�u‰u�V˜RÓ ˆÙØØ�‰˜vÔ&Ü˜$‘;ˆDà�F‰F�3‹KˆÙ*+�—
‘
 �
Ô&°·±À$°Ó1GˆØ�v‰v�f‹~ˆÙ04�4—=‘= t�=Ô,¸"ˆÚ’EØ�L‰L °À8ÑLÕMðNð  €Ló    c                 óŠ  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }|j                  d«      }|r|j                  d¬«      nd}|j                  d	d
¬«      }|s|dfS |d   }|j                  g d¢¬«      D ]  }|j                  «        Œ |j                  dd¬«      D ](  }|d   }	|	sŒ|	j                  d«      rŒt        |	z   |d<   Œ* |j                  d«      D ]5  }
|
j                  dd«      }|sŒ|j                  d«      rŒ*t        |z   |
d<   Œ7 |j                  ddg«      D ]  }|j                  «        Œ |j                  g d¢¬«      D ]  }|j                  «        Œ |t        |«      fS # t        $ r+}t        d| › d|› �t        j                   ¬«       Y d}~yd}~ww xY w)z0Fetch detail page: return (title, content_html).r   )r   r    zutf-8r'   Úh2Tr1   r.   ÚdivÚmain_sectionr+   éÿÿÿÿ)Ú
main_titleÚartic_kopenÚartic_totherÚlinkeÚyybbÚ	artic_keyr)   )r-   r-   r/   ÚimgÚsrcÚscriptÚstyle)ÚewmÚewm2rJ   )Úidz  [detail] z ERR r#   N)r.   r.   )r=   r>   r@   Úencodingr   ÚtextrF   rI   rE   Ú	decomposerG   rH   ÚstrÚ	ExceptionrB   rC   rD   )r4   rL   rN   rT   r5   ÚartsÚartÚtagr)   r-   r^   r_   Úes                rP   Úfetch_detailrn   F   s¬  € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V VÓ,ˆØ�Y‰Y�t‹_ˆÙ+-�—‘ $�Ô'°2ˆà�}‰}˜U¨>ˆ}Ó:ˆÙØ˜"�9ÐØ�2‰hˆà—<‘<Ò'r�<Ósò 	ˆCØ�M‰M�Oð	ð —‘˜c¨�Ó-ò 	(ˆAØ�V‘9ˆDÚ˜DŸO™O¨FÕ3Ü  4™K��&’	ð	(ð —<‘< Ó&ò 	(ˆCØ—'‘'˜% Ó$ˆCÚ˜3Ÿ>™>¨&Õ1Ü! C™Z��E’
ð	(ð
 —<‘< ¨7Ð 3Ó4ò 	ˆCØ�M‰M�Oð	à—<‘<Ò#<�<Ó=ò 	ˆCØ�M‰M�Oð	à”c˜#“hˆÐøÜò Ü�˜C˜5  a SÐ)´·
±
Õ;Üûðús8   ‚A8F Á;AF ÃF Ã6F ÄF Ä"A+F Æ	GÆ!F=Æ=Gc                  óð  — t         } t        j                  dd  }t        |«      D ]\  \  }}|dk(  r#|dz   t	        |«      k  rt        ||dz      «      } Œ.|j                  d«      sŒ@t        |j                  d«      d   «      } Œ^ t        j                  t        «      }|j                  «       }d}d}d}t        d| dz   «      D �]Ì  }	t        |	«      }
|
s"t        d|	› d�t        j                  ¬	«        �n�t        d|	› d
t	        |
«      › d�t        j                  ¬	«       |
D �]e  }|d   }|rC|t         j#                  d«      k  r+d}t        dt         › d|› d�t        j                  ¬	«        �n|d   }|j%                  d|f«       |j'                  «       r|dz  }Œ|t)        |«      \  }}|rt	        |«      dk  r*t        d|d   d d › �t        j                  ¬	«       |dz  }ŒÄ|xs |d   }|xs d}|j%                  dt*        ||d d ||d d |df«       |j,                  dkD  r7|dz  }t        d|d d › d|› dt	        |«      › d �t        j                  ¬	«       n|dz  }|j/                  «        t1        j2                  d!«       �Œh |s�ŒÍ n t        d"t*        › d#|› d$|› d�t        j                  ¬	«       |dkD  r'|j%                  d%t*        f«       |j/                  «        |j5                  «        y )&Nr   z--pagesz--pages=ú=r   Fu     ç¬¬u   é¡µ: ç©º -> ç»“æ�Ÿr#   u   é¡µ: u    æ�¡r6   z%Y-%m-%dTu     å·²è¾¾æˆªæ–­æ—¥ u	    (å½“å‰� u
   )ï¼Œå�œæ­¢r4   z)SELECT id FROM gov_raw WHERE page_url = ?é   u       ! ç©ºæ­£æ–‡: r5   é(   r.   z‚INSERT OR IGNORE INTO gov_raw (site_name, page_url, title, content, publish_date, source_url, status) VALUES (?, ?, ?, ?, ?, ?, ?)iô  Údonez    + é2   z (z) body:ÚBg333333Ó?z
[u   ] å®Œæˆ�! æ–°å¢ž u    æ�¡, è·³è¿‡ zóINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary)
                      SELECT rowid, title, site_name, substr(content,1,500) FROM gov_raw
                      WHERE site_name=? AND rowid NOT IN (SELECT rowid FROM gov_search))ÚMAX_PAGES_DEFAULTrC   ÚargvÚ	enumerateÚlenÚintrG   ÚsplitÚsqlite3ÚconnectÚDB_PATHÚcursorÚrangerQ   rB   rD   ÚCUTOFF_DATEÚstrftimeÚexecuteÚfetchonern   Ú	SITE_NAMEÚrowcountÚcommitÚtimeÚsleepÚclose)Ú	max_pagesÚargsÚir)   ÚconnÚcÚall_newÚall_skipÚreached_cutoffÚpagerO   ÚitÚpubr4   Údetail_titleÚcontentr5   r6   s                     rP   Úmainr˜   j   sä  € Ü!€IÜ�8‰8�A�Bˆ<€DÜ˜$“ò -‰ˆˆ1Ø�	Š>˜a !™e¤c¨$£iÒ/Ü˜D  Q¡™KÓ(‰IØ�\‰\˜*Õ%Ü˜AŸG™G C›L¨™OÓ,‰Ið	-ô �?‰?œ7Ó#€DØ�‰‹€Aà€GØ€HØ€Nä�a˜ Q™Ó'ó %ˆÜ Ó%ˆÙÜ�E˜$˜Ð1Ð2¼¿¹ÕDÚÜ��d�V˜5¤ U£ ¨DÐ1¼¿
¹
ÕCØó 	ˆBØ�Z‘.ˆCÙ�sœ[×1Ñ1°*Ó=Ò=Ø!%�ÜÐ*¬;¨-°yÀÀÀZÐPÔWZ×WaÑWaÕbÚØ�U‘)ˆCØ�I‰IÐAÀCÀ6ÔJØ�z‰zŒ|Ø˜A‘�ØÜ$0°Ó$5Ñ!ˆL˜'Ùœc '›l¨RÒ/ÜÐ)¨"¨W©+°c°rÐ*:Ð);Ð<Ä3Ç:Á:ÕNØ˜A‘�ØØ Ò/ B w¡KˆEØ’y˜bˆHØ�I‰Ið/ä˜C  t¨ ¨g°xÀÀ°}ÀcÈ6ÐRôð
 �z‰z˜AŠ~Ø˜1‘�Ü˜˜u S b˜z˜l¨"¨X¨J°g¼cÀ'»l¸^È1ÐMÔTW×T^ÑT^Ö_à˜A‘�Ø�K‰KŒMÜ�J‰J�sŽOð;	ó< ÙðK%ôN 
ˆC”	ˆ{Ð+¨G¨9°MÀ(ÀÈ4Ð
PÔWZ×WaÑWaÕbà�‚{Ø	�	‰	ð [ä]fÐ\hô	jð 	�‰ŒØ‡J�J…LrR   Ú__main__)Ú__doc__ÚosrC   r;   Úrerˆ   r|   r=   r   r   Úbs4r   Úgetenvr~   r…   r?   rH   r7   r8   r9   r:   r�   rv   r@   rQ   rn   r˜   Ú__name__© rR   rP   ú<module>r¡      s§   ðñ÷ 2× 1× 1Ó 1ß #Ý à
ˆ"�)‰)�KÐ!2Ó
3€Ø6€	ØT€Ø€Ø	€Ø
€Ø	#€Ø$€
Ù�4˜˜BÓ€ØÐ ð DØ.¨w¨i°{ÐCñ€ò$òN!òH>ðB ˆzÒÙ…Fð rR   