Ë
    V_Šje  ã                   ó¢  — 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dlm	Z	 dZ
dZdZdZd	Zd
ZdddddœZdZdZd„ Zd d„Zd„ Zd„ Zd„ Zd„ Zdefd„Zedk(  rxdej6                  v ZerdneZdej6                  v rKej6                  j=                  d«      Zedz    e ej6                  «      k  r e!ej6                  edz      «      Z eee¬«       yy)!u�   
å¤§è¿žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - æ¸…æ´�ç”Ÿäº§å®¡æ ¸
https://epb.dl.gov.cn/col/col4737/index.html
TRS/Hanweb CMS - AJAX pagination via dataproxy.jsp
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu+   å¤§è¿žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-æ¸…æ´�ç”Ÿäº§å®¡æ ¸u   å¤§è¿žz,https://epb.dl.gov.cn/col/col4737/index.htmlé   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8úhttps://epb.dl.gov.cn/)z
User-AgentÚAcceptzAccept-LanguageÚRefererz›INSERT OR IGNORE INTO gov_raw 
    (site_name, page_url, title, publish_date, summary, content, category, attachments)
    VALUES (?, ?, ?, ?, '', ?, ?, ?)zÝhttps://epb.dl.gov.cn/module/web/jpage/dataproxy.jsp?page=1&webid=33&path=https://epb.dl.gov.cn/&columnid=4737&unitid=32863&webname=%E5%A4%A7%E8%BF%9E%E5%B8%82%E7%94%9F%E6%80%81%E7%8E%AF%E5%A2%83%E5%B1%80&permissiontype=0c                  ó|   — 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_epb_dl.pyÚinit_dbr   #   s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 óX   — |xs t         }t        j                  | ||¬«      }d|_        |S )N©ÚheadersÚtimeoutúutf-8)ÚHEADERSÚrequestsÚgetÚencoding)Úurlr   r   ÚhÚrs        r   Úfetchr   +   s*   € ØÒ”7€AÜ�‰�S !¨WÔ5€AØ€A„JØ€Hr   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_markdownr%   2   s   € äˆu‹:Ðr   c                 óä  — t        | d«      }g }t        |j                  «      D �]9  }|j                  €Œ|j                  j	                  «       }|dk(  r(|j                  dd¬«      }|sŒF|j                  |«       ŒX|dk(  r t        |«      }|sŒk|j                  |«       Œ}|dv r‹|j                  dd¬	«      D ])  }|j                  dd¬«      }|sŒ|j                  |«       Œ+ |j                  dd¬	«      D ]!  }t        |«      }|sŒ|j                  |«       Œ# |j                  dd¬«      }	�Œ|d
v r�Œ|j                  dd¬«      }|s�Œ)|j                  |«       �Œ< dj                  |«      S )z6Parse article HTML content (between ContentStart/End).úhtml.parserÚpú T©Ústripr"   )ÚdivÚcenterÚsectionF)Ú	recursive)ÚscriptÚstyleÚmetaÚbrz

)
r   ÚlistÚchildrenÚnameÚlowerÚget_textÚappendr%   Úfind_allÚjoin)
ÚtextÚsoupÚpartsÚchildÚtnÚtxtÚmdÚsub_pÚsub_tÚ	remainings
             r   Úextract_contentrF   6   sf  € ä˜˜}Ó-€DØ€Eô �d—m‘mÓ$ó "ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆà�Š9Ø—.‘. ¨D�.Ó1ˆCÚØ—‘˜SÕ!Ø�7Š]Ü" 5Ó)ˆBÚØ—‘˜RÕ ØÐ/Ñ/àŸ™¨°u˜Ó=ò &�Ø—n‘n S°�nÓ5�ÚØ—L‘L Õ%ð&ð Ÿ™¨¸5˜ÓAò %�Ü& uÓ-�ÚØ—L‘L Õ$ð%ð Ÿ™ s°$˜Ó7ŠIð Ð4Ñ4Ùà—.‘. ¨D�.Ó1ˆCÛØ—‘˜SÖ!ð?"ðB �;‰;�uÓÐr   c                  ó–  — 	 t        j                  t        t        d¬«      } d| _        | j                  dk7  rt        d	| j                  › �d¬«       g S t        j                  d
| j                  t        j                  «      }g }|D ]—  }t        j                  d|«      }|sŒ|j                  d«      }|j                  d«      j                  «       }t        d|«      }t        j                  d|«      }	|	r|	j                  d«      nd}
|j!                  |||
dœ«       Œ™ |S # t
        $ r}t        d|› �d¬«       g cY d}~S d}~ww xY w)z3Get all list items from the proxy (returns all 89).é   r   r   z  [ERROR] Proxy: T©ÚflushNéÈ   z  [ERROR] Proxy HTTP z&<record><!\[CDATA\[(.*?)\]\]></record>z,<a\s+[^>]*href="([^"]*)"[^>]*title="([^"]*)"é   é   r   z\[(\d{4}-\d{2}-\d{2})\]Ú )Útitler   Údate)r   r   Ú	PROXY_URLr   r   Ú	ExceptionÚprintÚstatus_codeÚreÚfindallr<   ÚDOTALLÚsearchÚgroupr+   r   r9   )r   ÚeÚrecordsÚitemsÚrecÚa_matchÚhrefrO   Úfull_urlÚdate_mÚdate_strs              r   Úget_all_itemsrc   `   s(  € ðÜ�L‰Lœ¬G¸RÔ@ˆØˆŒ
ð 	‡}�}˜ÒÜÐ% a§m¡m _Ð5¸TÕBØˆ	Ü�j‰jÐBÀAÇFÁFÌBÏIÉIÓV€GØ€EØò 	JˆÜ—)‘)ÐKÈSÓQˆÙØØ�}‰}˜QÓˆØ—‘˜aÓ ×&Ñ&Ó(ˆÜÐ3°TÓ:ˆÜ—‘Ð5°sÓ;ˆÙ&,�6—<‘< ”?°"ˆØ�‰˜u¨X¸xÑHÕIð	Jð €Løô% ò ÜÐ! ! Ð%¨TÕ2Ø�	ûðús   ‚'D# Ä#	EÄ,EÄ=EÅEc                 ó²  — 	 t        | «      }|j                  dk7  ryt	        |j
                  d«      }|j
                  }d}|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }d}|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }|s;|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }d}	|j                  d«      }
|j                  d«      }|
dkD  r*|dkD  r%|j                  d|
«      }||dz   | }t        |«      }	g }|j                  d«      }|r‹|j                  dd¬«      D ]u  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d¬«      xs |j!                  d«      d   }t#        | |«      }|j%                  ||dœ«       Œw t'        |	j                  «       «      dk  r	d| › d |› d!�}	||	||rt)        j*                  |d"¬#«      d$œS dd$œS # t        $ r}t        d| › d|› �d¬«       Y d}~yd}~ww xY w)%z+Fetch detail page and extract full content.z
  [ERROR] z: TrI   NrK   r'   rN   r2   r6   ÚArticleTitle)ÚattrsÚcontentÚPubDateÚpubdateÚContentStartÚ
ContentEndr   ú>rL   zdiv.art_conÚa)r_   r_   z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$r*   ú/éÿÿÿÿ)r6   r   é   z<p><a href="z">u!   </a></p>
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰F)Úensure_ascii)rO   rg   Úpub_dateÚattachments)r   rR   rS   rT   r   r<   Úfindr   r+   rF   Ú
select_oner:   rU   rX   Ú
IGNORECASEr8   Úsplitr   r9   ÚlenÚjsonÚdumps)r   r   rZ   r=   ÚhtmlrO   Úmtrr   rB   Úcontent_textÚcsÚceÚafterÚrawÚattachments_listÚart_conÚa_tagr   ÚatÚfus                       r   Úextract_detailr‡   z   ss  € ðÜ�#‹Jˆð 	‡}�}˜ÒØä˜Ÿ™ Ó/€DØ�6‰6€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(ˆáØ�Y‰Y�v f¨iÐ%8ˆYÓ9ˆÙ�"—&‘&˜Ô#Ø˜)‘}×*Ñ*Ó,ˆHð €LØ	�‰�>Ó	"€BØ	�‰�<Ó	 €BØ	ˆA‚v�"�q’&Ø—	‘	˜#˜rÓ"ˆØ�5˜1‘9˜RÐ ˆÜ& sÓ+ˆð ÐØ�o‰o˜mÓ,€GÙØ×%Ñ% c°Ð%Ó5ò 	AˆEØ�f‘ˆAÜ�y‰yÐ>ÀÄ2Ç=Á=ÕQØ—^‘^¨$�^Ó/ÒC°1·7±7¸3³<ÀÑ3C�Ü˜S !“_�Ø ×'Ñ'°¸BÑ(?Õ@ð	Aô ˆ<×ÑÓÓ  2Ò%à% c U¨"¨U¨GÐ3UÐVˆð ØØÙK[”t—z‘zÐ"2ÀÔGñ	ð ð bdñ	ð øôg ò Ü�
˜3˜%˜r ! Ð%¨TÕ2Üûðús   ‚H0 È0	IÈ9IÉIFc                 ó^  — t        dt        › d|› �d¬«       t        «       }|j                  «       }t	        «       }t        dt        |«      › �d¬«       |st        dd¬«       |j                  «        y|t        z  }|d | }t        dt        |«      › d	|› d
�d¬«       dx}}|D ]Ê  }	|	d   |	d   |	d   }}}
|j                  d|f«       |j                  «       r|dz  }Œ;t        |«      }|€|dz  }ŒN|d   rt        |d   «      t        |
«      kD  r|d   }
|d   }|d   }|j                  t        t        ||
|xs |d   |t        |f«       |dz  }| r|dk\  r nt        j                  d«       ŒÌ |j                  «        |j                  «        t        dt        › d|› d|› �d¬«       |S )Nú[z] Starting, max_pages=TrI   z  Total items from proxy: z  [ERROR] No items foundr   z  Taking first z items (z pages)rO   r   rP   z)SELECT id FROM gov_raw WHERE page_url = ?rL   rg   rs   rr   é
   g333333Ó?z] Done. Inserted=z
, Skipped=)rS   Ú	SITE_NAMEr   Úcursorrc   rx   ÚcloseÚPER_PAGEr   Úfetchoner‡   Ú
INSERT_SQLÚCATEGORYÚtimeÚsleepÚcommit)Ú	test_modeÚ	max_pagesr   ÚcurÚ	all_itemsÚ	max_itemsr\   Útotal_insertedÚtotal_skippedÚitemrO   r   rP   Údetailrg   rs   s                   r   Úcrawlrž   ¹   sÑ  € Ü	ˆAŒiˆ[Ð.¨y¨kÐ
:À$ÕGÜ‹9€DØ
�+‰+‹-€Cä“€IÜ	Ð&¤s¨9£~Ð&6Ð
7¸tÕDáÜÐ(°Õ5Ø�
‰
ŒØð œHÑ$€IØ�j�yÐ!€EÜ	ˆOœC ›J˜< x°	¨{¸'Ð
BÈ$ÕOà%&Ð&€N�]Øò ˆØ ™=¨$¨u©+°t¸F±|�Dˆsˆà�‰Ð?À#ÀÔHØ�<‰<Œ>Ø˜QÑˆMØä Ó$ˆØˆ>Ø˜QÑˆMØà�'Š?œs 6¨'¡?Ó3´c¸%³jÒ@Ø˜7‘OˆEØ˜Ñ#ˆØ˜]Ñ+ˆà�‰”JÜ�s˜E 4Ò#=¨6°*Ñ+=Ø”X˜{ð!
ô 	ð 	˜!Ñˆá˜¨2Ò-ÙÜ�
‰
�3�ð5ð8 	‡K�K„MØ‡J�J„LÜ	ˆAŒiˆ[Ð)¨.Ð)9¸ÀMÀ?Ð
SÐ[_Õ`ØÐr   Ú__main__z--testé   z--max-pagesrL   )r•   r–   )rH   N)"Ú__doc__ry   rU   Úsysr’   r   Úbs4r   Úurllib.parser   r   r‹   r‘   ÚBASE_URLÚ	MAX_PAGESrŽ   r   r�   rQ   r   r   r%   rF   rc   r‡   rž   Ú__name__Úargvr•   ÚmpÚindexÚidxrx   Úint© r   r   ú<module>r®      s  ðñ÷
 %× $Ó $Ý Ý  à
€Ø9€	Ø€Ø9€Ø€	Ø€ð DØOØ0Ø'ñ	€ð(€
ð!€	òóòò'òTò4<ð~  Yó 2ðj ˆzÒØ˜CŸH™HÐ$€IÙ‰˜Y€BØ˜Ÿ™Ñ Ø�h‰h�n‰n˜]Ó+ˆØ�‰7‘S˜Ÿ™“]Ò"Ù�S—X‘X˜c A™gÑ&Ó'ˆBÙ	�I¨Ö,ð r   