Ë
    ¸¬ujÄ   ã                   óþ   — 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mZ ddlm	Z	 dZ
e
dz   ZdZdZd	d
ddœZd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zedk(  r/ eej.                  «      dkD  rej.                  d   ndZ ee«       yy)u�   åŒ…å¤´å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å…¬ç¤ºå…¬å‘Šçˆ¬è™«
ç«™ç‚¹: sthjj.baotou.gov.cn
æ �ç›®: gsgg (å…¬ç¤ºå…¬å‘Š)
CMS: TRS (Terton) - ä»…é¦–é¡µç¬¬ä¸€é¡µé�™æ€�HTMLå�¯ç”¨
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupzhttp://sthjj.baotou.gov.cnz/gsgg/index.htmlz/root/search.dbzsthjj.baotou.gov.cnzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z`text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                  óZ   — t        j                  t        «      } | j                  d«       | S )NzPRAGMA journal_mode=WAL)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    ú!/root/gov_crawler/crawl_baotou.pyÚinit_dbr      s"   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø€Kó    c                 ó’   — 	 t        j                  | t        |d¬«      }d|_        |j                  dk(  r|j
                  S y #  Y y xY w)NF)ÚheadersÚtimeoutÚverifyzutf-8éÈ   )ÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtext)Úurlr   Úresps      r   Ú
fetch_pager       sG   € ðÜ�|‰|˜C¬¸'È%ÔPˆØˆŒØ×Ñ˜sÒ"Ø—9‘9ÐØøðÙús   ‚>A ÁAc                 ó~  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  dd¬«      D �]   }|j                  d«      }|r|j                  d	«      sŒ)|d	   j	                  «       }|j                  d
«      rt        dz   |dd  z   }n|j                  d«      st        dz   |z   }|j                  d«      }|r|d   j                  d¬«      n|j                  d¬«      }d}	t        |«      dk\  r(|d   j                  d¬«      }
|
j	                  d«      }
|
}	|j                  |||	dœ«       �Œ |S )Núhtml.parserÚulÚlist©Úclass_ÚliF)Ú	recursiveÚaÚhrefú./z/gsgg/é   ÚhttpÚspanr   T©ÚstripÚ é   z[])r   ÚtitleÚpub_date)
r   ÚfindÚfind_allr   r-   Ú
startswithÚBASE_URLÚget_textÚlenÚappend)ÚhtmlÚitemsÚsoupr    r$   r&   r'   Úspansr0   r1   Úds              r   Ú
parse_listr>   *   s;  € Ø€EÜ˜˜}Ó-€DØ	�‰�4 ˆÓ	'€BÙØˆØ�k‰k˜$¨%ˆkÓ0ó JˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØØ�‰y�‰Ó ˆØ�?‰?˜4Ô Ü˜hÑ&¨¨a¨b¨Ñ1‰DØ—‘ Ô(Ü˜hÑ&¨Ñ-ˆDØ—
‘
˜6Ó"ˆÙ16��a‘×!Ñ!¨Ð!Ô-¸A¿J¹JÈT¸JÓ<RˆØˆÜˆu‹:˜Š?Ø�a‘×!Ñ!¨Ð!Ó-ˆAØ—‘˜“ˆAØˆHØ�‰˜T¨E¸xÑHÖIð!Jð" €Lr   c                 ó¦  — t        | d«      }|j                  dddi¬«      }|r|d   nd}|j                  dd	¬
«      }|s|j                  dd¬
«      }d}|�rŸ|j                  ddg«      D ]  }|j                  «        Œ t	        |«      }t        j                  dd|t
        j                  ¬«      }t        j                  dd|t
        j                  ¬«      }t        |d«      }	d}
t        «       }|j                  d«      D ]˜  }|j                  d«      }t        d„ |D «       «      }|sŒ)|r|d   nd }|r,|j                  ddg«      }|rt        d„ |D «       «      nd}|sŒ`|j                  d¬«      }||v rŒw|j                  |«       |
t	        |«      dz   z  }
Œš |	j                  d«      D ]  }|j                  «        Œ |	j                  dd¬«      }t        j                  dd|«      }|
r|d|
z   z  }d}|j                  dddi¬«      }|r=|j                  d«      r,t        j                  d |d   «      }|r|j                  d!«      }g }t         j"                  j%                  |«      }|j                  d"d¬#«      D ]È  }|d$   }t        j                  d%|t
        j&                  «      sŒ.|j)                  d&«      r|d'z   |d(d  z   }n7|j)                  d'«      r
t*        |z   }n|j)                  d)«      s	|d'z   |z   }n|}|j                  d¬«      xs t         j"                  j-                  |«      }|j/                  ||d*œ«       ŒÊ ||||d+œS ),Nr   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr.   ÚdivÚTRS_UEDITORr"   Útrs_editor_viewÚscriptÚstylez</?span[^>]*>)Úflagsz#</?(?:b|font|strong|em|u|i|a)[^>]*>ÚtableÚtrc              3   óV   K  — | ]!  }t        |j                  d «      «      dk\  –— Œ# y­w)Útdé   N)r7   r3   ©Ú.0Úrows     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>_   s#   è ø€ ÒLÀœs 3§<¡<°Ó#5Ó6¸!Õ;ÑLùs   ‚')r   rN   Úthc              3   óX   K  — | ]"  }t        |j                  d ¬«      «      dk  –— Œ$ y­w)Tr,   é(   N)r7   r6   )rQ   Úcs     r   rS   zparse_detail.<locals>.<genexpr>g   s%   è ø€ Ò$VÈ1¤S¨¯©¸$¨Ó)?Ó%@ÀBÕ%FÑ$Vùs   ‚(*FTr,   z

)Ú	separatorr-   z\n{4,}u   

[è¡¨æ ¼]
ÚPubDatez(\d{4}-\d{2}-\d{2})r/   r&   )r'   r'   z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$r(   ú/r)   r*   )rA   r   )r0   rD   r1   Úattachments)r   r2   r3   Ú	decomposeÚstrÚreÚsubÚ
IGNORECASEÚsetÚanyÚallr6   Úaddr   ÚsearchÚgroupÚosÚpathÚdirnameÚIr4   r5   Úbasenamer8   )r9   r   r;   Útitle_elr0   Úcontent_divrD   ÚtagÚraw_htmlÚcontent_div_cleanÚtables_htmlÚ
seen_textsrK   ÚrowsÚhas_data_rowÚ	first_rowÚcellsÚis_data_headerÚcontent_textr1   Úpub_metaÚmr[   Úbase_dirÚa_tagr'   Úfull_urlÚfnames                               r   Úparse_detailr   C   sJ  € Ü˜˜}Ó-€Dð �y‰y˜¨°Ð'?ˆyÓ@€HÙ#+ˆH�YÒ°€Eð —)‘)˜E¨-�)Ó8€KÙØ—i‘i Ð.?�iÓ@ˆà€GÚà×'Ñ'¨°7Ð(;Ó<ò 	ˆCØ�M‰M�Oð	ô �{Ó#ˆÜ—6‘6Ð*¨B°ÄÇÁÔNˆÜ—6‘6Ð@À"ÀhÔVX×VcÑVcÔdˆÜ)¨(°MÓBÐàˆÜ“Uˆ
Ø ×)Ñ)¨'Ó2ò 	/ˆEØ—>‘> $Ó'ˆDäÑLÀtÔLÓLˆLÙØá#'˜˜Qš¨TˆIÙØ!×*Ñ*¨D°$¨<Ó8�áZ_¤Ñ$VÐPUÔ$VÔ!VÐej�Ù%Øà Ÿ>™>°˜>Ó5ˆLØ˜zÑ)ØØ�N‰N˜<Ô(Øœ3˜u›:¨Ñ.Ñ.‰Kð'	/ð* %×-Ñ-¨gÓ6ò 	ˆCØ�M‰M�Oð	à#×,Ñ,°vÀTÐ,ÓJˆÜ—&‘&˜ F¨GÓ4ˆÙØÐ'¨+Ñ5Ñ5ˆGð €HØ�y‰y˜¨°	Ð':ˆyÓ;€HÙ�H—L‘L Ô+Ü�I‰IÐ,¨h°yÑ.AÓBˆÙØ—w‘w˜q“zˆHð €KÜ�w‰w�‰˜sÓ#€HØ—‘˜s¨�Ó.ò AˆØ�V‰}ˆÜ�9‰9Ð:¸DÄ"Ç$Á$ÕGØ�‰˜tÔ$Ø# c™>¨D°°¨HÑ4‘Ø—‘ Ô%Ü# d™?‘Ø—_‘_ VÔ,Ø# c™>¨DÑ0‘à�Ø—N‘N¨�NÓ.ÒH´"·'±'×2BÑ2BÀ4Ó2HˆEØ×Ñ¨°hÑ?Õ@ðAð ØØØ"ñ	ð r   c                 óª   — | j                  dt        f«      }t        d„ |j                  «       D «       «      }|D �cg c]  }|d   |vsŒ|‘Œ c}S c c}w )Nz0SELECT page_url FROM gov_raw WHERE site_name = ?c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© rP   s     r   rS   zdeduplicate.<locals>.<genexpr>š   s   è ø€ Ò4˜c�3�q•6Ñ4ùs   ‚r   )r   Ú	SITE_NAMEra   Úfetchall)r   r:   ÚcurÚexistingÚits        r   Údeduplicaterˆ   ˜   sJ   € Ø
�,‰,ÐIÌIÈ<Ó
X€CÜÑ4 S§\¡\£^Ô4Ó4€HØÖ<�2 " U¡)°8Ò";ŠBÒ<Ð<ùÒ<s   ¼AÁ	AÚfullc                 óº  — t        «       }t        dt        › d�«       t        t        «      }|st        d«       |j                  «        y t        |«      }t        dt        |«      › d�«       |s|j                  «        y t        j                  «       j                  d«      }t        j                  «       t        d¬«      z
  j                  d«      }| d	k(  r[|D �cg c]  }|j                  d
«      ||fv sŒ|‘Œ }}t        dt        |«      › d�«       |st        d«       |j                  «        y t        ||«      }t        dt        |«      › �«       |s|j                  «        y d}|D ]ä  }	t        d|	d   d d › d�«       t        |	d   «      }
|
sŒ)t        |
|	d   «      }|d   }|d   r!|dz  }|d   D ]  }|d|d   › d|d   › d�z  }Œ 	 |j                  dt        |	d   |	d   |d   xs |	d   |d
   xs |	j                  d
d«      |	d   d d |f«       |j!                  «        |dz  }|dz  dk(  rt        d |› d!t        |«      › �«       Œæ t        d#|› d$�«       |j                  d%t        f«       |j                  d&t        f«       |j!                  «        |j                  «        y c c}w # t"        $ r}t        d"|› �«       Y d }~�Œgd }~ww xY w)'Nú[z] Fetching list page...z ERROR: Could not fetch list pagez  Found z items on first pagez%Y-%m-%dr/   )ÚdaysÚincrementalr1   z  After date filter: z itemsz  No new itemsz  New items to crawl: r   z  Fetching: r0   é2   z...r   rD   r[   u   

---
é™„ä»¶:
z
[rA   z](ú)z±
                INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, summary, content)
                VALUES (?, ?, ?, ?, ?, ?, ?)
            r.   r   é   z    Progress: rZ   z    DB error: z
  Done! Added z new articleszv
        DELETE FROM gov_search WHERE rowid IN (
            SELECT id FROM gov_raw WHERE site_name = ?
        )
    z”
        INSERT INTO gov_search(rowid, site_name, title, summary)
        SELECT id, site_name, title, summary FROM gov_raw WHERE site_name = ?
    )r   Úprintrƒ   r   ÚLIST_URLÚcloser>   r7   r   ÚnowÚstrftimer   r   rˆ   r   r   ÚcommitÚ	Exception)Úmoder   r9   r:   ÚtodayÚ	yesterdayr‡   Ú	new_itemsÚaddedÚitemÚdetail_htmlÚdetailrD   ÚattÚes                  r   Úmainr¢   �   sÿ  € Ü‹9€Dä	ˆAŒiˆ[Ð/Ð
0Ô1Ü”hÓ€DÙÜÐ0Ô1Ø�
‰
ŒØä�tÓ€EÜ	ˆH”S˜“Z�LÐ 4Ð
5Ô6áØ�
‰
ŒØä�L‰L‹N×#Ñ# JÓ/€EÜ—‘“¤)°Ô"3Ñ3×=Ñ=¸jÓI€Iàˆ}ÒØ#ÖP˜ r§v¡v¨jÓ'9¸eÀYÐ=OÒ'O’ÐPˆÐPÜÐ%¤c¨%£j \°Ð8Ô9ÙÜ�NÔ$Ø�J‰JŒLØä˜D %Ó(€IÜ	Ð"¤3 y£>Ð"2Ð
3Ô4áØ�
‰
ŒØà€EØò (ˆÜ�˜T '™]¨3¨BÐ/Ð0°Ð4Ô5Ü   e¡Ó-ˆÙØä˜k¨4°©;Ó7ˆð ˜Ñ#ˆØ�-Ò ØÐ+Ñ+ˆGØ˜mÑ,ò >�Ø˜S  V¡ ¨R°°E±
¨|¸1Ð=Ñ=‘ð>ð	(Ø�L‰Lð ô ˜4 ™;¨¨U©Ø�w‘Ò0 4¨¡=Ø�zÑ"Ò> d§h¡h¨z¸2Ó&>Ø�W‘˜d˜sÐ# Wð	ôð �K‰KŒMØ�Q‰JˆEØ�q‰y˜AŠ~Ü˜ u g¨Q¬s°9«~Ð.>Ð?Ô@øð9(ô@ 
Ð˜U˜G =Ð
1Ô2ð 	‡L�Lð ô ˆô	ð
 	‡L�Lð ô ˆôð 	‡K�K„MØ‡J�J…Lùòy QøôX ò 	(Ü�N 1 #Ð&×'Ò'ûð	(ús%   ÃJ3Ã8J3ÇBJ8Ê8	KËKËKÚ__main__r/   )é   )r‰   )Ú__doc__r   r   r^   Úsysrg   r   r   Úbs4r   r5   r’   r
   rƒ   r   r   r   r>   r   rˆ   r¢   Ú__name__r7   Úargvr˜   r‚   r   r   ú<module>rª      s¤   ðñó Û Û 	Û 
Û 	ß (Ý à'€ØÐ(Ñ(€Ø
€Ø!€	ð DØpØ0ñ€òó
òò2Sòj=ó
Qðf ˆzÒÙ˜cŸh™h›-¨!Ò+ˆ3�8‰8�AŠ;°€DÙˆ…Jð r   