Ë
    ¸¬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mZ dZdZ	dZ
dZdZd	d
iZe	dz   Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u™  
crawl_njls_jrsgggs.py - æº§æ°´åŒº-æ‹›æŠ•æ ‡ä¿¡æ�¯
CMS: TRS createPageHTMLé�™æ€�åˆ†é¡µ
åˆ—è¡¨: /jrs/gggs/index.html  â†’  /jrs/gggs/index_{N-1}.html (100é¡µ)
      ul.zlm_2020_dqlm_list > li > a[title] + p (date YYYY-MM-DD)
è¯¦æƒ…: /jrs/gggs/YYYYMM/t{id}.html
æ ‡é¢˜: div.lsxl_2020 (å�–"å�‘å¸ƒæ—¶é—´"å‰�æ–‡æœ¬)
æ—¥æœŸ: div.release_time (å�‘å¸ƒæ—¶é—´ï¼šYYYY-MM-DD)
å†…å®¹: div.view.TRS_UEDITOR æˆ– div.doc_con
é    N)ÚBeautifulSoupz/root/search.dbzhttp://www.njls.gov.cnu   æº§æ°´åŒº-æ‹›æŠ•æ ‡ä¿¡æ�¯u   æ±Ÿè‹�u   å…¶ä»–z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z/jrs/gggs/index_{page}.htmlc                  ól   — t        j                  «       } | j                  j                  t        «       | S )N)ÚrequestsÚSessionÚheadersÚupdateÚHEADERS)Úsessions    ú'/root/gov_crawler/crawl_njls_jrsgggs.pyÚget_sessionr   !   s'   € Ü×ÑÓ €GØ‡O�O×Ñœ7Ô#Ø€Nó    c                 óè   — |dk(  r
t         dz   }nt        j                  |¬«      }	 | j                  |d¬«      }d|_        |j
                  S # t        $ r}t        d|› d|› �«       Y d	}~y	d	}~ww xY w)
zCFetch list page. page_no 0-based: 0=index.html, 1=index_1.html, ...r   ú
/jrs/gggs/)Úpageé   ©Útimeoutúutf-8z  [ERROR] page ú: N)ÚBASE_URLÚPAGE_TPLÚformatÚgetÚencodingÚtextÚ	ExceptionÚprint)r
   Úpage_noÚurlÚrÚes        r   Úfetch_list_pager"   '   sr   € à�!‚|Ü˜Ñ%‰ä�o‰o 7ˆoÓ+ˆðØ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆøÜò Ü� ˜y¨¨1¨#Ð.Ô/Üûðús   §%A Á	A1ÁA,Á,A1c                 ó¾  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  dd¬«      D �]   }|j                  d«      }|j                  d	«      }|r|j                  d
«      sŒ:|j                  d
d«      j	                  «       }|j                  dd«      j	                  «       xs |j                  d¬«      }d}	|D ]=  }
t        j                  d|
j                  d¬«      «      }|sŒ,|j                  d«      }	 n |j                  d«      rt        dz   |dd z   }n|j                  d«      r	t        |z   }|j                  |||	f«       �Œ# |S )z)Extract (url, title, date) from list pageúhtml.parserÚulÚzlm_2020_dqlm_list©Úclass_ÚliF©Ú	recursiveÚaÚpÚhrefÚ ÚtitleT©Ústripú(\d{4}-\d{2}-\d{2})é   z./r   é   Nú/)r   ÚfindÚfind_allr   r2   Úget_textÚreÚmatchÚgroupÚ
startswithr   Úappend)ÚhtmlÚitemsÚsoupr%   r)   r,   Úp_dater.   r0   Údate_strr-   Úms               r   Ú
parse_listrE   6   sL  € à€EÜ˜˜}Ó-€DØ	�‰�4Ð 4ˆÓ	5€BÙØˆØ�k‰k˜$¨%ˆkÓ0ó .ˆØ�G‰G�C‹LˆØ—‘˜SÓ!ˆÙ˜Ÿ™˜fœØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆØ—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆØˆØò 	ˆAÜ—‘Ð/°·±À$°Ó1GÓHˆAÚØŸ7™7 1›:�Ùð		ð �?‰?˜4Ô Ü˜lÑ*¨T°!°"¨XÑ5‰DØ�_‰_˜SÔ!Ü˜d‘?ˆDØ�‰�d˜E 8Ð,Ö-ð%.ð& €Lr   c                 ó˜   — 	 | j                  |d¬«      }d|_        |j                  S # t        $ r}t	        d|› �«       Y d }~y d }~ww xY w)Nr   r   r   zERR:)r   r   r   r   r   )r
   r   r    r!   s       r   Úfetch_detailrG   S   sJ   € ðØ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆøÜò Ü��Q�CˆjÔÜûðús   ‚%( ¨	A	±AÁA	c                 ó–  — t        | d«      }d}|j                  dd¬«      }|r>|j                  d¬«      }|j                  d«      }|d	kD  r|d | j                  «       }n|}|s%|j                  d
«      }|r|j                  d¬«      }d}|j                  dd¬«      }	|	r7t	        j
                  d|	j                  «       «      }
|
r|
j                  d«      }d}|j                  dd¬«      xs |j                  dd¬«      }|r¤g }|j                  ddgd¬«      D ]y  }|j                  dk(  r>|j                  d«      rŒ$|j                  d¬«      }|sŒ9|dvsŒ>|j                  |«       ŒP|j                  dk(  sŒ`|j                  t        |«      «       Œ{ dj                  |«      }|rt	        j                  dd|«      d d nd}||||fS )Nr$   r/   ÚdivÚ	lsxl_2020r'   Tr1   u   å�‘å¸ƒæ—¶é—´r   Úh1Úrelease_timer3   r4   ÚviewÚdoc_conr-   Útabler*   )õ   Â r/   z

z<[^>]+>éÈ   )r   r7   r9   r2   r:   Úsearchr<   r8   ÚnameÚfind_parentr>   ÚstrÚjoinÚsub)r?   r   rA   r0   Ú	title_divÚtxtÚidxrK   rC   Údate_divrD   ÚcontentÚcontent_divÚpartsÚelemr   Úsummarys                    r   Úextract_detailra   ]   sÉ  € Ü˜˜}Ó-€Dð €EØ—	‘	˜%¨�	Ó4€IÙØ× Ñ  tÐ Ó,ˆà�h‰h�~Ó&ˆØ�Š7Ø˜˜�I—O‘OÓ%‰EàˆEÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEð €HØ�y‰y˜ ~ˆyÓ6€HÙÜ�I‰IÐ,¨h×.?Ñ.?Ó.AÓBˆÙØ—w‘w˜q“zˆHð €GØ—9‘9˜U¨6�9Ó2ò 8Ø—Y‘Y˜u¨Y�YÓ7ð áØˆØ×(Ñ(¨#¨w¨À4Ð(ÓHò 	(ˆDØ�y‰y˜CÒØ×#Ñ# GÔ,ØØ—}‘}¨4�}Ó0�Ú˜D¨Ò4Ø—L‘L Õ&Ø—‘˜gÓ%Ø—‘œS ›YÕ'ð	(ð —+‘+˜eÓ$ˆá7>Œb�f‰f�Z  WÓ-¨d¨sÑ3ÀB€GØ�(˜G WÐ,Ð,r   c                 óø  — dd l }|j                  t        d¬«      }|j                  «       }d}g }| D ]†  \  }}}}	}
	 |j	                  d|
f«       |j                  «       rŒ.|j	                  d|
|t        |||	|
dt        t        df«       |j                  }|r|j                  ||t        |	xs df«       |d	z  }Œˆ |j                  «        |rK|D ]  \  }}}}		 |j	                  d||||	f«       Œ  |j                  «        t        dt        |«      › d�«       |j                  «        |S # t        $ r}t        d
|d d › d|› �«       Y d }~�Œd }~ww xY w# t        $ r}t        d|› d|› �«       Y d }~Œ¥d }~ww xY w)Nr   é
   r   z)SELECT id FROM gov_raw WHERE page_url = ?zíINSERT INTO gov_raw 
                   (page_url, title, site_name, publish_date, content, summary,
                    source_url, category, industry, group_name, script_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)u   æ”¿åºœå…¬å‘Šzcrawl_njls_jrsgggs.pyr/   r4   z  [DB ERROR] r   r   zVINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)z  [FTS ERROR] id=u     FTSå�Œæ­¥: õ   æ�¡)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚfetchoneÚ	SITE_NAMEÚINDUSTRYÚGROUPÚ	lastrowidr>   r   r   ÚcommitÚlenÚclose)Ú
items_datare   ÚconnÚcÚinsertedÚ	fts_batchr0   rC   r\   r`   Úpage_urlÚnew_idr!   ÚridÚsites                  r   Ú
save_to_dbr{   �   s›  € ÛØ�?‰?œ7¨Bˆ?Ó/€DØ�‰‹€AØ€HØ€IØ7Aò 5Ñ3ˆˆx˜ '¨8ð	5Ø�I‰IÐAÀHÀ;ÔOØ�z‰zŒ|ØØ�I‰Ið?ð ˜5¤)¨X°wÀØ˜>¬8´UÐ<SðUôð —[‘[ˆFÙØ× Ñ  &¨%´¸GºMÀrÐ!JÔKØ˜‰M‰Hð!5ð& 	‡K�K„MÙØ)2ò 	6Ñ%ˆC�˜˜gð6Ø—	‘	ØlØ˜%  wÐ/õð	6ð 	�‰ŒÜ�œc )›nÐ-¨SÐ1Ô2Ø‡J�J„LØ€Oøô ò 	5Ü�M %¨¨ * ¨R°¨sÐ3×4Ò4ûð	5ûô ò 6ÜÐ)¨#¨¨b°°Ð4×5Ñ5ûð6ús6   ¼#D*Á AD*ÃEÄ*	EÄ3EÅEÅ	E9ÅE4Å4E9c            
      óô  — dd l } | j                  t        › d�¬«      }|j                  dt        dd¬«       |j                  dd	d
¬«       |j                  «       }|j                  rdn|j                  }t        «       }d}t        d|«      D �]<  }t        dt        j                  d«      › d|dz   › d�dd¬«       t        ||«      }|st        d«        nöt        |«      }|st        d«        nÜt        t        |«      › d�d¬«       g }	|D ]Y  \  }
}}t!        ||
«      }|sŒt#        ||
«      \  }}}}|	j%                  |xs ||xs ||||
f«       t        j&                  d«       Œ[ t)        |	«      }||z  }t        d|› dt        |	«      › d|› d�d¬«       |j                  r�Œ|dk(  s�Œ"t        |	«      dkD  s�Œ2t        d«        n t        d«       t        d |› d!�«       t        d"t        › �«       y )#Nr   u   çˆ¬è™«)Údescriptionz--pagesé   u   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--fullÚ
store_trueu   å…¨é‡�çˆ¬å�–)Úactionr�   iç  ú[z%H:%M:%Su   ] ç¬¬r4   u   é¡µ...ú T)ÚendÚflushu   å¤±è´¥ï¼Œå�œæ­¢u   æ— æ•°æ�®ï¼Œå�œæ­¢rd   )r‡   g333333Ó?u     å…¥åº“r6   u   æ�¡ (ç´¯è®¡ú)u      å…¨éƒ¨å·²å­˜åœ¨ï¼Œå¢žé‡�å�œæ­¢u   
===== å®Œæˆ� =====u   æ–°å¢žå…¥åº“: u    æ�¡u   ç«™ç‚¹: )ÚargparseÚArgumentParserrk   Úadd_argumentÚintÚ
parse_argsÚfullÚpagesr   Úranger   ÚtimeÚstrftimer"   rE   rp   rG   ra   r>   Úsleepr{   )r‰   ÚparserÚargsÚ	max_pagesr
   Ú	total_newr   r?   r@   Úbatchr.   r0   rC   Údetail_htmlÚdtÚddr\   r`   Úsaveds                      r   Úmainr�   ¶   sò  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°Q¸^ÐÔLØ
×Ñ˜¨¸NÐÔKØ×ÑÓ€Dà—y’y‘ d§j¡j€IÜ‹m€GØ€Iä˜˜IÓ&ó ˆÜ�”$—-‘- 
Ó+Ð,¨E°'¸!±)°¸FÐCÈÐTXÕYÜ˜w¨Ó0ˆÙÜÐ#Ô$Ùä˜4Ó ˆÙÜÐ&Ô'ÙÜ”�U“�˜CÐ ¨Õ-àˆØ%*ò 	Ñ!ˆD�%˜Ü& w°Ó5ˆKÙØÜ'5°kÀ4Ó'HÑ$ˆB��G˜WØ�L‰L˜"š+  r¢~¨X°wÀÈÐNÔOÜ�J‰J�s�Oð	ô ˜5Ó!ˆØ�UÑˆ	Ü�˜˜˜q¤ U£ ¨K¸	°{À!ÐDÈDÕQØ�yŒy˜U aœZ¬C°«J¸¬NÜÐ4Ô5Ùð7ô: 
Ð Ô"Ü	ˆN˜9˜+ TÐ
*Ô+Ü	ˆH”Y�KÐ
 Õ!r   Ú__main__)Ú__doc__r   r:   ÚsysÚosr‘   Úbs4r   rg   r   rk   rm   rl   r	   r   r   r"   rE   rG   ra   r{   r�   Ú__name__© r   r   ú<module>r¥      s�   ðñ	ó Û 	Û 
Û 	Û Ý à
€Ø#€Ø'€	Ø€Ø€ð ð  Dð€ð Ð3Ñ3€òòòò:ò--ò`&òR*"ðZ ˆzÒÙ…Fð r   