Ë
    V_ŠjG  ã                   óL  — 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 ej                  j                  dd«       ddlmZ ddlZdZd„ Zd	Zd
dddœZdZ ej,                  «       Zej0                  j3                  e«       d„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uj  ç‹¬å±±åŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šçˆ¬è™« - v2

TRS CMS (æ‹“å°”æ€�)
åˆ—è¡¨: /xwdt/tzgg/index.html (181é¡µ, ~2713æ�¡)
      ç¬¬Né¡µ(>=2): /xwdt/tzgg/index_{N}.html
è¯¦æƒ…: /xwdt/tzgg/YYYYMM/tYYYYMMDD_XXXXX.html
å†…å®¹: div.trs_editor_view > p
æ—¥æœŸ: é¡µå†…"æ—¶é—´ï¼š" æˆ– meta PubDate

æ³¨æ„�ï¼šåˆ—è¡¨é¡µHTMLå�«æ³¨é‡Šï¼ŒBeautifulSoupè§£æž�liæœ‰è¯¯ï¼Œæ”¹ç”¨æ­£åˆ™
é    N)ÚBeautifulSoup)Úurljoinz/root/gov_crawler)Úpush_to_searchdbz/root/search.dbc                  óÊ   — 	 t        j                  t        d¬«      } | j                  d«       | j                  d«       | S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   ©ÚtimeoutzPRAGMA busy_timeout=30000zPRAGMA journal_mode=WALz  WARN DB connect: )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚ	ExceptionÚprint)ÚconnÚes     ú&/root/gov_crawler/crawl_dushan_tzgg.pyÚget_db_connectionr      sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttps://www.dushan.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,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageõ   ç‹¬å±±åŽ¿-é€šçŸ¥å…¬å‘Šc                 óV   — t         j                  | d¬«      }d|_        |j                  S )Né   r   zutf-8)ÚsessÚgetÚencodingÚtext)ÚurlÚresps     r   Ú
fetch_pager   8   s%   € Ü�8‰8�C ˆ8Ó$€DØ€D„MØ�9‰9Ðó    c                 óV  — g }t        j                  dt         j                  «      }|j                  | «      D ]n  }|j	                  d«      }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|sŒUd|v sŒZ|j                  |||dœ«       Œp |S )u4   è§£æž�åˆ—è¡¨é¡µ - ç”¨æ­£åˆ™ï¼ˆBSè§£æž�liæœ‰é—®é¢˜ï¼‰zshref="(http[s]?://www\.dushan\.gov\.cn/xwdt/tzgg/\d+[^"]*)"[^>]*title="([^"]*)"[^>]*>.*?</a>\s*<span>([^<]*)</span>é   é   é   z/tzgg/)Útitler   Úpub_date)ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚappend)ÚhtmlÚitemsÚpatternÚmÚhrefr$   r%   s          r   Ú
parse_listr2   >   s¡   € à€Eô �j‰jØ~Ü
�	‰	ó€Gð ×Ñ˜dÓ#ò 	ˆØ�w‰w�q‹zˆØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:×#Ñ#Ó%ˆÚ�X Ò%Ø�L‰LØØØ$ñõ ð	ð €Lr   c                 ór  — | d   }	 t        |«      }t	        |d«      }| d   }| j                  dd«      }|j                  «       }t        j                  d	|«      }|r|j                  d
«      }|j                  dd¬«      }	d}
g }|	�rëg }|	j                  g d¢d¬«      D �]  }|j                  dk(  �r|j                  d«      rŒ&|j                  d«      rŒ8d}|j                  D �]  }t        |t        «      r|j!                  «       }|sŒ'||dz   z  }Œ0|j                  dk(  r|dz  }ŒE|j                  dk(  r@|j                  dd«      }|j                  dd«      }|sŒ{t#        ||«      }|d|› d|› d�z  }Œ”|j                  dk(  rC|j                  dd«      }|j                  d¬«      }|sŒÊ|sŒÍt#        ||«      }|d|› d|› d�z  }Œæ|j                  d v sŒõ||j                  dd¬«      dz   z  }�Œ t        j$                  d!d|«      j!                  «       }|s�Œ€|j'                  |«       �Œ“|j                  dk(  r|j'                  t        |«      «       �Œ¾|j                  dk(  s�ŒÏ|j                  dd«      }|j                  dd«      }|s�Œ÷t#        ||«      }|j'                  d|› d|› d"�«       �Œ d#j)                  |«      }
|	j                  dd¬$«      D ]�  }|j                  dd«      }|j                  d¬«      }|sŒ*|sŒ-t        j                  d%|t        j*                  «      sŒS|j-                  d&«      st#        ||«      }|j'                  ||d'œ«       |
d(|› d)|› d*�z  }
Œ‘ |||
|fS # t        $ r4}t        d|› d|› �«       | d   | j                  dd«      dg fcY d}~S d}~ww xY w)+u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r$   r%   Ú Nzhtml.parseru"   æ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r!   ÚdivÚtrs_editor_view)Úclass_)ÚpÚtableÚimgT)Ú	recursiver8   r9   ú Úbrú
r:   ÚsrcÚaltz![z](z) Úar1   )r+   ú[)ÚspanÚstrongÚbÚemz[ \t]+ú)z

)r1   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$Úhttp)Únamer   z

<p><a href="z">z</a></p>)r   r   r   r   r   Úget_textr&   Úsearchr*   ÚfindÚfind_allrI   Úfind_parentÚchildrenÚ
isinstanceÚstrr+   r   Úsubr,   ÚjoinÚIÚ
startswith)Úitemr   r-   r   Úsoupr$   r%   Ú	page_textr0   Úcontent_viewÚcontentÚattachmentsÚpartsÚelemÚtxtÚchildÚtr?   r@   Úfull_srcÚa_hrefÚa_textÚ	full_hrefrA   r1   r   s                             r   Úfetch_detailre   V   sµ  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð �‰M€Eð �x‰x˜
 BÓ'€HØ—‘“€IÜ
�	‰	Ð7¸ÓC€AÙØ—7‘7˜1“:ˆð —9‘9˜UÐ+<�9Ó=€LØ€GØ€KâØˆØ ×)Ñ)Ò*?È4Ð)ÓPó '	:ˆDØ�y‰y˜CÓØ—9‘9˜S”>Øà×#Ñ# GÔ,ØØ�Ø!Ÿ]™]ó E�EÜ! %¬Ô-Ø!ŸK™K›M˜ÚØ 1 s¡7™N™CØŸ™ tÒ+Ø˜t™™ØŸ™ uÒ,Ø#Ÿi™i¨¨rÓ2˜Ø#Ÿi™i¨¨rÓ2˜ÚÜ'.¨s°CÓ'8˜HØ R¨ u¨B¨x¨j¸Ð#;Ñ;™CØŸ™ sÒ*Ø!&§¡¨6°2Ó!6˜Ø!&§¡°d Ó!;˜Ú!¢fÜ(/°°VÓ(<˜IØ Q v h¨b°°¸2Ð#>Ñ>™CØŸ™Ð'DÒDØ˜uŸ~™~¨c¸˜~Ó>ÀÑDÑDšð)Eô* —f‘f˜Y¨¨SÓ1×7Ñ7Ó9�ÛØ—L‘L Ö%Ø—‘˜gÒ%Ø—‘œS ›YÖ'Ø—‘˜eÔ#Ø—h‘h˜u bÓ)�Ø—h‘h˜u bÓ)�ÛÜ& s¨CÓ0�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Ö9ðO'	:ðP —+‘+˜eÓ$ˆð ×&Ñ& s°Ð&Ó6ò 	EˆAØ—5‘5˜ Ó$ˆDØ—:‘: D�:Ó)ˆDÚš¤§¡Ð+PÐRVÔXZ×X\ÑX\Õ!]Ø—‘ vÔ.Ü" 3¨Ó-�DØ×"Ñ"¨D¸Ñ#>Ô?ØÐ-¨d¨V°2°d°V¸8ÐDÑD‘ð	Eð �(˜G [Ð0Ð0øôW ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡M9 Í9	N6Î)N1Î+N6Î1N6c                  ó.  — t        j                  d¬«      } | j                  dt        dd¬«       | j	                  «       }|j
                  dkD  r|j
                  nd}g }t        d|dz   «      D ]“  }|dk(  r
t        › d	�}nt        › d
|› d�}t        d|› d|› d�«       	 t        |«      }t        |«      }|st        d«        n@t        dt        |«      › d�«       |j                  |«       t        j                  d«       Œ• t        dt        |«      › d�«       |st        d«       y g }	t!        |«      D ]Å  \  }
}t        d|
dz   › dt        |«      › d|d   d d › d�«       t#        |«      \  }}}}|s|d   }t%        j&                  dd|«      j)                  «       }|r|d d nd}|d   |d   ||||t*        |rt-        j.                  |d¬ «      ndd!œ}|	j1                  |«       t        j                  d"«       ŒÇ t        d#t        |	«      › d$�«       |	rt3        |	t*        «       t5        «       }|rw	 |j7                  d%t*        f«      }|j9                  «       d   }|j7                  d&t*        f«      }|j9                  «       d   }t        d'|› d(|› d)�«       |j;                  «        t        d+«       y # t        $ r}t        d|› �«       Y d }~ �ŒÒd }~ww xY w# t        $ r}t        d*|› �«       Y d }~Œ^d }~ww xY w# |j;                  «        w xY w),Nr   )Údescriptionz--pagesr   u   é¡µæ•°ï¼Œ0=å…¨é‡�181é¡µ)ÚtypeÚdefaultÚhelpé   r!   z/xwdt/tzgg/index.htmlz/xwdt/tzgg/index_z.htmlzPage ú/z...z  empty, stopz  found z itemsz  WARN: g333333Ó?z
Total list: zNo items found, abortz  [z] r$   é(   z\s+r<   iô  r4   r   F)Úensure_ascii)r   Ú
source_urlr$   rZ   Úsummaryr%   Ú	site_namer[   gš™™™™™É?z
Inserting z records...z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?zDB: z rows (FTS: z rows)z  WARN DB query: ÚDONE)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚpagesÚrangeÚBASE_URLr   r   r2   ÚlenÚextendr   ÚtimeÚsleepÚ	enumeratere   r&   rR   r+   Ú	SITE_NAMEÚjsonÚdumpsr,   r   r   r   ÚfetchoneÚclose)ÚparserÚargsÚ	max_pagesÚ	all_itemsÚpager   r-   r.   r   ÚrecordsÚirV   r$   r%   rZ   r[   rp   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                         r   Úmainr�   ª   s  € Ü×$Ñ$Ð1IÔJ€FØ
×Ñ˜	¬°QÐ=VÐÔWØ×ÑÓ€Dà"Ÿj™j¨1šn�—
’
°!€IØ€Iä�a˜ Q™Ó'ò ˆØ�1Š9Ü�JÐ3Ð4‰Cä�JÐ/°¨v°UÐ;ˆCä��d�V˜1˜Y˜K sÐ+Ô,ð
	Ü˜c“?ˆDÜ˜tÓ$ˆEÙÜ˜Ô'ÙÜ�HœS ›Z˜L¨Ð/Ô0Ø×Ñ˜UÔ#ô 	�
‰
�3�ð%ô( 
ˆNœ3˜y›>Ð*¨&Ð
1Ô2áÜÐ%Ô&Øð €GÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDÜ0<¸TÓ0BÑ-ˆˆx˜ +áØ˜‘MˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙ#*�'˜$˜3‘-°ˆð ˜‘;Ø˜u™+ØØØØ Ü"ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ˆð 	�‰�vÔÜ�
‰
�3�ð)ô. 
ˆLœ˜W›˜ kÐ
2Ô3ÙÜ˜¤)Ô,ô Ó€DÙð	Ø—\‘\Ø@Ä9À,óˆFð Ÿ™Ó)¨!Ñ,ˆIØ—\‘\ØCÄiÀ\óˆFð Ÿ™Ó)¨!Ñ,ˆIÜ�D˜˜ <°	¨{¸&ÐAÔBð �J‰JŒLä	ˆ&…Møôu ò 	Ü�H˜Q˜C�.Ô!Þûð	ûôj ò 	+ÜÐ% a SÐ)×*Ñ*ûð	+ûð �J‰J�LúsI   Â#J8Ã)J8È6A&K Ê8	KËKËKË	K?Ë'K:Ë5L Ë:K?Ë?L ÌLÚ__main__)Ú__doc__Úrequestsr&   Úsysr�   r}   Úosrs   Úbs4r   Úurllib.parser   ÚpathÚinsertÚcrawler_libr   r
   r   r   rz   ÚHEADERSr€   ÚSessionr   ÚheadersÚupdater   r2   re   r�   Ú__name__© r   r   ú<module>r¡      s¹   ðñ
ó Û 	Û 
Û Û Û 	Û Ý Ý  à ‡�‡��Ð&Ô 'Ý (Û à
€òð '€ð DØOØ0ñ€ð %€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òòò0Q1òhQðh ˆzÒÙ…Fð r   