Ë
    ¸¬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 ddl	m
Z
 ddlZddlmZ d„ Z eej                  dd «      Z ede› �«        ej$                  d	d
«      ZdZdZedz   ZdZ ej0                  «       j3                  d«      ZddddœZdZdZdZd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd „ Z(e)d!k(  r e(«        yy)"ua  
ä¸´å·�åŒºäººæ°‘æ”¿åºœ - col1432 æ”¿åºœä¿¡æ�¯å…¬å¼€(å…¬å…±èµ„æº�é…�ç½® D00004D00003)
URL: http://www.jxlc.gov.cn/col/col1432/
CMS: Hanweb å¤§æ±‰ xxgk/search.jsp (éœ€å…ˆè®¿é—®åˆ—è¡¨é¡µæ‹¿ cookie, å�¦åˆ™ {"msg":"closed"} 503)
åˆ—è¡¨: POST /module/xxgk/search.jsp  infotypeId=D00004D00003 jdid=5 currpage=N  18æ�¡/é¡µ
è¯¦æƒ…: /art/YYYY/M/D/art_4780_xxx.html  meta ArticleTitle/PubDate + div#zoom

ç”¨æ³•:
  python3 crawl_jxlc_col1432.py --pages=1     # å¢žé‡�: å‰�1é¡µ(çº¦18æ�¡)
  python3 crawl_jxlc_col1432.py --pages=5     # é¦–æ‰¹å‰�5é¡µ
  python3 crawl_jxlc_col1432.py --pages=200   # å…¨é‡�(933æ�¡â‰ˆ52é¡µ)
é    N)Údatetime)Úurljoin)ÚBeautifulSoupc                 óL  — d| v ryt        | «      D ]‘  \  }}|dk(  r:|dz   t        | «      k  r)| |dz      j                  «       rt        | |dz      «      c S |j	                  d«      rt        |j                  d«      d   «      c S |j                  «       sŒ†t        |«      c S  y)u1   å…¼å®¹ --pages=N / --pages N / è£¸æ•°å­— / --fullz--fulli'  z--pagesé   z--pages=ú=)Ú	enumerateÚlenÚisdigitÚintÚ
startswithÚsplit)ÚargvÚiÚas      ú'/root/gov_crawler/crawl_jxlc_col1432.pyÚparse_pagesr      s™   € à�4ÑØÜ˜$“ò ‰ˆˆ1Ø�	Š>˜a !™e¤c¨$£iÒ/°D¸¸1¹±I×4EÑ4EÔ4GÜ�t˜A˜a™C‘y“>Ò!Ø�<‰<˜
Ô#Ü�q—w‘w˜s“| A‘Ó'Ò'Ø�9‰9�;Ü�q“6ŠMðð ó    r   z[jxlc-col1432] max_pages=Ú	SEARCH_DBz/mnt/data/search.dbzhttps://www.jxlc.gov.cnz$https://www.jxlc.gov.cn/col/col1432/z/module/xxgk/search.jspé   z%Y-%m-%dzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36ÚXMLHttpRequestz0application/x-www-form-urlencoded; charset=UTF-8)ú
User-AgentzX-Requested-WithzContent-Typeu(   ä¸´å·�åŒºäººæ°‘æ”¿åºœ-å…¬å…±èµ„æº�é…�ç½®u   å…¬å…±èµ„æº�é…�ç½®u   æ±Ÿè¥¿c                  óª   — t        j                  t        d¬«      } | j                  d«       | j                  d«       t         j                  | _        | S )Né   )ÚtimeoutzPRAGMA journal_mode=WALzPRAGMA busy_timeout=30000)Úsqlite3ÚconnectÚDB_PATHÚexecuteÚRowÚrow_factory)Úconns    r   Úget_connr#   8   s=   € Ü�?‰?œ7¨BÔ/€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ü—{‘{€DÔØ€Kr   c                 óÜ   — | s| S | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } | j                  «       S )uA   æ¸…ç�†æ ‡é¢˜: å®žä½“å‰�ç¼€ &middot;&nbsp; + é›¶å®½ç©ºæ ¼ + ç©ºç™½z&middot;Ú z&nbsp;z&ensp;z&emsp;z[\u200b\u200c\u200d\ufeff])ÚreplaceÚreÚsubÚstrip)Úts    r   Úclean_titler+   ?   sb   € áØˆØ	�	‰	�*˜bÓ!×)Ñ)¨(°BÓ7×?Ñ?ÀÈ"ÓM×UÑUÐV^Ð`bÓc€AÜ
�‰Ð,¨b°!Ó4€AØ�7‰7‹9Ðr   c                 óH   — | j                  d|f«      j                  «       d uS )Nz'SELECT id FROM gov_raw WHERE page_url=?)r   Úfetchone)r"   Úpage_urls     r   Úis_dupr/   G   s%   € Ø�<‰<ÐAÀHÀ;ÓO×XÑXÓZÐbfÐfÐfr   c                 óÜ  — |rd|v rt        |j                  dd«      «      nd}d}|rt        |d«      j                  d¬«      d d }	 | j	                  dt
        |||||t        |d	t        d
|xs dv rdndf«      }|j                  dkD  r	 | j	                  d|t
        |f«       yy# 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)Nú-r%   r   úhtml.parserT©r)   éÈ   z¼INSERT OR IGNORE INTO gov_raw (site_name, title, page_url, publish_date, content, date_rank, category, summary, script_name, group_name, has_table) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)zcrawl_jxlc_col1432.pyz<tabler   zCINSERT INTO gov_search (title, site_name, summary) VALUES (?, ?, ?)z    [FTS WARN] Fz    [ERR] insert: )r   r&   r   Úget_textr   Ú	SITE_NAMEÚCATEGORYÚ
GROUP_NAMEÚrowcountÚ	ExceptionÚprint)	r"   Útitler.   Úpublish_dateÚcontentÚ	date_rankÚplainÚcurÚes	            r   Úinsert_itemrC   J   s  € Ù6BÀsÈlÑGZ”�L×(Ñ(¨¨bÓ1Ô2Ð`a€IØ€EÙÜ˜g }Ó5×>Ñ>ÀTÐ>ÓJÈ4ÈCÐPˆðØ�l‰lð7ô ˜˜x¨°wÀ	Ì8ÐUZØ$¤j°xÀGÂMÈrÑ7R±!ÐXYð[ó	
ˆð �<‰<˜!Òð-Ø—‘ØYØœI uÐ-ôð Øøô ò -Ü˜¨ sÐ+×,Ð,Øûð-ûô ò ÜÐ" 1 #Ð&Ô'Üûðús=   ÁAC
 ÂB& Â&	CÂ/CÂ=C
 ÃCÃC
 Ã
	C+ÃC&Ã&C+c                 ó�   — |dddddt        |«      dddddœ}| j                  t        |t        d¬«      }d|_        |j
                  S )NÚ5r%   Údiv1432)Ú
infotypeIdÚjdidÚareaÚdividÚvc_titleÚ	vc_numberÚcurrpageÚvc_filenumberÚvc_allÚtexttypeÚfbtimer   )ÚdataÚheadersr   úutf-8)ÚstrÚpostÚ
SEARCH_URLÚHEADERSÚencodingÚtext)ÚsessionÚinfotype_idÚpage_numrR   Úresps        r   Ú
fetch_listr_   f   sW   € à!ØØØØØÜ˜“MØØØØñ€Dð �<‰<œ
¨´wÈˆ<ÓK€DØ€D„MØ�9‰9Ðr   c                 óÄ  — g }t        j                  d| t         j                  «      }|D ]³  }t        j                  d|«      }t        j                  d|«      }|sŒ2|sŒ5|j	                  d«      }t        |j	                  d«      «      }|j                  d«      r|nt        t        |«      }|j                  |||j	                  d«      j                  «       f«       Œµ |S )Nz<li>(.*?)</li>z#href='([^']+)'\s+title=\"([^\"]+)\"z <b>\s*(\d{4}-\d{2}-\d{2})\s*</b>r   é   Úhttp)r'   ÚfindallÚDOTALLÚsearchÚgroupr+   r   r   rW   Úappendr)   )	Ú	html_textÚitemsÚlisÚliÚmÚdÚhrefr<   Úurls	            r   Ú
parse_listrp   x   s·   € Ø€EÜ
�*‰*Ð&¨	´2·9±9Ó
=€CØò ;ˆÜ�I‰IÐ<¸bÓAˆÜ�I‰IÐ9¸2Ó>ˆÚ’Ø—7‘7˜1“:ˆDÜ §¡¨£
Ó+ˆEØŸ/™/¨&Ô1‘$´w¼zÈ4Ó7PˆCØ�L‰L˜%  a§g¡g¨a£j×&6Ñ&6Ó&8Ð9Õ:ð;ð €Lr   c                 ó¶   — t        | |d«      }t        |«      }t        j                  d|«      }|rt	        |j                  d«      «      n
t        |«      }|||fS )Nr   znTotalCount\s*[^0-9]*(\d+))r_   rp   r'   re   r   rf   r
   )r[   r\   rh   ri   ÚtrÚtotals         r   Ú	get_totalrt   …   sR   € Ü˜7 K°Ó3€IÜ�yÓ!€EÜ	�‰Ð0°)Ó	<€BÙ "ŒC�—‘˜“Ô¬¨E«
€EØ�%˜Ð"Ð"r   c                 óþ  — t        | d«      }d}|j                  dddi¬«      }|r|j                  d«      rt        |d   «      }d}|j                  dddi¬«      }|rK|j                  d«      r:t	        j
                  d	|d   j                  «       «      }|r|j                  d
«      }d}|j                  dd¬«      }	|	rt        |	«      }|s)dD ]$  }
|j                  d|
¬«      }|sŒt        |«      } n |s|}|||fS )Nr2   r%   ÚmetaÚnameÚArticleTitle©Úattrsr>   ÚPubDatez(\d{4}-\d{1,2}-\d{1,2})r   ÚdivÚzoom)Úid)r>   ÚarticlerZ   ÚmainTextÚzoomcon)	r   ÚfindÚgetr+   r'   Úmatchr)   rf   Úextract_content)rh   Úfallback_titleÚsoupr<   rv   Úpub_dateÚmeta_dÚm2r>   r}   Úcidr|   s               r   Úparse_detailrŒ   �   s  € Ü˜ MÓ2€Dà€EØ�9‰9�V F¨NÐ#;ˆ9Ó<€DÙ�—‘˜Ô#Ü˜D ™OÓ,ˆà€HØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙ�&—*‘*˜YÔ'Ü�X‰XÐ0°&¸Ñ2C×2IÑ2IÓ2KÓLˆÙØ—x‘x “{ˆHà€GØ�9‰9�U˜vˆ9Ó&€DÙÜ! $Ó'ˆÙØHò 	ˆCØ—)‘)˜E c�)Ó*ˆCÚÜ)¨#Ó.�Ùð		ñ ØˆØ�'˜8Ð#Ð#r   c                 ó  — t        t        | «      d«      }|j                  g d¢«      D ]  }|j                  «        Œ |j                  dt	        j
                  dt        j                  «      i¬«      D ]  }|j                  «        Œ |j                  d«      D ]L  }|j                  d«      }|rt        t        |«      |d<   |j                  d«      }|sŒ=|j                  «        ŒN g }|j                  g d	¢«      D ]š  }|j                  }|d
k(  rŒ|dk(  r|j                  d«      rŒ,|j                  d¬«      }|sŒA|dk(  r|j                  t        |«      «       Œa|dv sŒft        |«      }	|dk(  r|j                  ddg«      rŒŠ|j                  |	«       Œœ dj                  |«      }
|
j!                  d«      }g }|D ]  }|r	||d   k7  sŒ|j                  |«       Œ  dj                  |«      j#                  «       S )uU   æ��å�–æ­£æ–‡: ä¿�ç•™è¡¨æ ¼HTMLã€�é™„ä»¶é“¾æŽ¥ç»�å¯¹åŒ–ã€�\n\nåˆ†æ®µã€�åŽ»é‡�å¤�å†…å®¹r2   )ÚscriptÚstyleÚnoscriptr�   zdisplay\s*:\s*nonery   r   rn   Úimg)	ÚpÚtabler|   rk   Úh1Úh2Úh3Úh4rr   rr   r’   r“   Tr3   )r’   r|   rk   r”   r•   r–   r—   r|   z

éÿÿÿÿ)r   rU   Úfind_allÚ	decomposer'   ÚcompileÚIrƒ   r   ÚBASEr‚   rw   Úfind_parentr5   rg   Újoinr   r)   )Únoder‡   Útagr   rn   r‘   ÚpartsÚelrZ   Úinnerr>   ÚsegsÚdedupedÚss                 r   r…   r…   «   sÕ  € äœ˜T› MÓ2€Dð �}‰}Ò<Ó=ò ˆØ�‰�ðà�}‰} G¬R¯Z©ZÐ8MÌrÏtÉtÓ-TÐ#Uˆ}ÓVò ˆØ�‰�ðð �]‰]˜3Óò ˆØ�u‰u�V‹}ˆÙÜ¤ dÓ+ˆAˆf‰Ià�f‰f�U‹mˆÚØ�M‰M�Oðð €EØ�m‰mÒUÓVò  ˆØ�g‰gˆØ�$Š;àà�#Š:˜"Ÿ.™.¨Ô1Øà�{‰{ ˆ{Ó&ˆÙØØ�'Š>Ø�L‰Lœ˜R›Õ!ØÐ>Ò>Ü˜“GˆEà�eŠ| §¡¨¨g¨Ô 7ØØ�L‰L˜Õð' ð( �k‰k˜%Ó €Gð �=‰=˜Ó €DØ€GØò ˆÙ˜!˜w r™{Ó*Ø�N‰N˜1Õðð �;‰;�wÓ×%Ñ%Ó'Ð'r   c                  ó�  — t        «       } t        j                  «       }|j                  t        dt
        d   id¬«      }t        d|j                  › dt        |j                  j                  «       «      › �«       d}t        ||«      \  }}}|t        z   dz
  t        z  }t        t        |«      }t        d|› d	|› d
|› �«       t        |«      }	|dkD  rSt        d|dz   «      D ]A  }
	 t!        |||
«      }t#        |«      }|	j%                  |«       t)        j*                  d«       ŒC t        dt-        |	«      › d�«       dx}x}}t/        |	d«      D ]Ó  \  }\  }}}	 d|vr|dz  }Œt1        | |«      r|dz  }Œ'|j                  |dt
        d   id¬«      }d|_        t5        |j6                  |«      \  }}}|s|}t9        | ||||«      r|dz  }n|dz  }| j;                  «        t)        j*                  d«       |dz  dk(  sŒ±t        d|› dt-        |	«      › d|› d|› d|› �
«       ŒÕ | j=                  «        t        d|› d|› d |› d!�«       t        d"|› �«       y # t&        $ r1}t        d|
› d|› �«       t)        j*                  d«       Y d }~�Œ€d }~ww xY w# t&        $ r#}|dz  }t        d|d d › d|› �«       Y d }~Œëd }~ww xY w)#Nr   r   )rS   r   z[session] list page HTTP z
, cookies=ÚD00004D00003r   z[jxlc-col1432] total=z
 records, z pages, scanning ra   z  [WARN] page z: é   gš™™™™™Ù?z[jxlc-col1432] collected z list itemsr   zjxlc.gov.cnrT   z  [ERR] é(   g333333Ó?é   z  [ú/z] new=z dup=z err=z[jxlc-col1432] DONE: +z new, z dup, z erru   æ–°å¢ž: )r#   ÚrequestsÚSessionrƒ   ÚLIST_URLrX   r;   Ústatus_codeÚlistÚcookiesÚkeysrt   ÚPER_PAGEÚminÚ	MAX_PAGESÚranger_   rp   Úextendr:   ÚtimeÚsleepr
   r	   r/   rY   rŒ   rZ   rC   ÚcommitÚclose)r"   r[   Úr0ÚINFOTYPErs   Úpage1_itemsÚ_Útotal_pagesÚpagesÚ	all_itemsÚpgrh   ri   rB   Ú	new_countÚ	dup_countÚ	err_countÚidxr<   ro   Údate_strr^   Úd_titler>   rˆ   s                            r   ÚmainrÌ   à   sú  € Ü‹:€DÜ×ÑÓ €Gð 
�‰”X¨´g¸lÑ6KÐ'LÐVXˆÓ	Y€BÜ	Ð% b§n¡nÐ%5°ZÄÀWÇ_Á_×EYÑEYÓE[Ó@\Ð?]Ð
^Ô_à€HÜ% g¨xÓ8Ñ€Eˆ;˜Øœ8Ñ# aÑ'¬HÑ4€KÜ”	˜;Ó'€EÜ	Ð! % ¨
°;°-Ð?PÐQVÐPWÐ
XÔYô �[Ó!€IØˆq‚yÜ˜˜5 1™9Ó%ò 	ˆBðÜ& w°¸"Ó=�	Ü" 9Ó-�Ø× Ñ  Ô'ô �J‰J�s�Oð	ô 
Ð%¤c¨)£nÐ%5°[Ð
AÔBð )*Ð)€IÐ)�	˜IÜ'0°¸AÓ'>ò aÑ#ˆÑ#ˆe�S˜(ð	0à CÑ'Ø˜Q‘�	ØÜ�d˜CÔ Ø˜Q‘�	ØØ—;‘;˜s¨\¼7À<Ñ;PÐ,QÐ[]�;Ó^ˆDØ#ˆDŒMÜ)5°d·i±iÀÓ)GÑ&ˆG�W˜hÙØ#�Ü˜4 ¨#¨x¸ÔAØ˜Q‘‘	à˜Q‘�	ð 	�‰ŒÜ�
‰
�3ŒØ�‰8�q‹=Ü�C˜�u˜Aœc )›nÐ-¨V°I°;¸eÀIÀ;ÈeÐT]ÐS^Ð_Õ`ð1að4 	‡J�J„LÜ	Ð" 9 +¨V°I°;¸fÀYÀKÈtÐ
TÔUÜ	ˆH�Y�KÐ
 Õ!øôK ò Ü˜ r d¨"¨Q¨CÐ0Ô1Ü—
‘
˜1—’ûðûô6 ò 	0Ø˜‰NˆIÜ�H˜U 3 B˜Z˜L¨¨1¨#Ð.×/Ñ/ûð	0ús=   Ã()IÅ	JÅ'JÅ9AJÉ	JÉ%&JÊJÊ	KÊ"K Ë KÚ__main__)*Ú__doc__Úosr'   Úsysr   rº   ÚhtmlÚhtml_modr   Úurllib.parser   r®   Úbs4r   r   r   r·   r;   Úgetenvr   r�   r°   rW   rµ   ÚnowÚstrftimeÚCUTOFF_DATErX   r6   r7   r8   r#   r+   r/   rC   r_   rp   rt   rŒ   r…   rÌ   Ú__name__© r   r   ú<module>rÛ      sþ   ðñ÷ 4× 3× 3Ý Ý  Û Ý òñ ˜Ÿ™  ˜Ó%€	Ù Ð! ) Ð-Ô .à
ˆ"�)‰)�KÐ!6Ó
7€Ø €Ø1€ØÐ-Ñ-€
Ø€Øˆx�|‰|‹~×&Ñ& zÓ2€ð @Ø(ØFñ€ð 7€	Ø€Ø€
òòògòò8ò$ò#ò$ò<2(òj;"ðz ˆzÒÙ…Fð r   