Ë
    V_ŠjA  ã            	       ó4  — 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mZ ddl	m
Z
 ddlmZmZ dZdZdZej"                  j%                  d	d
«      ZdZdZdddddœZdd„Zd„ Zd d„Zd„ Zd„ Zd„ Zd d„Zedk(  r”ddlZej@                  D � cg c]/  } | jC                  d«      sŒ e"| jG                  dd«      d   «      ‘Œ1 c} Z$e$xs4 ej@                  dd D � cg c]  } | jK                  «       sŒ e"| «      ‘Œ c} Z$e$re$d   ndZ& ee&¬«       yyc c} w c c} w )!uO   ä¸Šé¥¶å¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Š çˆ¬è™« (é�™æ€�åˆ†é¡µ zwgk_xxgklist_N.shtml)
é    N)ÚdatetimeÚdate)ÚBeautifulSoup)ÚThreadPoolExecutorÚas_completedzhttps://www.zgsr.gov.cnz5https://www.zgsr.gov.cn/zgsr/gsgg/zwgk_xxgklist.shtmlz8https://www.zgsr.gov.cn/zgsr/gsgg/zwgk_xxgklist_{}.shtmlÚDB_PATHz/root/search.dbu"   ä¸Šé¥¶å¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šé   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zUtext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8zhttps://www.zgsr.gov.cn/)z
User-AgentÚAcceptzAccept-LanguageÚRefererc                 óþ   — t        d«      D ]N  }	 t        j                  | |t        ¬«      }d|_        |j
                  dk(  r|c S t        j                  d«       ŒP y #  |dk  rt        j                  d«       Y ŒpxY w)Né   )ÚtimeoutÚheaderszutf-8éÈ   é   )ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtimeÚsleep)Úurlr   ÚattÚrs       ú/root/gov_crawler/crawl_zgsr.pyÚfetchr      sm   € Ü�Q‹xò 	ˆð	Ü—‘˜S¨'¼7ÔCˆAØ ˆAŒJØ�}‰} Ò#Ø’Ü�J‰J�q�Mð	ð øð	Ø�QŠwÜ—
‘
˜1”üs   �3AÁAÁA<c                 ól  — t        | d«      }g }|j                  d«      D ]‘  }|j                  d«      }|j                  d«      }|sŒ(|j                  d«      sŒ:|d   j	                  «       }|j                  d«      r	t        |z   n|}|r|j                  d¬«      nd	}|j                  ||f«       Œ“ |S )
Núhtml.parserzul#doclist lizdiv.zcwj-wj > a[href]zspan.span_dateÚhrefú/T©ÚstripÚ )	r   ÚselectÚ
select_oner   r$   Ú
startswithÚBASEÚget_textÚappend)	ÚhtmlÚsoupÚitemsÚliÚa_tagÚdate_tagr!   Úfull_urlÚdate_strs	            r   Úparse_list_pager4   %   s®   € Ü˜˜}Ó-€DØ€EØ�k‰k˜/Ó*ò /ˆØ—‘Ð5Ó6ˆØ—=‘=Ð!1Ó2ˆÚ�U—Y‘Y˜vÕ&Ø˜‘=×&Ñ&Ó(ˆDØ&*§o¡o°cÔ&:”t˜d’{ÀˆHÙ8@�x×(Ñ(¨tÐ(Ô4ÀbˆHØ�L‰L˜( HÐ-Õ.ð/ð €Ló    é   c                 ó´  — g }t        d| dz   «      D ]©  }|dk(  rt        nt        j                  |«      }t	        d|› d|› �d¬«       t        |«      }|st	        d|› d�d¬«       ŒUt        |j                  «      }|st	        d|› d�d¬«        n-t	        d	t        |«      › d
�d¬«       |j                  |«       Œ« t	        dt        |«      › d�d¬«       |S )Né   u     åˆ—è¡¨é¡µ ú: T©Úflushu     ç¬¬u   é¡µèŽ·å�–å¤±è´¥u   é¡µæ— æ•°æ�®ï¼Œå�œæ­¢u       æ‰¾åˆ° u    æ�¡u
   å…±æ”¶é›† u    æ�¡URL)
r   ÚLIST_URLÚPAGE_URLÚformatÚprintr   r4   ÚtextÚlenÚextend)Ú	max_pagesÚall_urlsÚpnr   r   r.   s         r   Úcollect_urlsrF   3   sÙ   € Ø€HÜ�A�y 1‘}Ó%ò ˆØ š'�h¤x§¡°rÓ':ˆÜ�˜R˜D  3 %Ð(°Õ5Ü�#‹JˆÙÜ�E˜"˜˜_Ð-°TÕ:ØÜ §¡Ó'ˆÙÜ�E˜"˜Ð2Ð3¸4Õ@ÙÜ�œC ›J˜< tÐ,°DÕ9Ø�‰˜Õðô 
ˆJ”s˜8“}�o WÐ
-°TÕ:Ø€Or5   c                 óž  — t        | «      }|sy t        |j                  d«      }|j                  d«      }|r|j	                  d¬«      nd}|s'|j                  d«      }|r|j	                  d¬«      nd}d}|j                  d«      D ]@  }|j	                  d	d¬«      }d
|v sŒ|j                  d«      }	|	r|	j	                  d¬«      } n d}
|j                  d«      }|rb|j                  d«      }|rDg }|j                  d«      D ]  }|j                  t        |«      «       Œ dj                  |«      }
nt        |«      }
g }|j                  d«      }|rq|j                  d«      D ]]  }|d   j                  «       }|j	                  d¬«      }|sŒ+|sŒ.|j                  d«      r	t        |z   n|}|j                  ||dœ«       Œ_ |||
|dœS )Nr    z	div.zwtitTr#   r%   Ú	ucaptitleõ	   æ— æ ‡é¢˜z
ul.ztfl liú u   æˆ�æ–‡æ—¥æœŸzspan:last-childzdiv.zwcon.clearfix#zoomconÚUCAPCONTENTÚpú
zdiv.article-appendixsza[href]r!   r"   )Únamer   )ÚtitleÚpublish_dateÚcontentÚattachments)r   r   r@   r'   r*   Úfindr&   Úfind_allr+   ÚstrÚjoinr$   r(   r)   )r   r   r-   Ú	title_tagrO   ÚucaprP   r/   r@   Ú	date_spanÚcontent_htmlÚcontent_divÚcontent_partsrL   rR   Úappendix_divÚar!   ÚfnameÚ	full_hrefs                       r   Úextract_detailra   F   sÖ  € Üˆc‹
€AÙØÜ˜Ÿ™ Ó/€Dà—‘ Ó,€IÙ.7ˆI×Ñ TÐÔ*¸R€EÙØ�y‰y˜Ó%ˆÙ-1�—‘ D�Ô)°{ˆà€LØ�k‰k˜,Ó'ò ˆØ�{‰{˜3 dˆ{Ó+ˆØ˜TÒ!ØŸ™Ð&7Ó8ˆIÙØ(×1Ñ1¸Ð1Ó=�Ùðð €LØ—/‘/Ð">Ó?€KÙØ×Ñ Ó.ˆÙØˆMØ—]‘] 3Ó'ò -�Ø×$Ñ$¤S¨£VÕ,ð-àŸ9™9 ]Ó3‰Lä˜{Ó+ˆLà€KØ—?‘?Ð#:Ó;€LÙØ×$Ñ$ YÓ/ò 	FˆAØ�V‘9—?‘?Ó$ˆDØ—J‘J T�JÓ*ˆEÚšØ+/¯?©?¸3Ô+?œD 4šKÀT�	Ø×"Ñ"¨E¸)Ñ#DÕEð	Fð Ø$ØØ"ñ	ð r5   c           	      óL  — | \  }}t        |«      }|sy |d   xs d}|d   xs |}|d   }|d   }|rt        |j                  «       «      dk  r	d|› d|› d	�}|r|D ]  }|d
|d   › d|d   › d�z  }Œ |||||r|d d ndj                  dd«      j                  «       t        d|dœS )NrO   rI   rP   rQ   rR   é   z<p><a href="z">z</a></p>u   

[é™„ä»¶: rN   z](r   ú)r   r%   rM   rJ   u   å…¬ç¤ºå…¬å‘Š)rO   Úpage_urlrQ   rP   ÚsummaryÚ	site_nameÚcategoryrR   )ra   rA   r$   ÚreplaceÚ	SITE_NAME)	Úargsr   r3   ÚdetailrO   rP   rQ   rR   r   s	            r   Úprocess_itemrm   x   sî   € Ø�M€CˆÜ˜CÓ €FÙØØ�7‰OÒ*˜{€EØ˜.Ñ)Ò5¨X€LØ�YÑ€GØ˜Ñ'€Ká”c˜'Ÿ-™-›/Ó*¨RÒ/Ø    R¨ w¨hÐ7ˆáØò 	DˆCØ˜ s¨6¡{ m°2°c¸%±j°\ÀÐCÑC‰Gð	Dð ØØØ$Ù%,�G˜D˜S‘M°"×=Ñ=¸dÀCÓH×NÑNÓPÜØ"Ø"ñ	ð 	r5   c                 ó€  — t        j                  t        «      }d}d}| D ][  }|sŒ|d   rt        j                  |d   d¬«      nd}	 |j                  d|d   |d   |d	   |d
   |d   |d   |d   |f«       |dz  }Œ] |j                  «        |j                  «        ||fS # t         j                  $ r |dz  }Y Œœw xY w)Nr   rR   F)Úensure_asciir%   zÉ
                INSERT OR REPLACE INTO gov_raw
                (title, page_url, content, publish_date, summary, site_name, category, attachments)
                VALUES (?,?,?,?,?,?,?,?)
            rO   re   rQ   rP   rf   rg   rh   r8   )	Úsqlite3Úconnectr   ÚjsonÚdumpsÚexecuteÚIntegrityErrorÚcommitÚclose)r.   ÚdbÚinsertedÚupdatedÚitemÚatt_jsons         r   Ú
save_to_dbr}   ”   sè   € Ü	�‰œÓ	!€BØ€HØ€GØò ˆÙØØJNÈ}ÒJ]”4—:‘:˜d =Ñ1ÀÕFÐceˆð	Ø�J‰Jð ð
 �W‘˜t JÑ/°°i±Ø�^Ñ$ d¨9¡oØ�[Ñ! 4¨
Ñ#3°Xðô	ð ˜‰M‰Hðð" ‡I�I„KØ‡H�H„JØ�WÐÐøô	 ×%Ñ%ò 	Ø�q‰LŠGð	ús   Á4B"Â"B=Â<B=c           	      ó&  — t        dt        › d�d¬«       t        d| › d�d¬«       t        | «      }t        dt        |«      › d�d¬«       g }t	        t
        ¬	«      5 }|D �ci c]  }|j                  t        |«      |“Œ }}t        |«      D ]V  }	 |j                  «       }|r)|j                  |«       t        d
|d   d d › d�d¬«       n||   d   }t        d|› �d¬«       ŒX 	 d d d «       t        dt        |«      › dt        |«      › �d¬«       t        |«      \  }
}t        d|
› d|› �d¬«       t        dd¬«       |
|t        |«      fS c c}w # t        $ r%}	||   d   }t        d|› d|	› �d¬«       Y d }	~	Œñd }	~	ww xY w# 1 sw Y   Œ xY w)Nz=== u    çˆ¬è™« ===Tr:   u
   çˆ¬å�–å‰� u    é¡µu   å¼€å§‹çˆ¬å�–è¯¦æƒ… (u    æ�¡)...)Úmax_workersu     âœ… rO   é(   z...r   u     â�Œ r9   u   è¯¦æƒ…æ��å�–å®Œæˆ�: r"   u   å…¥åº“: æ–°å¢žu	    / æ›´æ–°u   === å®Œæˆ� ===)r?   rj   rF   rA   r   ÚMAX_WORKERSÚsubmitrm   r   Úresultr+   Ú	Exceptionr}   )rC   ÚurlsÚresultsÚpoolÚuÚfuturesÚfÚresr   Úery   rz   s               r   Úmainr�   ®   s¤  € Ü	ˆD”�˜;Ð
'¨tÕ4Ü	ˆJ�y�k Ð
&¨dÕ3Ü˜	Ó"€DÜ	Ð ¤ T£ ¨8Ð
4¸DÕAØ€GÜ	¬Ô	4ð 7¸Ø<@ÖA°q�4—;‘;œ|¨QÓ/°Ñ2ÐAˆÐAÜ˜gÓ&ò 	7ˆAð
7Ø—h‘h“j�ÙØ—N‘N 3Ô'Ü˜F 3 w¡<°°Ð#4Ð"5°SÐ9ÀÖFà! !™* Q™-�CÜ˜F 3 %˜.°Õ5øñ	7÷7ô 
Ð ¤ W£ ¨a´°D³	¨{Ð
;À4ÕHÜ" 7Ó+Ñ€HˆgÜ	ˆN˜8˜* I¨g¨YÐ
7¸tÕDÜ	Ð
 $Õ'Ø�Wœc '›lÐ*Ð*ùò# Bøô ò 7Ø˜a‘j ‘m�Ü˜˜s˜e 2 a SÐ)°×6Ò6ûð7ú÷7ð 7úsI   ÁFÁ#EÂFÂAEÃ%FÅFÅ	FÅE?Å:FÅ?FÆFÆFÚ__main__z--pages=ú=r8   )rC   )é   )r6   )'Ú__doc__Úosrp   Úrer   r   rr   r   r   Úbs4r   Úconcurrent.futuresr   r   r)   r<   r=   Úenvironr   r   rj   r�   r   r   r4   rF   ra   rm   r}   r�   Ú__name__ÚsysÚargvr(   ÚintÚsplitÚ_pages_argsÚisdigitÚpages)r^   s   0r   ú<module>rŸ      s  ðñç ,× ,× ,ß #Ý ß ?à €ØB€ØE€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø0€	Ø€ð DØeØ0Ø)ñ	€óòóò&/òdò8ó4+ð6 ˆzÒÛØ47·H±HÖY¨qÀÇÁÈZÕ@X‘3�q—w‘w˜s A“ qÑ)Õ*ÒY€KØÒN°#·(±(¸1¸2°,Ö!N¨QÀ!Ç)Á)Å+¡# a¥&Ò!N€KÙ)ˆK˜ŠN¨q€EÙ�5Öð ùâYùÚ!Ns   ÂDÂ$DÃDÃ/
D