Ë
    V_Šj½  ã                   óˆ   — d Z ddlZddlmZ ddlZddlZddlZdZdZdZ	dZ
dd	d
œZdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uq   
çˆ¬è™«: æ€€ä»�å¸‚äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤
http://www.zghr.gov.cn/xxgk/zdlyxxgk/hjbh/
CMS: æ€€ä»�å¸‚æ”¿åºœç½‘
é    N)ÚBeautifulSoupz/root/search.dbzhttp://www.zghr.gov.cnz*http://www.zghr.gov.cn/xxgk/zdlyxxgk/hjbh/u   æ€€ä»�å¸‚äººæ°‘æ”¿åºœ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-Languagec                 ó  — g }t        d| «      D �].  }|dk(  rt        }ndj                  |«      }	 t        j                  |dt
        ¬«      }d|_        |j                  dk7  r;t        dj                  |dz   |j                  «      t        j                  ¬	«        |S t        |j                  d
«      }|j                  d«      }|s0t        dj                  |dz   «      t        j                  ¬	«        |S d}|D �]   }|j                  d«      }	|	sŒ|	j	                  d«      sŒ*|	d   }
|	j	                  dd«      j                  «       xs |	j!                  d¬«      }|j                  d«      }|r|j!                  d¬«      nd}|
j#                  d«      rt$        dz   |
dd z   }
n8|
j#                  d«      r
t$        |
z   }
n|
j#                  d«      st$        dz   |
z   }
d|
v }|j'                  |
|||f«       |dz  }�Œ t        dj                  |dz   |«      t        j                  ¬	«       t)        |«      dk  r |S �Œ1 |S # t*        $ r:}t        dj                  |dz   |«      t        j                  ¬	«       Y d}~ |S d}~ww xY w)z$Get all article URLs from list pagesr   z7http://www.zghr.gov.cn/xxgk/zdlyxxgk/hjbh/index_{}.htmlé   ©ÚtimeoutÚheadersúutf-8éÈ   z  Page {}: HTTP {}é   ©Úfileúhtml.parserz
ul.main liz  Page {}: no itemsÚaÚhrefÚtitleÚ T©ÚstripÚspanz./z/xxgk/zdlyxxgk/hjbh/é   Nú/Úhttpzzghr.gov.cnz  Page {}: {} itemsé   z  Page {} error: {})ÚrangeÚLIST_URLÚformatÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚprintÚsysÚstderrr   ÚtextÚselectÚfindr   Úget_textÚ
startswithÚBASE_URLÚappendÚlenÚ	Exception)Ú	max_pagesÚurl_dataÚpageÚurlÚrÚsoupÚitemsÚcountÚlir   r   Ú
full_titleÚ	date_spanÚpub_dateÚis_localÚes                   ú/root/gov_crawler/crawl_zghr.pyÚget_list_urlsr=      sh  € à€HÜ�a˜Ó#ó .ˆØ�1Š9Ü‰CàK×RÑRÐSWÓXˆCð(	Ü—‘˜S¨"´gÔ>ˆAØ ˆAŒJØ�}‰} Ò#ÜÐ*×1Ñ1°$¸±(¸A¿M¹MÓJÔQT×Q[ÑQ[Õ\ØðJ €OôG ! §¡¨Ó7ˆDØ—K‘K Ó-ˆEÙÜÐ+×2Ñ2°4¸!±8Ó<Ä3Ç:Á:ÕNØð> €Oð; ˆEØó �Ø—G‘G˜C“L�Ú˜Ÿ™˜v�Ø˜V™9�DØ!"§¡ w°Ó!3×!9Ñ!9Ó!;Ò!U¸q¿z¹zÐPT¸zÓ?U�JØ "§¡¨£�IÙAJ˜y×1Ñ1¸Ð1Ô=ÐPR�Hð —‘ tÔ,Ü'Ð*@Ñ@À4ÈÈÀ8ÑK™ØŸ™¨Ô-Ü'¨$™™Ø!Ÿ_™_¨VÔ4Ü'Ð*@Ñ@À4ÑG˜ð  -°Ð4�HØ—O‘O T¨:°xÀÐ$JÔKØ˜Q‘J’Eð'ô* Ð'×.Ñ.¨t°a©x¸Ó?ÄcÇjÁjÕQÜ�5‹z˜AŠ~Øð
 €Oñ ðU.ð` €Oøô	 ò 	ÜÐ'×.Ñ.¨t°a©x¸Ó;Ä#Ç*Á*ÕMÜà€Oûð		ús2   ±A*IÂAIÃ7IÄIÄ%DIÉ	JÉ.JÊJc           
      ó€  ‡— 	 t        j                  | dt        ¬«      }d|_        |j                  dk7  ryt        |j                  d«      }d}|j                  d«      }|r|j                  d	¬
«      }d}|j                  d«      }|r7t        j                  d|j                  «       «      }|r|j                  d«      }d}|j                  d«      }	|	rŠg }
|	j                  D ]h  }|j                  dk(  r(|j                  dd	¬«      }|sŒ(|
j                  |«       Œ:|j                  dk(  sŒJt!        |«      }|sŒX|
j                  |«       Œj dj#                  |
«      }g }|j%                  dd	¬«      D ]„  }|d   Š|j                  d	¬
«      }t'        ˆfd„dD «       «      sŒ/‰j)                  d«      st*        dz   ‰j-                  d«      z   Š|j                  |xs ‰j/                  d«      d   ‰dœ«       Œ† t1        |j3                  «       «      dk  rVdj5                  | |«      }|r=dj#                  |D �cg c]  }d j5                  |d!   |d"   «      ‘Œ c}«      }|d#|z   z  }|d$z  }|| ||t6        d|d%œS c c}w # t8        $ r5}t;        d&j5                  | |«      t<        j>                  ¬'«       Y d}~yd}~ww xY w)(z'Parse a local detail page (zghr.gov.cn)r   r   r	   r
   Nr   r   Úh3Tr   z.conContentu(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   z.TRS_EditorÚpú )Ú	separatorr   Útablez

r   )r   r   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w)N)Úlower)Ú.0Úxr   s     €r<   ú	<genexpr>z%parse_detail_local.<locals>.<genexpr>|   s   øè ø€ Òa¨�1˜Ÿ
™
›Ô$Ñaùs   ƒ)z.pdfz.docz.xlsz.zipz.docxz.xlsxr   r   éÿÿÿÿ)Únamer1   é   z<p><a href="{}">{}</a></p>ú
z - [{}]({})rJ   r1   u   

é™„ä»¶ï¼š
u   

ï¼ˆåŽŸæ–‡é“¾æŽ¥æŸ¥çœ‹ï¼‰©r   r1   ÚdateÚcontentÚ	site_nameÚsourceÚattachmentsz  Error parsing local {}: {}r   ) r   r   r   r    r!   r   r%   r'   r(   Ú
select_oneÚreÚsearchÚgroupÚchildrenrJ   r+   Útable_to_markdownÚjoinÚfind_allÚanyr)   r*   ÚlstripÚsplitr,   r   r   Ú	SITE_NAMEr-   r"   r#   r$   )r1   r2   r3   r   r?   rN   ÚccÚmrO   ÚteÚpartsÚchildÚtxtÚmd_tablerR   r   Úalr;   r   s                     @r<   Úparse_detail_localrg   P   sž  ø€ ðEÜ�L‰L˜ b´'Ô:ˆØˆŒ
Ø�=‰=˜CÒØÜ˜QŸV™V ]Ó3ˆð ˆØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEð ˆØ�_‰_˜]Ó+ˆÙÜ—	‘	ÐEÀrÇ{Á{Ã}ÓUˆAÙØ—w‘w˜q“z�ð ˆØ�_‰_˜]Ó+ˆÙØˆEØŸ™ò /�Ø—:‘: Ò$ØŸ.™.°3¸d˜.ÓC�CÚØŸ™ SÕ)Ø—Z‘Z 7Ó*Ü0°Ó7�HÚØŸ™ XÕ.ð/ð —k‘k %Ó(ˆGð ˆØ—‘˜s¨�Ó.ò 		ˆAØ�V‘9ˆDØ—*‘* 4�*Ó(ˆCÜÓaÐ.`ÔaÕaØ—‘ vÔ.Ü# c™>¨D¯K©K¸Ó,<Ñ<�DØ×"Ñ"ØÒ6 4§:¡:¨c£?°2Ñ#6Øñ$õ ð		ô ˆw�}‰}‹Ó "Ò$Ø2×9Ñ9¸#¸uÓEˆGÙØ—Y‘YÐS^Ö_Èa × 4Ñ 4°Q°v±YÀÀ%ÁÕ IÒ_Ó`�ØÐ,¨rÑ1Ñ1�ØÐ5Ñ5ˆGð ØØØÜ"ØØ&ñ
ð 	
ùò	  `øô ò ÜÐ,×3Ñ3°C¸Ó;Ä#Ç*Á*ÕMÜûðúsI   ƒ2I? ¶CI? Ä
!I? Ä,I? Ä:A'I? Æ"BI? È9I:É!I? É:I? É?	J=Ê+J8Ê8J=c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)rC   ÚargsÚkwargss      r<   rX   rX   š   s   € äˆu‹:Ðó    c                 óÒ  — t        j                  t        «      }|j                  «       }d}| D ]–  }|r|d   sŒ|j	                  d|d   t
        f«       |j                  «       rŒ7|d   rt        |d   «      nd}|j	                  d|d   |d   |d   |d   r|d   d	d
 nd|d   |d   |j                  dd«      |f«       |dz  }Œ˜ |j                  «        |j                  «        |S )zSave articles to search.dbr   r   z6SELECT 1 FROM gov_raw WHERE page_url=? AND site_name=?r1   rR   r   z²INSERT OR REPLACE INTO gov_raw
               (page_url, title, content, summary, site_name, publish_date, source_url, attachments)
               VALUES (?, ?, ?, ?, ?, ?, ?, ?)rO   Nr
   rP   rN   rQ   r   )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuter^   Úfetchoneri   r   ÚcommitÚclose)ÚarticlesÚconnÚcÚinsertedÚartÚattachments_jsons         r<   Ú
save_to_dbr|   ž   s  € ä�?‰?œ7Ó#€DØ�‰‹€AØ€HØò ˆÙ˜#˜gš,ØØ	�	‰	ØDØ�‰ZœÐ#ô	
ð �:‰:Œ<ØØ69¸-Ò6Hœ3˜s =Ñ1Ô2ÈbÐØ	�	‰	ð2ð �E‘
Ø�G‘Ø�I‘Ø(+¨Iª��I‘˜t Ñ$¸BØ�KÑ Ø�F‘Ø—‘˜ "Ó%Ø ð	ô		
ð 	�A‰‰ð3ð4 	‡K�K„MØ‡J�J„LØ€Orl   c            
      ó¢  — d} t        t        j                  «      dkD  r	 t        t        j                  d   «      } t        dj                  t        t        | «      t        j                  ¬«       t        dt        j                  ¬«       t        | «      }t        dj                  t        |«      «      t        j                  ¬«       t        dt        j                  ¬«       g }t        |«      D ]œ  \  }\  }}}}t        dj                  |dz   t        |«      |d d	 |«      t        j                  ¬«       |rt        |«      }n|||d
j                  ||«      t        dg dœ}|sŒv|d   s||d<   |d   s|r||d<   |j                  |«       Œž t        dj                  t        |«      t        |«      «      t        j                  ¬«       t        |«      }	t        dj                  |	«      t        j                  ¬«       t        dt        j                  ¬«       t        dj                  t        |«      «      «       y # t        $ r Y �Œw xY w)Nr   r   z"Starting crawl: {} - {} ({} pages)r   zFetching list pages...zTotal URLs: {}zFetching content...z  [{}/{}] {} (local={})éP   u:   [{}]({})

ï¼ˆå¤–éƒ¨é“¾æŽ¥ï¼Œè¯·ç‚¹å‡»æ ‡é¢˜æŸ¥çœ‹åŽŸæ–‡ï¼‰r   rM   r   rN   zParsed: {}/{} articleszInserted: {} new articleszDone.z
Article count for config: {})r,   r#   ÚargvÚintÚ
ValueErrorr"   r   r^   r   r$   r=   Ú	enumeraterg   r+   r|   )
r.   r/   rv   Úir1   r   rN   r:   rz   ry   s
             r<   Úmainr„   Â   sç  € Ø€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
Ð
.×
5Ñ
5´iÄÈ9Ó
UÔ\_×\fÑ\fÕgô 
Ð
"¬¯©Õ4Ü˜YÓ'€HÜ	Ð
×
!Ñ
!¤# h£-Ó
0´s·z±zÕBô 
Ð
¤c§j¡jÕ1Ø€HÜ+4°XÓ+>ò !Ñ'ˆÑ'ˆC�˜˜hÜÐ'×.Ñ.¨q°1©u´c¸(³mÀSÈÈ"ÀXÈxÓXÔ_b×_iÑ_iÕjáÜ$ SÓ)‰Cð ØØØY×`Ñ`ÐafÐhkÓlÜ&ØØ!ñˆCò Ø�w’<Ø$��G‘Ø�v’;¡4Ø"��F‘Ø�O‰O˜CÕ ð-!ô0 
Ð
"×
)Ñ
)¬#¨h«-¼¸X»Ó
GÌcÏjÉjÕYô ˜(Ó#€HÜ	Ð
%×
,Ñ
,¨XÓ
6¼S¿Z¹ZÕHÜ	ˆ'œŸ
™
Õ#ä	Ð
*×
1Ñ
1´#°h³-Ó
@ÕAøôY ò 	Úð	ús    I É	IÉIÚ__main__)r   )Ú__doc__r   Úbs4r   rn   rT   r#   rp   r*   r   r^   r   r=   rg   rX   r|   r„   Ú__name__© rl   r<   ú<module>rŠ      sr   ðñó Ý Û Û 	Û 
à
€Ø#€Ø7€Ø#€	ð DØ'ñ€ó3òlGòTò!òH1Bðh ˆzÒÙ…Fð rl   