Ë
    ¸¬ujb  ã                   óš   — 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)us  
crawl_zhuhai_spqgs.py - ç� æµ·å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å®¡æ‰¹å‰�å…¬ç¤º
CMS: NFCMS (å¹¿ä¸œæ”¿åºœç½‘ç«™ç¾¤)
åˆ—è¡¨: /zxfw/xmgsgg/spqgs/index.html (page1) â†’ index_{N}.html (pages 2+, 96é¡µ)
      div.wendangListC > li > a[href] + date prefix
è¯¦æƒ…: /zxfw/xmgsgg/spqgs/content/post_XXXXXXX.html
æ ‡é¢˜: <meta ArticleTitle>
æ—¥æœŸ: <meta PubDate>
æ­£æ–‡: div.xxxq_text_cont > p
é    N)ÚBeautifulSoupz/root/search.dbzhttps://ssthjj.zhuhai.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_zhuhai_spqgs.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é   z/zxfw/xmgsgg/spqgs/index.htmlz/zxfw/xmgsgg/spqgs/index_z.html)ÚBASE_URLr   )Úpage_nor   s     r   Úfetch_list_pager   0   s?   € Ø�!‚|Ü�
Ð7Ð8ˆô ˆs‹8€Oô �
Ð3°G°9¸EÐBˆÜˆs‹8€Oó    c                 ó~  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D �]  }|j                  dd¬«      }|sŒ|j                  d	d
«      j	                  «       }|rd|vrŒA|j                  d¬«      }t        j                  d|«      }|r|j                  d«      nd
}	t        j                  dd
|«      j	                  «       }
|
s|j                  d¬«      }
|j                  d«      rn&|j                  d«      r
t        |z   }nt        › d|› �}|j                  ||
|	f«       �Œ |S )z)Extract (url, title, date) from list pageúhtml.parserÚdivÚwendangListC©Úclass_ÚliÚaT)Úhrefr&   Ú Úpost_©Ústripú(\d{4}-\d{2}-\d{2})r   z^\d{4}-\d{2}-\d{2}Úhttpú/)r   ÚfindÚfind_allr   r*   Úget_textÚreÚsearchÚgroupÚsubÚ
startswithr   Úappend)ÚhtmlÚitemsÚsoupÚwlr$   r%   r&   ÚtxtÚ
date_matchÚdate_strÚtitles              r   Ú
parse_listr?   8   s7  € à€EÜ˜˜}Ó-€Dà	�‰�5 ˆÓ	0€BÙØˆà�k‰k˜$Óó .ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙ�w dÑ*Øà�k‰k ˆkÓ%ˆä—Y‘YÐ5°sÓ;ˆ
Ù*4�:×#Ñ# AÔ&¸"ˆô —‘Ð,¨b°#Ó6×<Ñ<Ó>ˆÙØ—J‘J T�JÓ*ˆEà�?‰?˜6Ô"ØØ�_‰_˜SÔ!Ü˜d‘?‰Dä�Z˜q  Ð'ˆDà�‰�d˜E 8Ð,Ö-ð3.ð6 €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t        |«      }|
j                  |«       Œe|j                  d
k(  sŒu|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ÚPubDater+   r   r    Úxxxq_text_contr"   ÚpTr)   Útablez

ú
)Ú	separatorz&nbsp;éÈ   )r   r.   r   r*   r1   r2   r3   ÚchildrenrB   r0   r6   ÚstrÚjoinr4   )r7   r   r9   r>   Ú
meta_titler=   Úpubdate_metarD   ÚmÚtcÚpartsÚelr;   Útbl_htmlÚchildÚsummarys                   r   Úextract_detailrX   _   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Ð!1ˆÓ	2€BÚ	ØˆØ—+‘+ò 	1ˆBØ�w‰w˜#Š~Ø—k‘k¨�kÓ-�ÚØ—L‘L Õ%Ø—‘˜GÒ#ä˜r›7�Ø—‘˜XÕ&Ø—‘˜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_zhuhai_spqgs.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Ú	lastrowidr6   r   r   ÚcommitÚlenÚclose)Ú
items_datar]   ÚconnÚcÚinsertedÚ	fts_batchr>   r=   rD   rW   Úpage_urlÚnew_idr   ÚridÚsites                  r   Ú
save_to_dbrs   ”   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                  }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   çˆ¬å�–é¡µæ•°(å…±96é¡µ))ÚtypeÚdefaultÚhelpz--fullÚ
store_trueu   å…¨é‡�çˆ¬å�–(96é¡µ))Úactionrx   é`   ú[z%H:%M:%Su   ] ç¬¬u   é¡µ...ú T)ÚendÚflushu   è¯·æ±‚å¤±è´¥ï¼Œå�œæ­¢u   æ— æ•°æ�®ï¼Œå�œæ­¢r\   )r   g      à?u     å…¥åº“r-   u   æ�¡ (ç´¯è®¡ú)u      å…¨éƒ¨å·²å­˜åœ¨ï¼Œå¢žé‡�å�œæ­¢u   
===== å®Œæˆ� =====u   æ–°å¢žå…¥åº“: u    æ�¡u   ç«™ç‚¹: )ÚargparseÚArgumentParserrc   Úadd_argumentÚintÚ
parse_argsÚfullÚpagesÚranger   ÚtimeÚstrftimer   r?   rh   r   rX   r6   Úsleeprs   )r�   ÚparserÚargsÚ	max_pagesÚ	total_newr   r7   r8   Úbatchr&   r>   r=   Údetail_htmlÚdtÚddrD   rW   Úsaveds                     r   Úmainr•   ½   sè  € ÛØ×$Ñ$´I°;¸fÐ1EÐ$ÓF€FØ
×Ñ˜	¬°QÐ=UÐÔVØ
×Ñ˜¨Ð<QÐÔRØ×ÑÓ€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
   r1   ÚsysÚosr‰   Úbs4r   r_   r   rc   re   rd   r   r	   r   r   r?   rX   rs   r•   Ú__name__© r   r   ú<module>r�      s†   ðñ	ó Û 	Û 
Û 	Û Ý à
€Ø)€Ø'€	Ø€Ø€ð ð  Dð€ð €òòò$òN2-òj&òR)"ðX ˆzÒÙ…Fð r   