Ë
    ¡Š£j3&  ã                   ó¦  — 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Zd dlmZmZ d dlm	Z	 d dl
mZ  e j                  dd«      ZdZdZd	Z ej"                  «        ed
¬«      z
  j%                  d«      ZdddddœZh d£Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r7 eej>                  «      dkD  rej>                  d   dk(  r e«        y e«        yy)é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)ÚurljoinÚ	SEARCH_DBz/root/search.dbu   å¤§è§‚åŒº-é€šçŸ¥å…¬å‘Šzhttps://www.aqdgq.gov.cnz-https://www.aqdgq.gov.cn/zwdt/tzgg/index.htmliG  )Údaysz%Y-%m-%dzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.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.9zhttps://www.aqdgq.gov.cn/)z
User-AgentÚAcceptzAccept-LanguageÚReferer>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr6   ÚoutÚwalks     €€€ú /root/gov_crawler/crawl_aqdgq.pyrD   zbody_text.<locals>.walk0   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r:   z\n{3,}z

)ÚreÚbs4r6   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr6   rC   rD   s      @@@rE   Ú	body_textrO   (   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrF   c                 óî   — dd l }t        |«      D ]?  }	 |j                  | t        d¬«      }d|_        |j
                  dk(  r|j                  c S ŒA y #  ||dz
  k  rt        j                  d«       Y ŒdxY w)Nr   é   )ÚheadersÚtimeoutzutf-8éÈ   é   é   )	ÚrequestsÚrangeÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚtimeÚsleep)ÚurlÚretriesrW   ÚiÚrs        rE   Úfetchrd   C   st   € ÛÜ�7‹^ò ˆð	Ø—‘˜S¬'¸2�Ó>ˆAØ ˆAŒJØ�}‰} Ò#Ø—v‘v’ð $ð	ð øð	Ø�7˜Q‘;ŠÜ—
‘
˜1”üs   ”9AÁA4c                 óF  — g }t        | d«      }|j                  dt        j                  d«      ¬«      }|s|S |j	                  d«      D ]Ô  }|j                  d«      }|sŒ|j                  dd«      j                  «       }|s|j                  d	¬
«      }|j                  dd«      j                  «       }|r|j                  d«      rŒt        t        |«      }|j                  dd¬«      }	|	r|	j                  d	¬
«      nd}
|sŒ»|sŒ¾|
sŒÁ|j                  |||
f«       ŒÖ |S )z3Parse list page, return list of (title, url, date).úhtml.parserr   Údoc_list©Úclass_r   ÚaÚtitler5   T©rK   ÚhrefÚ
javascriptÚspanÚdate)r   ÚfindrG   ÚcompileÚfind_allrY   rK   Úget_textÚ
startswithr   ÚBASE_URLr=   )ÚhtmlÚitemsÚsoupr   r   rj   rk   rm   r`   Ú	span_daterp   s              rE   Ú
parse_listr{   P   s  € à€EÜ˜˜}Ó-€DØ	�‰�4¤§
¡
¨;Ó 7ˆÓ	8€BÙØˆà�k‰k˜$Óò -ˆØ�G‰G�C‹LˆÙØØ—‘�g˜rÓ"×(Ñ(Ó*ˆÙØ—J‘J T�JÓ*ˆEØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙ�t—‘ |Ô4ØÜ”h Ó%ˆà—G‘G˜F¨6�GÓ2ˆ	Ù1:ˆy×!Ñ!¨Ð!Ô-Àˆâ’SšTØ�L‰L˜%  dÐ+Õ,ð!-ð$ €LrF   c                 ó  — t        | d«      }|j                  dd¬«      }|rt        |«      nd}t        j                  dd|«      j                  «       }d}d}|j                  dd	¬«      }|r}|j                  d
d¬«      D ]g  }|j                  d¬«      }	t        j                  d|	«      }
|
r|
j                  d«      }d|	v sŒCt        j                  dd|	«      j                  «       }Œi g }g }|j                  dd¬«      }|s|j                  dd¬«      }|�rN|j                  D ]†  }t        |t        «      r%|j                  «       }	|	sŒ&|j                  |	«       Œ8|j                  dv r t        |«      }	|	sŒT|j                  |	«       Œf|j                  dk(  sŒv|j                  d«       Œˆ |j                  dt        j                  dt        j                   «      ¬«      D ]�  }t#        t$        |j'                  dd«      «      }|j                  d¬«      xs1 t(        j*                  j-                  |«      j/                  d«      d   }|sŒk|sŒn|j                  ||dœ«       Œƒ dj1                  |«      j                  «       }|||||fS )zParse detail page.rf   r   Ú	newstitlerh   r5   z\s+ú r   Únewsinforo   ÚspTrl   z!(\d{4}-\d{2}-\d{2}\s*\d{2}:\d{2})rU   u   æ�¥æº�u   ^æ�¥æº�[ï¼š:]?\s*zj-fontContentÚnewscontnet)r   r   r0   r9   rj   z$\.(doc|docx|pdf|xls|xlsx|xlsm)(\?|$))rm   rm   ú?r   )r`   r8   r:   )r   rq   rO   rG   rJ   rK   rs   rt   ÚsearchÚgroupr;   r<   r>   r=   r8   rr   ÚIr   rv   rY   ÚosÚpathÚbasenameÚsplitrI   )rw   r`   ry   Útitle_elrk   rp   ÚsourceÚinfor€   ÚtxtÚdmÚcontent_partsÚattachmentsÚcontrL   Úa_tagÚatt_urlÚatt_nameÚcontent_texts                      rE   Úparse_detailr–   l   sO  € ä˜˜}Ó-€Dð �y‰y˜ kˆyÓ2€HÙ#+ŒI�hÔ°€Eä�F‰F�6˜3 Ó&×,Ñ,Ó.€Eð €DØ€FØ�9‰9�U :ˆ9Ó.€DÙØ—-‘- ¨t�-Ó4ò 	GˆBØ—+‘+ D�+Ó)ˆCÜ—‘Ð?ÀÓEˆBÙØ—x‘x “{�Ø˜3ŠÜŸ™Ð 4°b¸#Ó>×DÑDÓF‘ð	Gð €MØ€Kà�9‰9�U ?ˆ9Ó3€DÙØ�y‰y˜ }ˆyÓ5ˆâØ—-‘-ò 
	)ˆBÜ˜"œcÔ"Ø—h‘h“j�ÚØ!×(Ñ(¨Õ-Ø—‘Ð3Ñ3Ü “m�ÚØ!×(Ñ(¨Õ-Ø—‘˜D“Ø×$Ñ$ RÕ(ð
	)ð —]‘] 3¬R¯Z©ZÐ8_Ôac×aeÑaeÓ-f�]Ógò 	GˆEÜœh¨¯	©	°&¸"Ó(=Ó>ˆGØ—~‘~¨D�~Ó1Ò\´R·W±W×5EÑ5EÀgÓ5N×5TÑ5TÐUXÓ5YÐZ[Ñ5\ˆHÚš8Ø×"Ñ"¨7¸HÑ#EÕFð		Gð —9‘9˜]Ó+×1Ñ1Ó3€LØ�,  f¨kÐ9Ð9rF   c                 ó”  — t        j                  t        «      }|j                  d«       |j	                  «       }d}d}| D ]b  \  }}}}}	}
|sŒ|r|d d n|}|j                  d|f«       |j                  «       r|dz  }Œ?|j                  d|||t        ||	|
d|f	«       |dz  }Œd |j                  «        |j                  «        ||fS )NzPRAGMA busy_timeout=5000r   rT   ú'SELECT id FROM gov_raw WHERE page_url=?rU   úŽINSERT INTO gov_raw (title, page_url, publish_date, site_name, content, source_url, attachments, category, summary) VALUES (?,?,?,?,?,?,?,?,?)õ   æ”¿åºœå…¬å‘Š)	Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchoneÚ	SITE_NAMEÚcommitÚclose)rx   ÚconnÚcÚ	new_countÚ
skip_countrk   r`   rp   Úcontentr‹   Ú	atts_jsonÚsummarys               rE   Ú
push_to_dbr«   ¢   sÜ   € Ü�?‰?œ7Ó#€DØ‡L�LÐ+Ô,Ø�‰‹€AØ€IØ€Jà8=ò Ñ4ˆˆs�D˜' 6¨9ÙØÙ#*�'˜$˜3‘-°ˆØ	�	‰	Ð;¸c¸VÔDØ�:‰:Œ<Ø˜!‰OˆJØØ	�	‰	ð ]Ø�C˜œy¨'°6¸9ÀnÐV]Ð^ô	
ð 	�Q‰‰	ðð 	‡K�K„MØ‡J�J„LØ�jÐ Ð rF   c                  ó¾  — t        dt        › d�«       t        t        «      } | st        d«       y t	        | «      }t        dt        |«      › d�«       g }|D ]$  \  }}}|t        k\  sŒ|j                  |||f«       Œ& t        dt        |«      › d�«       g }t        |«      D ]Ÿ  \  }\  }}}|dz   dz  d	k(  rt        d
|dz   › dt        |«      › �«       t        |«      } | rLt        | |«      \  }}	}
}}|s|}|
s|}
|rt        j                  |d¬«      nd}|j                  |||
|	||f«       t        j                  d«       Œ¡ |j                  d„ d¬«       |D ������cg c]  \  }}}}}}||||||f‘Œ }}}}}}}t        |«      \  }}t        dt        › d�«       t        dt        |«      › �«       t        d|› �«       t        d|› �«       y c c}}}}}}w )Nú[u   ] å¼€å§‹çˆ¬å�–õ     âš ï¸� èŽ·å�–åˆ—è¡¨å¤±è´¥õ
     åˆ—è¡¨: õ    æ�¡u     è¿‘3å¹´: rU   é
   r   u
     è¯¦æƒ…: ú/F©Úensure_asciiú[]ç      à?c                 ó   — | d   S )NrV   © )Úxs    rE   ú<lambda>zmain.<locals>.<lambda>Þ   s
   €  a¨¡d€ rF   T)ÚkeyÚreversez
[u   ] å®Œæˆ�u
     å¤„ç�†: õ
     æ–°å¢ž: u
     è·³è¿‡: )Úprintr¡   rd   ÚLIST_URLr{   ÚlenÚ	THRESHOLDr=   Ú	enumerater–   ÚjsonÚdumpsr^   r_   Úsortr«   )rw   rx   Ú	all_itemsrk   r`   rp   Údetail_resultsrb   Úd_titler¨   Úd_dater‹   Úattsr©   r   r   r‘   ÚsrcÚ
push_itemsr¦   r§   s                        rE   r    r    º   sù  € Ü	ˆAŒiˆ[˜Ð
'Ô(ô ”‹?€DÙÜÐ+Ô,Øä�tÓ€EÜ	ˆJ”s˜5“z�l $Ð
'Ô(à€IØ!ò 1Ñˆˆs�DØ”9ÓØ×Ñ˜e S¨$Ð/Õ0ð1ô 
ˆKœ˜I›Ð' tÐ
,Ô-ð €NÜ!*¨9Ó!5ò ÑˆÑˆE�3˜Øˆa‰C�2‰:˜Š?Ü�J˜q ™s˜e 1¤S¨£^Ð$4Ð5Ô6ä�S‹zˆÙÜ5AÀ$ÈÓ5LÑ2ˆG�W˜f f¨dÙ e˜GÙ D˜6Ù@DœŸ
™
 4°eÕ<È$ˆIØ×!Ñ! 7¨C°¸À&È)Ð"TÔUä�
‰
�3�ðð ×Ñ™N°DÐÔ9ØUc×dÓdÑ5Q°R¸¸bÀ$ÈÈT�2�s˜B  c¨4Ò0Ðd€JÕdÜ& zÓ2Ñ€Iˆzä	ˆC”	ˆ{˜(Ð
#Ô$Ü	ˆJ”s˜>Ó*Ð+Ð
,Ô-Ü	ˆJ�y�kÐ
"Ô#Ü	ˆJ�z�lÐ
#Õ$ù÷ es   Å#Gc                  óì  — t        dt        › d�«       t        t        «      } | st        d«       yt	        | «      }t        dt        |«      › d�«       t        j                  t        «      }|j                  «       }d}d}|D ]¾  \  }}}|t        k  rŒ|j                  d|f«       |j                  «       r|d	z  }Œ:t        |«      } | sŒHt        | |«      \  }	}
}}}|	s|}	|s|}|rt        j                  |d
¬«      nd}|
r|
dd n|	}|j                  d|	||t        |
||d|f	«       |d	z  }t!        j"                  d«       ŒÀ |j%                  «        |j'                  «        t        d|› d|› �«       y)u   å¢žé‡� - å�ªçˆ¬ç¬¬1é¡µr­   u   ] å¢žé‡�çˆ¬å�–r®   Nr¯   r°   r   r˜   rU   Fr³   rµ   rT   r™   rš   r¶   r½   u
   , è·³è¿‡: )r¾   r¡   rd   r¿   r{   rÀ   r›   rœ   r�   rŸ   rÁ   rž   r    r–   rÃ   rÄ   r^   r_   r¢   r£   )rw   rx   r¤   r¥   ÚnewÚskiprk   r`   rp   rÈ   r¨   rÉ   r‹   rÊ   r©   rª   s                   rE   ÚincrementalrÐ   ç   ss  € ä	ˆAŒiˆ[˜Ð
'Ô(Ü”‹?€DÙÜÐ+Ô,Øä�tÓ€EÜ	ˆJ”s˜5“z�l $Ð
'Ô(ä�?‰?œ7Ó#€DØ�‰‹€AØ
€CØ€Dà!ò Ñˆˆs�DØ”)ÒØØ	�	‰	Ð;¸c¸VÔDØ�:‰:Œ<Ø�A‰IˆDØä�S‹zˆÙØä1=¸dÀCÓ1HÑ.ˆ�˜& &¨$Ù %˜Ù �vÙ<@”D—J‘J˜t°%Õ8Àdˆ	Ù#*�'˜$˜3‘-°ˆà	�	‰	ð ]Ø�c˜6¤9¨g°v¸yÈ.ÐZaÐbô	
ð 	ˆq‰ˆÜ�
‰
�3�ð/ð2 	‡K�K„MØ‡J�J„LÜ	ˆJ�s�e˜: d VÐ
,Õ-rF   Ú__main__rU   z--incremental)é   ) r†   ÚsysrG   r^   rÃ   r›   r   r   rH   r   Úurllib.parser   Úgetenvr�   r¡   rv   r¿   ÚnowÚstrftimerÁ   rZ   r@   rO   rd   r{   r–   r«   r    rÐ   Ú__name__rÀ   Úargvr¸   rF   rE   ú<module>rÚ      sà   ðã 	ð÷ (× '× 'ß (Ý Ý  à
ˆ"�)‰)�KÐ!2Ó
3€Ø$€	Ø%€Ø:€ØˆX�\‰\‹^™i¨UÔ3Ñ3×=Ñ=¸jÓI€	ð DØeØ'Ø*ñ	€ò*€òó6òò84:òl!ò0+%òZ+.ðZ ˆzÒÙ
ˆ3�8‰8ƒ}�qÒ˜SŸX™X a™[¨OÒ;Ù�á�ð	 rF   