Ë
    ¡Š£j&  ã                   ó4  — 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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œZh d£Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zedk(  r<dej8                  v Zej<                  j>                  jA                  «         ee¬«       yy)u6   é±¼å�°åŽ¿äººæ°‘æ”¿åºœ - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·é    N)Údatetime)ÚBeautifulSoupúhttp://www.yutai.gov.cnz/root/search.dbu   é±¼å�°åŽ¿ç”Ÿæ€�çŽ¯å¢ƒÚgov_rawz/http://www.yutai.gov.cn/col/col61241/index.htmlzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)z
User-AgentÚReferer>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr3   ÚoutÚwalks     €€€ú /root/gov_crawler/crawl_yutai.pyrA   zbody_text.<locals>.walk%   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r7   ú\n{3,}ú

)ÚreÚbs4r3   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr3   r@   rA   s      @@@rB   Ú	body_textrN      sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrC   c                  ój   — t        j                  t        «      } | j                  dt        › d�«       | S )NzCREATE TABLE IF NOT EXISTS z| (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT UNIQUE, url TEXT, date TEXT, content TEXT, summary TEXT, created_at TEXT))Úsqlite3ÚconnectÚDBÚexecuteÚTABLE)Úconns    rB   Úget_connrV   8   s5   € Ü�?‰?œ2Ó€DØ‡L�LÐ.¬u¨gð  6rð  sô  tØ€KrC   c                 óˆ  ‡— t        | d«      }|j                  dd¬«      }|s dD ]  }|j                  d|¬«      }|sŒ|} n |syg }g }|j                  dd	¬
«      D ]Ë  }|d   Š|j                  d	¬«      }|sd‰v r‰j	                  d«      d   n‰}t        ˆfd„dD «       «      r/‰j                  d«      rd‰z   Š|j                  d|› d‰› d�«       Œyd‰j                  «       v sd‰j                  «       v sŒž‰j                  d«      rd‰z   Š|j                  d|› d‰› d�«       ŒÍ |j                  d«      D ]\  }	t        |	«      }
t        j                  dd|
«      }
t        j                  dd|
«      }
|j                  |
«       |	j                  «        Œ^ |j                  d«      D ]  }|j                  «        Œ t        «       }|j                  ddg«      D ]>  }|j                  d	¬«      }|sŒ||vsŒ|j                  |«       |j                  |«       Œ@ |r"|j                  d«       |j!                  |«       |rd j#                  |«      n
t%        |«      }t        j                  d!d |«      }t        j                  d"d|«      }t'        |«      d#kD  r|d$d# n|}|j)                  «       |j)                  «       fS )%zaExtract clean text from Hanweb detail HTML with proper paragraph breaks, tables, and attachments.úhtml.parserr   Úzoom)Úid)Ú
bt_contentzarticle-contentÚcontent)Úclass_)r2   r2   ÚaT)Úhrefr_   ©rJ   ú/éÿÿÿÿc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w©N)Úlower)Ú.0Úxr_   s     €rB   ú	<genexpr>zextract_text.<locals>.<genexpr>T   s   øè ø€ Ò] Qˆq�D—J‘J“LÔ Ñ]ùs   ƒ)z.pdfz.docz.docxz.xlsz.xlsxz.zipr   u
   [é™„ä»¶ï¼šz](ú)ÚdownfileÚdownloadr   z>\s+<z><z\s{2,}ú Úspanr   r   u   
---
é™„ä»¶ï¼šrE   rD   z {2,}iô  N)r   ÚfindÚfind_allÚget_textÚsplitÚanyÚ
startswithr:   re   r;   rF   rI   Ú	decomposeÚunwrapÚsetÚaddÚextendrH   rN   ÚlenrJ   )ÚhtmlÚsouprY   ÚclsrK   ÚpartsÚattach_linksr^   Úfnamer   Ú
table_htmlrm   ÚseenÚtextÚsummaryr_   s                  @rB   Úextract_textr„   =   s¢  ø€ ä˜˜}Ó-€DØ�9‰9�U˜vˆ9Ó&€DÙØ?ò 	ˆCØ—‘˜5¨�Ó-ˆBÚØ�Ùð		ñ
 Øà€Eð €LØ�]‰]˜3 Tˆ]Ó*ò ?ˆØ�‰yˆØ—
‘
 �
Ó&ˆÙØ+.°$©;�D—J‘J˜s“O BÒ'¸DˆEäÓ]Ð*\Ô]Ô]Ø�‰˜sÔ#Ø0°4Ñ7�Ø×Ñ *¨U¨G°2°d°V¸1Ð =Õ>Ø˜4Ÿ:™:›<Ñ'¨:¸¿¹»Ò+EØ�‰˜sÔ#Ø0°4Ñ7�Ø×Ñ *¨U¨G°2°d°V¸1Ð =Õ>ð?ð  —‘˜wÓ'ò ˆÜ˜“Zˆ
ä—V‘V˜H d¨JÓ7ˆ
Ü—V‘V˜I s¨JÓ7ˆ
Ø�‰�ZÔ Ø�‰Õðð —‘˜fÓ%ò ˆØ�‰�ðô ‹5€DØ�m‰m˜S $˜KÓ(ò ˆØ�{‰{ ˆ{Ó&ˆÚ�D Ò$Ø�L‰L˜ÔØ�H‰H�T�Nð	ñ Ø�‰Ð'Ô(Ø�‰�\Ô"á!&ˆ6�;‰;�uÔ¬I°d«O€DÜ�6‰6�)˜V TÓ*€DÜ�6‰6�(˜C Ó&€DÜ ›I¨šOˆd�4�C‰j°€GØ�:‰:‹<˜Ÿ™›Ð(Ð(rC   c           	      óì   — t         › d�}ddddddt        | «      dœ}	 t        j                  ||t        d	d
¬«      }d|_        |j                  S # t        $ r}t        d| › d|› �«       Y d }~y d }~ww xY w)Nz/module/xxgk/search.jspÚdiv4Ú	YTA551904Ú111r2   zcompaltedate:0Ú1)ÚdividÚ
infotypeIdÚjdidÚareaÚ	sortfieldÚstandardXxgkÚcurrpageé   F)ÚdataÚheadersÚtimeoutÚverifyúutf-8z  [ERROR] fetch list page ú: )	ÚBASEr;   ÚrequestsÚpostÚHEADERSÚencodingr‚   Ú	ExceptionÚprint)ÚpageÚurlr’   ÚrÚes        rB   Ú
fetch_listr£   }   sƒ   € ÜˆFÐ)Ð
*€CàØ!ØØØ%ØÜ˜“Iñ€DðÜ�M‰M˜# D´'À2ÈeÔTˆØˆŒ
Ø�v‰vˆøÜò ÜÐ*¨4¨&°°1°#Ð6Ô7Üûðús   ž0A Á	A3ÁA.Á.A3c                 ó¶  — g }t        | d«      }|j                  d«      D ]¶  }|j                  d«      }|j                  d«      }|r|j                  d«      sŒ9|j                  dd«      j	                  «       }|s|j                  d¬	«      }|d   }|j                  d
«      r	t        |z   }|r|j                  d¬	«      nd}|j                  |||dœ«       Œ¸ |S )NrX   r   r^   Úbr_   Útitler2   Tr`   ra   )r¦   r    Údate)	r   ro   rn   ÚgetrJ   rp   rs   r˜   r:   )	rz   Úitemsr{   r   r^   r¥   r¦   r_   r§   s	            rB   Ú
parse_listrª   �   sÏ   € Ø€EÜ˜˜}Ó-€DØ�m‰m˜DÓ!ò BˆØ�G‰G�C‹LˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØØ—‘�g˜rÓ"×(Ñ(Ó*ˆÙØ—J‘J T�JÓ*ˆEØ�‰yˆØ�?‰?˜3ÔÜ˜$‘;ˆDÙ)*ˆq�z‰z ˆzÔ%°ˆØ�‰˜u¨T¸4Ñ@ÕAðBð €LrC   c                 óÊ   — t        j                  d| «      }|rt        |j                  d«      «      nd}t        j                  d| «      }|rt        d„ |D «       «      nd}||fS )z"Extract total pages from list HTMLu   å…±(\d+)æ�¡è®°å½•é   r   zfunGoPage\('[^']+',(\d+)\)c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrd   )Úint)rf   r   s     rB   rh   z get_page_info.<locals>.<genexpr>©   s   è ø€ Ò, ”c˜!—fÑ,ùs   ‚)rF   Úsearchr®   ÚgroupÚfindallÚmax)rz   ÚmÚtotal_recordsÚpagesÚtotal_pagess        rB   Úget_page_infor·   ¢   sZ   € ô 	�	‰	Ð&¨Ó-€AÙ'(”C˜Ÿ™ ›
”O¨a€Mä�J‰JÐ4°dÓ;€EÙ05”#Ñ, eÔ,Ô,¸1€KØ˜+Ð%Ð%rC   c                 ó²   — 	 t        j                  | t        dd¬«      }d|_        |j                  S # t
        $ r}t        d| › d|› �«       Y d }~y d }~ww xY w)Nr‘   F)r“   r”   r•   r–   z  [ERROR] fetch detail r—   )r™   r¨   r›   rœ   r‚   r�   rž   )r    r¡   r¢   s      rB   Úfetch_detailr¹   ¬   sT   € ðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò ÜÐ'¨ u¨B¨q¨cÐ2Ô3Üûðús   ‚/2 ²	A»AÁAc                 óô  — t        «       }|j                  «       }|j                  d«       t        «       }| r0|j                  dt        f«      D ]  }|j                  |d   «       Œ d}d}t        d«      }|s t        d«       t        j                  d«       t        |«      \  }}	t        d|› d|	› d�«       t        |«      }
t        d	|	dz   «      D ]c  }t        |«      }|r-|
j                  t        |«      «       t        d
|› d|	› d�«       nt        d
|› d|	› d�«       t        j                  d«       Œe t        dt!        |
«      › �«       |
D �]>  }|d   }|d   }||v r|dz  }Œt#        |«      }|s|dz  }Œ+t%        |«      \  }}|rt!        |«      dk  r|dz  }ŒO|j'                  dd«      }|sd}t)        j*                  dd|«      d d }|j-                  d«      d	k(  rt/        |j1                  dd«      «      nd}	 |j                  dt        t2        ||||||f«       |j4                  dkD  rX|dz  }t        d|d d › d|› d�«       	 |j                  d|j6                  t        ||f«       |dz  dk(  r|j;                  «        n|dz  }�ŒA |j;                  «        |j=                  «        t        d|› d |› �«       y # t8        $ r Y Œ^w xY w# t8        $ r}t        d|› �«       Y d }~�Œ d }~ww xY w)!NzPRAGMA journal_mode=WALz.SELECT page_url FROM gov_raw WHERE site_name=?r   r¬   z#[ERROR] Could not fetch list page 1zTotal: z
 records, z pagesé   z  Page ra   z	: fetchedz: FAILEDg      à?zTotal items in list: r¦   r    é
   r§   r2   z
2020-01-01z[^\d-]ú-zŠINSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, content, summary, date_rank) VALUES (?,?,?,?,?,?,?,?)z  + é2   z... (ri   zIINSERT INTO gov_search(rowid, site_name, title, summary) VALUES (?,?,?,?)z  [ERROR] DB insert: z
Done! Inserted: z, Skipped: )rV   ÚcursorrS   rv   Ú	SITE_NAMErw   r£   rž   ÚsysÚexitr·   rª   Úrangerx   ÚtimeÚsleepry   r¹   r„   r¨   rF   rI   Úcountr®   ÚreplaceÚSITE_SOURCEÚrowcountÚ	lastrowidr�   ÚcommitÚclose)ÚincrementalrU   ÚcurÚexistingÚrowÚtotal_insertedÚtotal_skippedrz   r´   r¶   Ú	all_itemsr   Úitemr¦   r    Údetail_htmlr‚   rƒ   Údate_strÚdrr¢   s                        rB   ÚcrawlrØ   µ   s'  € Ü‹:€DØ
�+‰+‹-€Cð ‡K�KÐ)Ô*ô ‹u€HÙØ—;‘;ÐOÔR[ÐQ]Ó^ò 	!ˆCØ�L‰L˜˜Q™Õ ð	!ð €NØ€Mô �a‹=€DÙÜÐ3Ô4Ü�‰�Œä!.¨tÓ!4Ñ€M�;Ü	ˆG�M�? *¨[¨M¸Ð
@ÔAô ˜4Ó €Iô �1�k A‘oÓ&ò ˆÜ˜!‹}ˆÙØ×ÑœZ¨Ó-Ô.Ü�G˜A˜3˜a ˜}¨IÐ6Õ7ä�G˜A˜3˜a ˜}¨HÐ5Ô6Ü�
‰
�3�ðô 
Ð!¤# i£.Ð!1Ð
2Ô3àó */ˆØ�W‘ˆØ�5‰kˆØ�(‰?Ø˜QÑˆMØä" 3Ó'ˆÙØ˜QÑˆMØä$ [Ó1‰ˆˆgÙ”s˜4“y 2’~Ø˜QÑˆMØà—8‘8˜F BÓ'ˆÙØ#ˆHÜ—6‘6˜) R¨Ó2°3°BÐ7ˆØ/7¯~©~¸cÓ/BÀaÒ/GŒS�×!Ñ! # rÓ*Ô+ÈQˆð	/Ø�K‰Kð ]ÜœK¨¨e°X¸tÀWÈbÐQôð �|‰|˜aÒØ !Ñ#�Ü˜˜U 3 B˜Z˜L¨¨h¨Z°qÐ9Ô:ðØ—K‘KÐ kØŸ™¬	°5¸'ÐBôDð " BÑ&¨!Ò+Ø—K‘K•Mà Ñ"�ùðQ*/ðX 	‡K�K„MØ‡J�J„LÜ	Ð˜~Ð.¨k¸-¸Ð
IÕJøô !ò Ùðûô ò 	/ÜÐ)¨!¨Ð-×.Ò.ûð	/ús=   ÈAKÉ$KÉ3KË	KËKËKËKË	K7ËK2Ë2K7Ú__main__z--incremental)rÍ   )r¬   )F)!Ú__doc__r™   rÁ   rF   ÚosrP   Úurllib.parseÚurllibrÄ   r   rG   r   r˜   rR   rÀ   rT   rÈ   r›   r=   rN   rV   r„   r£   rª   r·   r¹   rØ   Ú__name__ÚargvrÍ   ÚpackagesÚurllib3Údisable_warnings© rC   rB   ú<module>rä      s³   ðá <ß 9× 9× 9Ó 9Ý Ý à €Ø€Ø#€	Ø€Ø?€ð DØ@ñ€ò*€òò6ò
>)ó@ò&ò$&òóVKðp ˆzÒØ! S§X¡XÐ-€KØ×Ñ×Ñ×.Ñ.Ô0Ù	�kÖ"ð rC   