Ë
    ¸¬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)uo  
crawl_zmdgxq_tzgg.py - é©»é©¬åº—é«˜æ–°åŒº-å…¬ç¤ºå…¬å‘Š
CMS: è‡ªå®šä¹‰PHP (TRS UEditor)
åˆ—è¡¨: /zwyw/tzgg/ (page1 index.html) â†’ index_{N}.html (pages 2+, 15æ�¡/é¡µ)
      div.lis_list_part2_list > ul > li > a[href] + date
è¯¦æƒ…: /zwyw/tzgg/YYYYMM/tYYYYMMDD_NNNNN.html
æ ‡é¢˜: <meta ArticleTitle>
æ—¥æœŸ: <meta PubDate>
æ­£æ–‡: div.trs_editor_view.TRS_UEDITOR > p
é    N)ÚBeautifulSoupz/root/search.dbzhttps://www.zmdgxq.gov.cnu   é©»é©¬åº—é«˜æ–°åŒº-å…¬ç¤ºå…¬å‘Š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|_        |j                  S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né<   ©Útimeoutzutf-8zERR:)ÚSESSIONÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚencodingÚtextÚ	ExceptionÚprint)ÚurlÚrÚes      ú&/root/gov_crawler/crawl_zmdgxq_tzgg.pyr   r   "   so   € ä€Ü×"Ñ"Ó$ˆÜ�‰×ÑœwÔ'ðÜ�K‰K˜ RˆKÓ(ˆØˆŒ
Ø�v‰vˆøÜò Ü��Q�CˆjÔÜûðús   ¿)A) Á)	B
Á2BÂB
c                 ób   — | dk(  rt         › d�}t        |«      S t         › d| › d�}t        |«      S )Né   ú/zwyw/tzgg/z/zwyw/tzgg/index_z.html)ÚBASE_URLr   )Úpage_nor   s     r   Úfetch_list_pager   0   s>   € Ø�!‚|Ü�
˜+Ð&ˆô ˆs‹8€Oô �
Ð+¨G¨9°EÐ:ˆÜˆs‹8€Oó    c                 óÐ  — g }t        | d«      }|j                  dd„ ¬«      }|s|S |j                  dd¬«      D �](  }|j                  dd	«      j	                  «       }|j                  d¬
«      }|r|rt        |«      dk  rŒI|j                  d«      s|j                  d«      rŒl|j                  d«      rt        › d|dd › �}n9|j                  d«      rn'|j                  d«      rt        › |› �}nt        › d|› �}|j                  }|r|r|j                  «       n|}n|}t        j                  d|«      }	|	r|	j                  d«      nd	}
|j                  |||
f«       �Œ+ |S )z)Extract (url, title, date) from list pageúhtml.parserÚdivc                 ó   — | r| xr d| v S dS )NÚlis_list_part2_listF© )Úcs    r   ú<lambda>zparse_list.<locals>.<lambda>>   s   € Éq¨1Ò+KÐ1FÈ!Ð1K€ ÐV[€ r   ©Úclass_ÚaT)Úhrefr*   Ú ©Ústripé   ú#Ú
javascriptz./r   é   NÚhttpú/ú(\d{4}-\d{2}-\d{2})r   )r   ÚfindÚfind_allr   r-   Úget_textÚlenÚ
startswithr   ÚparentÚreÚsearchÚgroupÚappend)ÚhtmlÚitemsÚsoupÚllr)   r*   Útitler:   ÚptxtÚ
date_matchÚdate_strs              r   Ú
parse_listrG   8   s`  € à€EÜ˜˜}Ó-€Dð 
�‰�5Ñ![ˆÓ	\€BÙØˆà�[‰[˜ 4ˆ[Ó(ó .ˆØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆØ—
‘
 �
Ó&ˆÙ™D¤C¨£J°¢OØØ�?‰?˜3Ô 4§?¡?°<Ô#@Øð �?‰?˜4Ô Ü�Z˜{¨4°°¨8¨*Ð5‰DØ�_‰_˜VÔ$ØØ�_‰_˜SÔ!Ü�Z ˜vÐ&‰Dä�Z˜{¨4¨&Ð1ˆDð —‘ˆÙÙ(.�6—?‘?Ô$°E‰DàˆDÜ—Y‘YÐ5°tÓ<ˆ
Ù*4�:×#Ñ# AÔ&¸"ˆà�‰�d˜E 8Ð,Ö-ð7.ð: €Lr   c                 ó   — t        | d«      }d}|j                  dddi«      }|r |j                  dd«      j                  «       }d}|j                  dddi«      }|r;|j                  dd«      }t	        j
                  d|«      }|r|j                  d	«      }d}|j                  d
d¬«      }	|	�r(g }
|	j                  D ]ã  }|j                  dk(  r'|j                  d¬«      }|sŒ'|
j                  |«       Œ9|j                  dk(  r|
j                  t        |«      «       Œc|j                  d
k(  sŒs|j                  D ]b  }|j                  dk(  r'|j                  d¬«      }|sŒ'|
j                  |«       Œ9|j                  dk(  sŒI|
j                  t        |«      «       Œd Œå |
rdj                  |
«      }n |	j                  d¬«      j                  «       }|rt	        j                  dd|«      }|r|d d nd}||||fS )Nr    r+   ÚmetaÚnameÚArticleTitleÚcontentÚPubDater4   r   r!   Útrs_editor_viewr'   ÚpTr,   Útablez

ú
)Ú	separatorz&nbsp;éÈ   )r   r5   r   r-   r;   r<   r=   ÚchildrenrJ   r7   r>   ÚstrÚjoinÚsub)r?   r   rA   rC   Ú
meta_titlerF   Úpubdate_metarL   ÚmÚtcÚpartsÚelÚtxtÚchildÚsummarys                  r   Úextract_detailra   b   sØ  € Ü˜˜}Ó-€Dð €EØ—‘˜6 F¨NÐ#;Ó<€JÙØ—‘˜y¨"Ó-×3Ñ3Ó5ˆð €HØ—9‘9˜V f¨iÐ%8Ó9€LÙØ×"Ñ" 9¨bÓ1ˆÜ�I‰IÐ,¨gÓ6ˆÙØ—w‘w˜q“zˆHð €GØ	�‰�5Ð!2ˆÓ	3€BÚ	ØˆØ—+‘+ò 	1ˆBØ�w‰w˜#Š~Ø—k‘k¨�kÓ-�ÚØ—L‘L Õ%Ø—‘˜GÒ#à—‘œS ›WÕ%Ø—‘˜EÓ!àŸ[™[ò 1�EØ—z‘z SÒ(Ø#Ÿn™n°4˜nÓ8˜ÚØ!ŸL™L¨Õ-ØŸ™ wÓ.ØŸ™¤S¨£ZÕ0ñ1ð	1ñ" Ø—k‘k %Ó(‰Gà—k‘k¨D�kÓ1×7Ñ7Ó9ˆ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_zmdgxq_tzgg.pyr+   r   z  [DB ERROR] é   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Ú	lastrowidr>   r   r   Úcommitr8   Úclose)Ú
items_datarf   Úconnr%   ÚinsertedÚ	fts_batchrC   rF   rL   r`   Úpage_urlÚnew_idr   ÚridÚsites                  r   Ú
save_to_dbrz   –   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   çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpz--fullÚ
store_trueu   å…¨é‡�çˆ¬å�–)Úactionr   é2   ú[z%H:%M:%Su   ] ç¬¬u   é¡µ...ú T)ÚendÚflushu   è¯·æ±‚å¤±è´¥ï¼Œå�œæ­¢u   æ— æ•°æ�®ï¼Œå�œæ­¢re   )r†   g      à?u     å…¥åº“r3   u   æ�¡ (ç´¯è®¡ú)u      å…¨éƒ¨å·²å­˜åœ¨ï¼Œå¢žé‡�å�œæ­¢u   
===== å®Œæˆ� =====u   æ–°å¢žå…¥åº“: u    æ�¡u   ç«™ç‚¹: )ÚargparseÚArgumentParserrl   Úadd_argumentÚintÚ
parse_argsÚfullÚpagesÚranger   ÚtimeÚstrftimer   rG   r8   r   ra   r>   Úsleeprz   )rˆ   ÚparserÚargsÚ	max_pagesÚ	total_newr   r?   r@   Úbatchr*   rC   rF   Údetail_htmlÚdtÚddrL   r`   Úsaveds                     r   Úmainrœ   ¿   sæ  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°Q¸^ÐÔLØ
×Ñ˜¨¸NÐÔKØ×ÑÓ€Dà—i’i‘ T§Z¡Z€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
   r;   ÚsysÚosr�   Úbs4r   rh   r   rl   rn   rm   r   r	   r   r   rG   ra   rz   rœ   Ú__name__r$   r   r   ú<module>r£      s†   ðñ	ó Û 	Û 
Û 	Û Ý à
€Ø&€Ø-€	Ø€Ø€ð ð  Dð€ð €òòò'òT1-òh&òR)"ðX ˆzÒÙ…Fð r   