Ë
    V_Šj°!  ã                   óš  — 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
ddd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j2                  v ZerdneZdej2                  v rKej2                  j9                  d«      Zedz    eej2                  «      k  r eej2                  edz      «      Z eee¬«       yy)ub   è‹�é“¶äº§ä¸šå›­-é€šçŸ¥å…¬å‘Š è„šæœ¬ï¼ˆè¡¨æ ¼ä¿®å¤�ç‰ˆï¼‰
https://sycyy.yinchuan.gov.cn/xwzx/tzgg/
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu   è‹�é“¶äº§ä¸šå›­-é€šçŸ¥å…¬å‘Šu   å®�å¤�ú(https://sycyy.yinchuan.gov.cn/xwzx/tzgg/é   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.8zhttps://sycyy.yinchuan.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 (?, ?, ?, ?, '', ?, ?, ?)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_yinchuan.pyÚinit_dbr      s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 óL   — t        j                  | t        |¬«      }d|_        |S )N)ÚheadersÚtimeoutzutf-8)ÚrequestsÚgetÚHEADERSÚencoding)Úurlr   Úrs      r   Úfetchr      s    € Ü�‰�S¤'°7Ô;€AØ€A„JØ€Hr   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_markdownr!   %   s   € äˆu‹:Ðr   c                 ó  — g }| j                   D �]c  }|j                  €$|j                  «       }|r|j                  |«       Œ4|j                  j	                  «       }|dk(  r t        |«      }|sŒa|j                  |«       Œs|dk(  r(|j                  dd¬«      }|sŒŽ|j                  |«       Œ |dv rŒ¥|dk(  r t        |«      }|sŒ¸|j                  |«       ŒÊ|dv r t        |«      }|sŒÜ|j                  |«       Œî|d	v rD|j                  d
d¬«      D ],  }|j                  dd¬«      }|sŒ|j                  d|z   «       Œ. �Œ6|dv r�Œ<|j                  dd¬«      }|s�ŒS|j                  |«       �Œf dj                  |«      S )ztExtract text preserving tables and paragraphs.
    Iterates direct children in order to maintain document flow.
    r   Úpú T©Ústrip)ÚbrÚdiv)ÚcenterÚsectionÚarticle)ÚulÚolÚliF)Ú	recursivez- )ÚscriptÚstylez

)
ÚchildrenÚnamer&   ÚappendÚlowerr!   Úget_textÚextract_content_from_divÚfind_allÚjoin)r(   ÚpartsÚchildÚtextÚtag_nameÚmdÚsubr.   s           r   r7   r7   )   sw  € ð €EØ—‘ó $#ˆØ�:‰:ÐØ—;‘;“=ˆDÙØ—‘˜TÔ"ØØ—:‘:×#Ñ#Ó%ˆØ�wÒÜ" 5Ó)ˆBÚØ—‘˜RÕ Ø˜Š_Ø—>‘> #¨T�>Ó2ˆDÚØ—‘˜TÕ"Ø˜Ñ ØØ˜Òä*¨5Ó1ˆCÚØ—‘˜SÕ!ØÐ9Ñ9Ü*¨5Ó1ˆCÚØ—‘˜SÕ!Ø˜Ñ%Ø—n‘n T°U�nÓ;ò .�Ø—{‘{ 3¨d�{Ó3�ÚØ—L‘L ¨¡Õ-ò.ð Ð,Ñ,Ùà—>‘> #¨T�>Ó2ˆDÛØ—‘˜TÖ"ðI$#ðJ �;‰;�uÓÐr   c                 óÄ  — | dk(  rd}n	d| dz
  › d�}	 t        |«      }|j                  d	k7  rt        d
|j                  › d| › �d¬«       g S t	        |j
                  d«      }g }|j                  d«      xs |}|j                  d«      D �]
  }|j                  d«      }|sŒ|j                  dd«      j                  «       }	|	r|	j                  d«      rŒLt        j                  d|	«      st        j                  d|	«      sŒy|j                  dd«      j                  «       xs |j                  d¬«      }
t        d|	«      }|j                  d¬«      }t        j                  d|«      }|r|j!                  d«      nd}|j#                  |
||dœ«       �Œ t        d| › dt%        |«      › d�d¬«       |S # t        $ r}t        d| › d|› �d¬«       g cY d }~S d }~ww xY w)Né   z2https://sycyy.yinchuan.gov.cn/xwzx/tzgg/index.htmlz.https://sycyy.yinchuan.gov.cn/xwzx/tzgg/index_z.htmlz  [ERROR] Page ú: T©ÚflushéÈ   ú  [ERROR] HTTP z page úhtml.parserz
div.wblistr.   ÚaÚhrefÚ Ú
javascriptz20\d{6}z\.html$Útitler%   r   z(20\d{2}[-/]\d{2}[-/]\d{2}))rL   r   Údateú  Page z items)r   Ú	ExceptionÚprintÚstatus_coder   r<   Ú
select_oner8   Úfindr   r&   Ú
startswithÚreÚsearchr6   r   Úgroupr4   Úlen)Úpage_numr   r   ÚeÚsoupÚitemsÚlist_divr.   rH   rI   rL   Úfull_urlÚli_textÚdmÚdate_strs                  r   Úextract_list_pagerb   V   sÈ  € Ø�1‚}ØB‰à>¸xÈ!¹|¸nÈEÐRˆðÜ�#‹Jˆð 	‡}�}˜ÒÜ� §¡˜¨f°X°JÐ?ÀtÕLØˆ	Ü˜Ÿ™ Ó/€DØ€EØ�‰˜|Ó,Ò4°€HØ×Ñ Ó%ó JˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙ�t—‘ |Ô4ØÜ�y‰y˜ TÔ*´2·9±9¸ZÈÔ3NØØ—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆÜÐEÀtÓLˆØ—+‘+ D�+Ó)ˆÜ�Y‰YÐ5°wÓ?ˆÙ"$�2—8‘8˜A”;¨"ˆØ�‰˜u¨X¸xÑHÖIðJô 
ˆG�H�:˜R¤ E£
˜|¨6Ð
2¸$Õ?Ø€Løô3 ò Ü� ˜z¨¨A¨3Ð/°tÕ<Ø�	ûðús   “F7 Æ7	GÇ GÇGÇGc                 óü  — 	 t        | «      }|j                  dk7  rt        d|j                  › d| › �d¬«       y t	        |j
                  d«      }d	}|j                  d
ddi¬«      }|r$|j                  d«      r|d   j                  «       }d	}|j                  d
ddi¬«      }|r$|j                  d«      r|d   j                  «       }d }dD ]  }	|j                  |	«      }|sŒ n d	}
g }|r–t        |«      }
|j                  dd¬«      D ]u  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d¬«      xs |j!                  d«      d   }t#        | |«      }|j%                  ||dœ«       Œw |
j                  «       sd|xs | j!                  d«      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)Nz  [ERROR] Fetch rB   TrC   rE   rF   z for rG   rJ   Úmetar3   ÚArticleTitle)ÚattrsÚcontentÚPubDate)zdiv.content.clearfixzdiv.ue_tablezdiv.viewzdiv.TRS_EditorrH   )rI   rI   z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$r%   ú/éÿÿÿÿ)r3   r   ú[z](u   )
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰F)Úensure_ascii)rL   rg   Úpub_dateÚattachments)r   rO   rP   rQ   r   r<   rS   r   r&   rR   r7   r8   rU   rV   Ú
IGNORECASEr6   Úsplitr   r4   ÚjsonÚdumps)r   r   rZ   r[   rL   Úmtrm   r>   Úcontent_divÚselectorÚcontent_textÚattachments_listrH   ÚhÚatr^   s                   r   Úextract_detailrz   y   s(  € ðÜ�#‹Jˆð 	‡}�}˜ÒÜ� §¡˜¨e°C°5Ð9ÀÕFØÜ˜Ÿ™ Ó/€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(ˆð €KØZò ˆØ—o‘o hÓ/ˆÚÙðð
 €LØÐáÜ/°Ó<ˆð ×%Ñ% c°Ð%Ó5ò 	GˆAØ�&‘	ˆAÜ�y‰yÐ>ÀÄ2Ç=Á=ÕQØ—Z‘Z d�ZÓ+Ò?¨q¯w©w°s«|¸BÑ/?�Ü" 3¨›?�Ø ×'Ñ'°¸HÑ(EÕFð	Gð ×ÑÔØ˜5Ò6 C§I¡I¨c£N°2Ñ$6Ð7°r¸#¸Ð>YÐZˆð ØØÙK[”t—z‘zÐ"2ÀÔGñ	ð ð bdñ	ð øôY ò ÜÐ    R¨ sÐ+°4Õ8Üûðús   ‚G Ç	G;ÇG6Ç6G;Fc                 ó‚  — t        dt        › d|› �d¬«       t        «       }|j                  «       }dx}x}}t	        d|dz   «      D �]G  }t        |«      }|st        d|› d�d¬«        �n&|dz  }|D ]Û  }	|	d	   |	d
   |	d   }}}
|j                  d|f«       |j                  «       r|dz  }Œ;t        |«      }|€|dz  }ŒN|d	   rt        |d	   «      t        |
«      kD  r|d	   }
|d   }t        |j                  «       «      dk  r	d|› d|
› d�}|d   }|j                  t        t        ||
|xs |d   |t        |f«       |dz  }| sŒÕ|dk\  sŒÛ n |j                  «        | r|dk\  rt        d|› �d¬«        nt        j                  d«       �ŒJ |j!                  «        t        dt        › d|› d|› d|› �d¬«       |S )Nrk   z] Starting, max_pages=TrC   r   rA   rN   z empty, stoprL   r   rM   z)SELECT id FROM gov_raw WHERE page_url = ?rg   é   z<p><a href="z">u!   </a></p>
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰rn   rm   é
   z  Test mode: stop after g      à?z] Done. Inserted=z
, Skipped=z, Pages=)rP   Ú	SITE_NAMEr   ÚcursorÚrangerb   r   Úfetchonerz   rX   r&   Ú
INSERT_SQLÚCATEGORYÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr   ÚcurÚtotal_insertedÚtotal_skippedÚpages_crawledÚpnr\   ÚitemrL   r   rM   Údetailrg   rn   s                   r   Úcrawlr‘   °   s  € Ü	ˆAŒiˆ[Ð.¨y¨kÐ
:À$ÕGÜ‹9€DØ
�+‰+‹-€CØ56Ð6€NÐ6�] ]Ü�A�y 1‘}Ó%ó ˆÜ! "Ó%ˆÙÜ�G˜B˜4˜|Ð,°DÕ9ÚØ˜ÑˆØò 	ˆDØ# G™}¨d°5©k¸4À¹<˜�3ˆEØ�K‰KÐCÀcÀVÔLØ�|‰|Œ~Ø Ñ"�ØÜ# CÓ(ˆFØˆ~Ø Ñ"�ØØ�gŠ¤3 v¨g¡Ó#7¼#¸e»*Ò#DØ˜w™�Ø˜YÑ'ˆGÜ�7—=‘=“?Ó# bÒ(Ø(¨¨¨R°¨wÐ6XÐY�Ø  Ñ/ˆKØ�K‰Kœ
¤Y°°U¸DÒ<VÀFÈ:ÑDVØ&-¬x¸ð%Fô Gà˜aÑˆNÚ˜^¨rÓ1Ùð)	ð* 	�‰ŒÙ˜¨2Ò-ÜÐ,¨^Ð,<Ð=ÀTÕJÙÜ�
‰
�3Žð?ð@ 	‡J�J„LÜ	ˆAŒiˆ[Ð)¨.Ð)9¸ÀMÀ?ÐRZÐ[hÐZiÐ
jÐrvÕwØÐr   Ú__main__z--testé   z--max-pagesrA   )rˆ   r‰   )é   ) Ú__doc__rq   rU   Úsysr…   r   Úbs4r   Úurllib.parser   r   r~   rƒ   ÚBASE_URLÚ	MAX_PAGESr   r‚   r   r   r!   r7   rb   rz   r‘   Ú__name__Úargvrˆ   ÚmpÚindexÚidxrX   Úint© r   r   ú<module>r¢      sø   ðñ÷ %× $Ó $Ý Ý  à
€Ø*€	Ø€Ø5€Ø€	ð DØOØ0Ø/ñ	€ð(€
òóòò*òZ òF4ðn  Yó 'ðR ˆzÒØ˜CŸH™HÐ$€IÙ‰˜Y€BØ˜Ÿ™Ñ Ø�h‰h�n‰n˜]Ó+ˆØ�‰7‘S˜Ÿ™“]Ò"Ù�S—X‘X˜c A™gÑ&Ó'ˆBÙ	�I¨Ö,ð r   