Ë
    ì¾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d„Zedk(  rdej2                  v Z ee¬«       yy)u   å¾�åœ©æ–°åŒº - å…¬ç¤ºå…¬å‘Šé    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu   å¾�åœ©æ–°åŒº-å…¬ç¤ºå…¬å‘Šu   å…¬ç¤ºå…¬å‘Šu   å¾�åœ©æ–°åŒºz*http://www.xwxq.gov.cn/xxxq/gsgg/gsgg.htmlé   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_xwxq_gsgg.pyÚinit_dbr      s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    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_contentr4   $   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)Úhrefr7   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)Úendswith)Ú.0Úextr7   s     €r   ú	<genexpr>z&extract_attachments.<locals>.<genexpr>@   s   øè ø€ Òh cˆt�}‰}˜S×!Ñhùs   ƒ)z.pdfz.docz.docxz.xlsz.xlsxz.rarz.zipr   ú/éÿÿÿÿr   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)ÚurlN© )r:   r6   Úfull_urls     €r   r<   z&extract_attachments.<locals>.<genexpr>C   s   øè ø€ ÒA°�q˜‘x 8Õ+ÑAùs   ƒ)r$   r@   )	r!   r   ÚlowerÚanyr(   Úsplitr'   r   r%   )Úsoupr-   ÚattachmentsÚa_tagr$   rB   r7   s        @@r   Úextract_attachmentsrI   <   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                  ó"  — 	 t        j                  t        t        d¬«      } | j	                  «        d| _	        t        | j                  d«      }g }|j                  dd	¬
«      D ]Ú  }|j                  d«      }|sŒ|j                  d«      }|r|j                  d«      sŒ<|d   j                  «       }|j                  d¬«      }|sŒdd}	|j                  dd¬
«      }
|
r;|
j                  d¬«      }t!        j"                  d|«      }|r|j%                  d«      }	t'        t        |«      }|j)                  |||	dœ«       ŒÜ t        dt+        |«      › d�«       |S # t
        $ r*}t        d|› �t        j                  ¬«       g cY d}~S d}~ww xY w)z7Page 1 has all items inline. AJAX pages blocked by WAF.é   ©ÚheadersÚtimeoutz  [ERR] list page: ©ÚfileNúutf-8úhtml.parserÚulÚright_news_list©Úclass_Úlir6   r7   Tr   r   ÚspanÚrz(\d{4}-\d{2}-\d{2})é   )Útitler@   Údatez
  Page 1: z items)Úrequestsr&   ÚBASE_URLÚHEADERSÚraise_for_statusÚ	ExceptionÚprintÚsysÚstderrÚencodingr   Útextr!   Úfindr   r(   r)   ÚsearchÚgroupr   r%   Úlen)rY   ÚerF   ÚitemsrS   rW   rH   r7   r[   Údate_strÚr_spanr3   Úmr-   s                 r   Úextract_list_pagerp   H   ss  € ðÜ�L‰Lœ¬7¸BÔ?ˆØ	×ÑÔð
 €A„JÜ˜Ÿ™ Ó/€DØ€Eð �m‰m˜DÐ):ˆmÓ;ò LˆØ�W‰W�T‹]ˆÙØØ—‘˜“ˆÙ˜EŸI™I fÔ-ØØ�V‰}×"Ñ"Ó$ˆØ—‘ T�Ó*ˆÙØð ˆØ—‘˜¨�Ó,ˆÙØ—/‘/¨�/Ó-ˆCÜ—	‘	Ð0°#Ó6ˆAÙØŸ7™7 1›:�äœX tÓ,ˆ
Ø�‰˜u¨ZÀÑJÕKð-Lô0 
ˆJ”s˜5“z�l &Ð
)Ô*Ø€LøôE ò ÜÐ# A 3Ð'¬c¯j©jÕ9Ø�	ûðús   ‚0E Å	FÅ$F	ÆFÆ	Fc                 óP  — 	 t        j                  | t        d¬«      }|j                  «        d|_        t        |j                  d«      }|j                  dd¬«      }|r|j                  d¬	«      nd
}d
}|j                  dd¬«      }|rS|j                  d«      D ]?  }|j                  d¬	«      }t        j                  d|«      }	|	sŒ.|	j                  d«      } n d
}
|j                  dd¬«      }|r4|j                  ddg«      D ]  }|j                  «        Œ 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)NrK   rL   rQ   rR   Údivz	art-titlerU   Tr   r   zart-menurX   u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})rZ   zart-mainÚscriptÚstyleé   ú[r=   r>   z](r   u   

é™„ä»¶ï¼š[r$   r@   )r]   r&   r_   r`   ra   re   r   rf   rg   r(   r!   r)   rh   ri   Ú	decomposer4   rI   rj   r   rE   )r@   rY   rF   Ú	title_divr[   rm   Úart_menurX   r3   ro   ÚcontentÚart_mainÚtagrG   Úfallbackr6   s                   r   Úextract_detailr~   r   sÓ  € ð$Ü�L‰L˜¤g°rÔ:ˆØ	×ÑÔð €A„JÜ˜Ÿ™ Ó/€Dð —	‘	˜%¨�	Ó4€IÙ.7ˆI×Ñ TÐÔ*¸R€Eð €HØ�y‰y˜ zˆyÓ2€HÙØ×%Ñ% fÓ-ò 	ˆDØ—-‘- d�-Ó+ˆCÜ—	‘	ÐEÀsÓKˆAÚØŸ7™7 1›:�Ùð	ð €GØ�y‰y˜ zˆyÓ2€HÙØ×$Ñ$ h°Ð%8Ó9ò 	ˆCØ�M‰M�Oð	ä! (¨CÓ0ˆä% 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øôM ò $Ø�T˜4 Ð#Ò#ð$ús   ‚,F ÆF%Æ$F%c                 ó<  — t        «       }|j                  «       }d}d}t        «       }t        |«      }|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 |j)                  «        t#        dt        › �«       t#        d|› d|› d|› �«       |S # t         $ r-}t#        d|› �t$        j&                  ¬«       |dz  }Y d }~Œud }~ww xY w)Nr   r@   z)SELECT id FROM gov_raw WHERE page_url = ?rZ   r[   r\   F)Úensure_asciir   éÈ   z  DB error: rO   é   z
[DONE] z  New: z
, Errors: z, Listed total: )r   Úcursorrp   rj   r
   Úfetchoner~   ÚjsonÚdumpsr   ÚSQLÚ	SITE_NAMEÚCATEGORYÚGROUPÚcommitÚrowcountra   rb   rc   rd   Úclose)Ú	test_moder   ÚcurÚtotalÚerrorsrl   Útotal_listedÚitemr@   r[   rm   rz   rG   Úfinal_titleÚ
final_dateÚatt_jsonÚsummaryrk   s                     r   Úcrawlr˜   Ÿ   s¨  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€FäÓ€EÜ�u“:€Làò ˆØ�5‰kˆØ�‰Ð?À#ÀÔHØ�<‰<Œ>Øä0>¸sÓ0CÑ-ˆˆx˜ +ÙØ�a‰KˆFØàÒ,˜t G™}ˆØÒ-  f¡ˆ
ÙBM”4—:‘:˜k¸Õ>ÐSUˆÙ$+�7˜4˜C‘=°×CÑCÓEˆÙØ!ˆGð
	Ø�K‰KœÜ˜3  [×%6Ñ%6Ó%8¸*Ø˜¤(¨H´eðô ð �K‰KŒMØ�|‰|˜aÒØ˜‘
�ò
 ˜ !›Ùð?ðB 	‡J�J„LÜ	ˆI”i�[Ð
!Ô"Ü	ˆG�E�7˜* V HÐ,<¸\¸NÐ
KÔLØ€Løô ò 	Ü�L  Ð$¬3¯:©:Õ6Ø�a‰K�Fûð	ús   ÃAE%Å%	FÅ.#FÆFÚ__main__z--test)rŽ   )F)Ú__doc__r…   r)   rc   r]   Úbs4r   Úurllib.parser   r	   rˆ   r‰   rŠ   r^   Ú	MAX_PAGESr_   r‡   r   r   r4   rI   rp   r~   r˜   Ú__name__ÚargvrŽ   rA   r   r   ú<module>r       s”   ðá !ß × Ý Ý  à
€Ø'€	Ø€Ø€Ø7€Ø€	ð DØ'ñ€ð
-€ò
òòò0	ò'òT*1óZ-ð` ˆzÒØ˜CŸH™HÐ$€IÙ	�IÖð r   