Ë
    ¸¬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dad„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u}  
crawl_njghes_tzgg.py - å�—äº¬å›½çŽ¯ç§‘æŠ€-å…¬ç¤ºé€šçŸ¥
CMS: è‡ªå®šä¹‰PHP + Vue.js
åˆ—è¡¨: /html/web/news/gongshitongzhi/index.html  â†’ list-{N}.html (4é¡µ)
      ul > li > a + h3(æ ‡é¢˜) + div.date-year(æœˆ-æ—¥+å¹´)
è¯¦æƒ…: /html/web/news/gongshitongzhi/{id}.html
æ ‡é¢˜: <title>æ ‡ç­¾ (å�–" - "ä¹‹å‰�)
æ—¥æœŸ: æ­£æ–‡ä¸­ "æ—¶é—´ï¼šYYYY-MM-DD"
å†…å®¹: æ­£æ–‡æ–‡æœ¬ (åŽ»å¤´åŽ»å°¾)
é    N)ÚBeautifulSoupz/root/search.dbzhttps://www.njghes.comu   å�—äº¬å›½çŽ¯-å…¬ç¤ºé€šçŸ¥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.36c                 ó  — t         €7t        j                  «       a t         j                  j	                  t
        «       	 t         j                  | dd¬«      }d|_        |j                  S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   F)ÚtimeoutÚverifyzutf-8zERR:)ÚSESSIONÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚencodingÚtextÚ	ExceptionÚprint)ÚurlÚrÚes      ú&/root/gov_crawler/crawl_njghes_tzgg.pyr   r   !   sq   € ä€Ü×"Ñ"Ó$ˆÜ�‰×ÑœwÔ'ðÜ�K‰K˜ R°ˆKÓ6ˆØˆŒ
Ø�v‰vˆøÜò Ü��Q�CˆjÔÜûðús   ¿*A* Á*	BÁ3BÂBc                 ód   — | dk(  rt         dz   }t        |«      S t         d| › d�z   }t        |«      S )Né   z(/html/web/news/gongshitongzhi/index.htmlz#/html/web/news/gongshitongzhi/list-z.html)ÚBASE_URLr   )Úpage_nor   s     r   Úfetch_list_pager   /   s>   € Ø�!‚|ÜÐCÑCˆô ˆs‹8€Oô Ð>¸w¸iÀuÐMÑMˆÜˆs‹8€Oó    c                 ó  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      }|s|S |j                  dd¬«      D �]5  }|j                  d	«      }|j                  d
«      }|r|j                  d«      sŒ:|j                  dd«      j	                  «       }|r|j                  d¬«      nd}	|	s&|j                  dd«      xs |j                  d¬«      }	d}
|j                  dd¬«      }|rY|j                  dd¬«      }|j                  dd¬«      }|r1|r/|j                  d¬«      }|j                  d¬«      }|r	|r|› d|› �}
|j                  d«      r	t        |z   }|j                  ||	|
f«       �Œ8 |S )z)Extract (url, title, date) from list pageúhtml.parserÚdivÚnews_con©Úclass_ÚulÚliF)Ú	recursiveÚaÚh3ÚhrefÚ T©ÚstripÚtitlez	date-yearÚdateÚyearú-ú/)	r   ÚfindÚfind_allr   r,   Úget_textÚ
startswithr   Úappend)ÚhtmlÚitemsÚsoupr!   r$   r%   r'   r(   r)   r-   Údate_strÚ	date_yearÚdate_divÚyear_divÚmmddÚyyyys                   r   Ú
parse_listr@   7   sˆ  € à€EÜ˜˜}Ó-€Dà�y‰y˜ zˆyÓ2€HÙØˆØ	�‰�tÓ	€BÙØˆà�k‰k˜$¨%ˆkÓ0ó .ˆØ�G‰G�C‹LˆØ�W‰W�T‹]ˆÙ˜Ÿ™˜fœØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙ+-�—‘ $�Ô'°2ˆÙØ—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEð ˆØ—G‘G˜E¨+�GÓ6ˆ	ÙØ —~‘~ e°F�~Ó;ˆHØ —~‘~ e°F�~Ó;ˆHÙ™HØ×(Ñ(¨tÐ(Ó4�Ø×(Ñ(¨tÐ(Ó4�Ù™DØ"&  q¨¨Ð/�Hà�?‰?˜3ÔÜ˜d‘?ˆDØ�‰�d˜E 8Ð,Ö-ð1.ð2 €Lr   c                 ó²  — t        | d«      }d}|j                  d«      }|r:|j                  d¬«      }|j                  d«      }|r|d   j	                  «       n|}d}|j                  d«      }|r7t        j                  d	|j                  «       «      }	|	r|	j                  d
«      }d}
|j                  dd¬«      }|rrg }|j                  d«      D ](  }|j                  d¬«      }|sŒ|j                  |«       Œ* |rdj                  |«      }
n |j                  d¬«      j	                  «       }
|
rt        j                  dd|
«      }
|
r|
d d nd}|||
|fS )Nr   r*   r-   Tr+   z - r   Úbodyu   æ—¶é—´ï¼š(\d{4}-\d{2}-\d{2})r   r    Úcon_idr"   Úpz

ú
)Ú	separatorz&nbsp;éÈ   )r   r2   r4   Úsplitr,   ÚreÚsearchÚgroupr3   r6   ÚjoinÚsub)r7   r   r9   r-   Ú	title_tagÚrawÚpartsr:   rB   ÚmÚcontentrC   Ú
paragraphsrD   ÚtxtÚsummarys                   r   Úextract_detailrV   _   sW  € Ü˜˜}Ó-€Dð €EØ—	‘	˜'Ó"€IÙØ× Ñ  tÐ Ó,ˆà—	‘	˜%Ó ˆÙ$)��a‘—‘Ô ¨sˆð €HØ�9‰9�VÓ€DÙÜ�I‰IÐ5°t·}±}³ÓGˆÙØ—w‘w˜q“zˆHð €GØ�Y‰Y�u XˆYÓ.€FÙØˆ
Ø—‘ Ó%ò 	'ˆAØ—*‘* 4�*Ó(ˆCÚØ×!Ñ! #Õ&ð	'ñ Ø—k‘k *Ó-‰Gð —o‘o°�oÓ5×;Ñ;Ó=ˆGñ Ü—&‘&˜ B¨Ó0ˆá&ˆg�d�s‰m¨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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   zcrawl_njghes_tzgg.pyr*   r   z  [DB ERROR] r   z: 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Ú	lastrowidr6   r   r   ÚcommitÚlenÚclose)Ú
items_datarZ   ÚconnÚcÚinsertedÚ	fts_batchr-   r:   rR   rU   Úpage_urlÚnew_idr   ÚridÚsites                  r   Ú
save_to_dbrp   Š   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Ð<RðTôð —[‘[ˆ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                  }d}t        d|dz   «      D �]7  }t        dt        j                  d«      › d|› d�dd¬«       t        |«      }|st        d«        nõt        |«      }|st        d«        nÛt        t        |«      › d�d¬«       g }|D ]X  \  }	}
}t        |	«      }|sŒt!        ||	«      \  }}}}|j#                  |xs |
|xs ||||	f«       t        j$                  d«       ŒZ t'        |«      }||z  }t        d|› dt        |«      › d|› d�d¬«       |j                  r�Œ|dk(  s�Œt        |«      dkD  s�Œ-t        d«        n t        d«       t        d|› d �«       t        d!t        › �«       y )"Nr   u   çˆ¬è™«)Údescriptionz--pagesr   u   çˆ¬å�–é¡µæ•°(å…±4é¡µ))ÚtypeÚdefaultÚhelpz--fullÚ
store_trueu   å…¨é‡�çˆ¬å�–)Úactionru   é   ú[z%H:%M:%Su   ] ç¬¬u   é¡µ...ú T)ÚendÚflushu   å¤±è´¥ï¼Œå�œæ­¢u   æ— æ•°æ�®ï¼Œå�œæ­¢rY   )r|   g333333Ó?u     å…¥åº“r1   u   æ�¡ (ç´¯è®¡ú)u      å…¨éƒ¨å·²å­˜åœ¨ï¼Œå¢žé‡�å�œæ­¢u   
===== å®Œæˆ� =====u   æ–°å¢žå…¥åº“: u    æ�¡u   ç«™ç‚¹: )ÚargparseÚArgumentParserr`   Úadd_argumentÚintÚ
parse_argsÚfullÚpagesÚranger   ÚtimeÚstrftimer   r@   re   r   rV   r6   Úsleeprp   )r~   ÚparserÚargsÚ	max_pagesÚ	total_newr   r7   r8   Úbatchr)   r-   r:   Údetail_htmlÚdtÚddrR   rU   Úsaveds                     r   Úmainr’   ³   sç  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°QÐ=TÐÔUØ
×Ñ˜¨¸NÐÔKØ×ÑÓ€Dà—Y’Y‘ D§J¡J€IØ€Iä˜˜I¨™MÓ*ó ˆÜ�”$—-‘- 
Ó+Ð,¨E°'°¸&ÐAÀsÐRVÕWÜ˜wÓ'ˆÙÜÐ#Ô$Ùä˜4Ó ˆÙÜÐ&Ô'ÙÜ”�U“�˜CÐ ¨Õ-àˆØ%*ò 	Ñ!ˆD�%˜Ü˜d›)ˆ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
   rI   ÚsysÚosr†   Úbs4r   r\   r   r`   rb   ra   r   r	   r   r   r@   rV   rp   r’   Ú__name__© r   r   ú<module>rš      s†   ðñ	ó Û 	Û 
Û 	Û Ý à
€Ø#€Ø'€	Ø€Ø€ð ð  Dð€ð €òòò%òP(-òV&òR)"ðX ˆzÒÙ…Fð r   