Ë
    ì¾jÃ  ã                   ó†  — d Z ddlZddlZddlZddlZddlmZ ddlmZ dZ	dZ
dZdZd	Zd
ZdddœZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdefd„Zedk(  rpdej4                  v rdndZedk(  rdneZ eej4                  «      dkD  r2ej4                  d   j=                  «       r eej4                  d   «      Z eedk(  e¬«       yy)u$   æ¹˜ä¹¡ç»�æµŽå¼€å�‘åŒº - é€šçŸ¥å…¬å‘Šé    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu"   æ¹˜ä¹¡ç»�æµŽå¼€å�‘åŒº-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šu	   æ¹˜ä¹¡å¸‚z)http://www.xxs.gov.cn/1941/1943/1975/4193é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Languagez·INSERT OR IGNORE INTO gov_raw
    (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)c                  ó|   — dd l } | j                  t        «      }|j                  d«       |j                  d«       |S )Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r   Úconns     ú#/root/gov_crawler/crawl_xxs_tzgg.pyÚinit_dbr      s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 ó¤   — | j                   }|d d j                  «       }d|v sd|v sd|v r|j                  dd¬«      S |j                  dd¬«      S )	NiÐ  s   gb2312s   gbks
   charset=gbÚgbkÚreplace)Úerrorszutf-8)ÚcontentÚlowerÚdecode)ÚrÚrawÚ	raw_lowers      r   Údecode_respr       s[   € Ø
�)‰)€CØ�E�T�
× Ñ Ó"€IØ�IÑ ¨9Ñ!4¸ÈÑ8RØ�z‰z˜%¨	ˆzÓ2Ð2Ø�:‰:�g iˆ:Ó0Ð0r   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_mdr   (   s   € äˆu‹:Ðr   c                 óp  — g }t        «       }| j                  g d¢d¬«      D �]  }t        |«      |v rŒ|j                  t        |«      «       |j                  dk(  r t        |«      }|sŒI|j                  |«       Œ[|j                  dk(  rJ|j                  dd«      }|sŒ|j                  d«      st        ||«      n|}|j                  d	|› d
�«       Œ´|j                  dk(  sŒÄ|j                  dd¬«      }|sŒÚt        j                  dd|«      }|j                  |«       �Œ dj                  |«      S )N)Úpr   ÚimgT©Ú	recursiver   r"   ÚsrcÚ Úhttpz![](ú)r!   ú ©Ústripz[^\S\n]+z

)ÚsetÚfind_allÚidÚaddÚnamer   ÚappendÚgetÚ
startswithr   Úget_textÚreÚsubÚjoin)	Úcontent_divÚ
detail_urlÚpartsÚ	processedÚelÚmdr%   Úfull_srcÚtxts	            r   Úextract_contentr@   ,   s  € Ø€EÜ“€IØ×"Ñ"Ò#8ÀDÐ"ÓIó "ˆÜˆb‹6�YÑØØ�‰”b˜“fÔØ�7‰7�gÒÜ˜R“ˆBÚØ—‘˜RÕ Ø�W‰W˜ÒØ—&‘&˜ Ó#ˆCÚØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜t H :¨QÐ/Õ0Ø�W‰W˜‹^Ø—+‘+˜c¨�+Ó.ˆCÚÜ—f‘f˜[¨#¨sÓ3�Ø—‘˜SÖ!ð#"ð$ �;‰;�uÓÐr   c                 óœ  ‡‡— g }| j                  dd¬«      D ]±  }|d   j                  «       j                  «       Št        ˆfd„dD «       «      sŒ9|j	                  d¬«      xs ‰j                  d«      d	   }|d   j                  d
«      st        ||d   «      n|d   Št        ˆfd„|D «       «      rŒž|j                  |‰dœ«       Œ³ |S )NÚaT)ÚhrefrC   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Úendswith)Ú.0ÚextrC   s     €r   ú	<genexpr>z&extract_attachments.<locals>.<genexpr>H   s   øè ø€ Òh cˆt�}‰}˜S×!Ñhùs   ƒ)z.pdfz.docz.docxz.xlsz.xlsxz.rarz.zipr*   ú/éÿÿÿÿr'   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)ÚurlN© )rF   rB   Úfull_urls     €r   rH   z&extract_attachments.<locals>.<genexpr>K   s   øè ø€ ÒA°�q˜‘x 8Õ+ÑAùs   ƒ)r0   rL   )	r-   r+   r   Úanyr4   Úsplitr3   r   r1   )Úsoupr9   ÚattachmentsÚa_tagr0   rN   rC   s        @@r   Úextract_attachmentsrT   D   sÆ   ù€ Ø€KØ—‘˜s¨�Ó.ò DˆØ�V‰}×"Ñ"Ó$×*Ñ*Ó,ˆÜÓhÐ-gÔhÕhØ—>‘>¨�>Ó-ÒD°·±¸C³ÀÑ1DˆDØAFÀvÁ×AYÑAYÐZ`ÔAa”w˜z¨5°©=Ô9ÐglÐmsÑgtˆHÜÓA°[ÔAÕAØ×"Ñ"¨D¸Ñ#BÕCðDð Ðr   c                 ó°  — | dk(  r
t         › d�}nt         › d| dz
  › d�}	 t        j                  |t        d¬«      }|j	                  «        t        |«      }t        |d
«      }g }|j                  d«      }|s!t        d| › d�t        j                  ¬	«       g S |j                  dd¬«      D ]Ó  }|j                  d«      }	t        |	«      dk  rŒ#|	d   j                  d«      }
|
r|
j                  d«      sŒK|
d   j                  «       }|
j                  dd«      xs |
j!                  d¬«      }|sŒ‡t        |	«      dkD  r|	d   j!                  d¬«      nd}t#        t         dz   |«      }|j%                  |||dœ«       ŒÕ t        d| › dt        |«      › d�«       |S # t
        $ r-}t        d| › d|› �t        j                  ¬	«       g cY d }~S d }~ww xY w)Né   z
/index.htmz/index_z.htmé   ©ÚheadersÚtimeoutz  [ERR] page z: ©Úfileúhtml.parserz div.xxgk-right table.table tbodyz  [WARN] page z: no table foundÚtrFr#   Útdé   rB   rC   Útitler&   Tr*   é   rI   )ra   rL   Údatez  Page z items)ÚBASE_URLÚrequestsr2   ÚHEADERSÚraise_for_statusÚ	ExceptionÚprintÚsysÚstderrr   r   Ú
select_oner-   ÚlenÚfindr+   r4   r   r1   )Úpage_numrL   r   ÚeÚhtmlrQ   Úitemsr   r^   ÚtdsrS   rC   ra   Údate_strr9   s                  r   Úextract_list_pageru   P   sÅ  € Ø�1‚}Ü�
˜*Ð%‰ä�
˜' (¨1¡* ¨TÐ2ˆðÜ�L‰L˜¤g°rÔ:ˆØ	×ÑÔô
 �q‹>€DÜ˜˜}Ó-€DØ€Eà�O‰OÐ>Ó?€EÙÜ�˜x˜jÐ(8Ð9ÄÇ
Á
ÕKØˆ	à�n‰n˜T¨UˆnÓ3ò LˆØ�k‰k˜$ÓˆÜˆs‹8�aŠ<ØØ�A‘—‘˜CÓ ˆÙ˜EŸI™I fÔ-ØØ�V‰}×"Ñ"Ó$ˆØ—	‘	˜' 2Ó&ÒD¨%¯.©.¸t¨.Ó*DˆÙØÜ25°c³(¸Q²,�3�q‘6—?‘?¨�?Ô.ÀBˆÜœX¨™^¨TÓ2ˆ
Ø�‰˜u¨ZÀÑJÕKðLô 
ˆG�H�:˜R¤ E£
˜|¨6Ð
2Ô3Ø€Løô; ò Ü�˜h˜Z r¨!¨Ð-´C·J±JÕ?Ø�	ûðús    ,F Æ	GÆ("GÇ
GÇGc                 ó  — 	 t        j                  | t        d¬«      }|j                  «        t        |«      }t        |d«      }d}|j                  dd¬«      }|r%|j                  d«      }|r|j                  d	¬
«      }|s<|j                  d«      }|r)|j                  d	¬
«      }t        j                  dd|«      }d}|rf|j                  d«      }	|	rS|	j                  d«      D ]?  }
|
j                  d	¬
«      }t        j                  d|«      }|sŒ.|j                  d«      } n |s<|j                  dd	¬
«      }t        j                  d|«      }|r|j                  d«      }d}|j                  dd¬«      }|rt        || «      }t        || «      }t!        |j#                  «       «      dk  r<d|xs | j%                  d«      d   › d| › d�}|r|D ]  }|d|d   › d|d   › d�z  }Œ |}||||fS # t        $ r	 d d d g fcY S w xY w)NrW   rX   r]   r&   ÚdivÚxlnk)Úclass_Úh2Tr*   ra   u   [-_|]\s*é€šçŸ¥å…¬å‘Š.*$Úh6Úspanu(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})rV   r)   zxl-xqnré   ú[rI   rJ   z](r(   u   

é™„ä»¶ï¼š[r0   rL   )re   r2   rf   rg   rh   r   r   rn   r4   r5   r6   r-   ÚsearchÚgroupr@   rT   rm   r+   rP   )rL   r   rq   rQ   ra   rx   rz   Úmtrt   r{   r|   r?   ÚmÚbodyr   ÚxqnrrR   ÚfallbackrB   s                      r   Úextract_detailr†   y   s%  € ð$Ü�L‰L˜¤g°rÔ:ˆØ	×ÑÔô �q‹>€DÜ˜˜}Ó-€Dð €EØ�9‰9�U 6ˆ9Ó*€DÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEÙØ�Y‰Y�wÓˆÙØ—K‘K d�KÓ+ˆEÜ—F‘FÐ5°r¸5ÓAˆEð €HÙØ�Y‰Y�t‹_ˆÙØŸ™ FÓ+ò �Ø—m‘m¨$�mÓ/�Ü—I‘IÐIÈ3ÓO�ÚØ Ÿw™w q›z�HÙðñ Ø�}‰}˜S¨ˆ}Ó-ˆÜ�I‰IÐAÀ4ÓHˆÙØ—w‘w˜q“zˆHð €GØ�9‰9�U 9ˆ9Ó-€DÙÜ! $¨Ó,ˆä% d¨CÓ0€Kä
ˆ7�=‰=‹?Ó˜bÒ Ø�uÒ2 §	¡	¨#£¨rÑ 2Ð3°2°c°U¸!Ð<ˆÙØ ò F�Ø˜n¨Q¨v©Y¨K°r¸!¸E¹(¸À1ÐEÑE‘ðFàˆà�(˜G [Ð0Ð0øôg ò $Ø�T˜4 Ð#Ò#ð$ús   ‚,G4 Ç4HÈHFc                 ó”  — t        «       }|j                  «       }d}d}d}t        d|dz   «      D �]%  }t        |«      }|t	        |«      z  }|s �n|D ]ô  }	|	d   }
|j                  d|
f«       |j                  «       rŒ,t        |
«      \  }}}}|s|dz  }ŒD|xs |	d   }|xs |	d   }|rt        j                  |d¬«      nd	}|r|d d
 n|j                  «       }|s|}	 |j                  t        t        |
|
|j                  «       |||t        |t        f
«       |j                  «        |j                   dkD  r|dz  }| sŒî|dk\  sŒô n | s�Œ|dk\  s�Œ& n |j+                  «        t%        dt        › �«       t%        d|› d|› d|› �«       |S # t"        $ r-}t%        d|› �t&        j(                  ¬«       |dz  }Y d }~Œƒd }~ww xY w)Nr   rV   rL   z)SELECT id FROM gov_raw WHERE page_url = ?ra   rc   F)Úensure_asciir&   éÈ   z  DB error: r[   é   z
[DONE] z  New: z
, Errors: z, Listed total: )r   ÚcursorÚrangeru   rm   r
   Úfetchoner†   ÚjsonÚdumpsr+   ÚSQLÚ	SITE_NAMEÚCATEGORYÚGROUPÚcommitÚrowcountrh   ri   rj   rk   Úclose)Ú	test_modeÚ	max_pagesr   ÚcurÚtotalr   Útotal_listedÚpnrr   ÚitemrL   ra   rt   r   rR   Úfinal_titleÚ
final_dateÚatt_jsonÚsummaryrp   s                       r   Úcrawlr¢   ³   sä  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€FØ€Lä�A�y 1‘}Ó%ó )ˆÜ! "Ó%ˆØœ˜E›
Ñ"ˆáÚàò 	ˆDØ�u‘+ˆCØ�K‰KÐCÀcÀVÔLØ�|‰|Œ~Øä4BÀ3Ó4GÑ1ˆE�8˜W kÙØ˜!‘�ØàÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJÙFQ”t—z‘z +¸EÕBÐWYˆHÙ(/�w˜t ‘}°[×GÑGÓIˆGÙØ%�ð
Ø—‘œCÜ˜s C¨×):Ñ):Ó)<¸jØ˜W¤h°¼%ð"ô ð —‘”Ø—<‘< !Ò#Ø˜Q‘J�Eò
 ˜U a›ZÙð?	óB ˜ !œÙðS)ðV 	‡J�J„LÜ	ˆI”i�[Ð
!Ô"Ü	ˆG�E�7˜* V HÐ,<¸\¸NÐ
KÔLØ€Løô ò Ü˜ Q CÐ(¬s¯z©zÕ:Ø˜!‘•ûðús   Ã!AFÆ	GÆ#GÇGÚ__main__z--testÚtestÚfullrŠ   rV   )r—   r˜   ) Ú__doc__rŽ   r5   rj   re   Úbs4r   Úurllib.parser   r	   r‘   r’   r“   rd   Ú	MAX_PAGESrf   r�   r   r   r   r@   rT   ru   r†   r¢   Ú__name__ÚargvÚmodeÚmax_prm   ÚisdigitÚintrM   r   r   ú<module>r°      sì   ðá *ß × Ý Ý  à
€Ø0€	Ø€Ø€Ø6€Ø€	ð DØ'ñ€ð
-€ò
ò1òòò0	ò&òR71ðt  Yó 5ðp ˆzÒØ §¡Ñ)‰6¨v€DØ˜’‰A Y€EÙ
ˆ3�8‰8ƒ}�qÒ˜SŸX™X a™[×0Ñ0Ô2Ù�C—H‘H˜Q‘KÓ ˆÙ	�T˜V‘^°Ö6ð r   