Ë
    u?­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Zddlm	Z	 ddl
Z
ddlmZ ej                  j                  dej                  j                  ej                  j!                  e«      «      «       ddlmZ dZdZeez   dz   Zd	Zd
ZdZdZdZdZg d¢Z e
j<                  «       Zej@                  jC                  eddœ«       d„ Z"d„ Z#dd„Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+e,dk(  r e+«        yy)ux  
åŒ—æµ·å¸‚ é“�å±±æ¸¯ï¼ˆä¸´æµ·ï¼‰å·¥ä¸šåŒºç®¡ç�†å§”å‘˜ä¼š - é€šçŸ¥å…¬å‘Š çˆ¬è™«
åˆ—è¡¨: http://www.beihai.gov.cn/xxgkbm/bhstsglhgyqglwyh/tzgg_24/
      createPageHTML(12,0,"index","shtml","229")  â†’ 12 é¡µ / 229 æ�¡ï¼Œ20 æ�¡/é¡µ
      ç¬¬ 2 é¡µèµ· index_N.shtmlï¼ˆN=1 å�³ç¬¬ 2 é¡µï¼‰
æ�¡ç›®: <li><a href="./t28139708.shtml" target="_blank" title="å®Œæ•´æ ‡é¢˜">æ ‡é¢˜</a><span>2026-09-15</span></li>
      âš ï¸� æ—¥æœŸ <span> åœ¨ </a> **ä¹‹å�Ž**ï¼ˆTRS å¸¸è§�å½¢ï¼‰ï¼Œæ ‡é¢˜å�– title å±žæ€§æœ€ç¨³
è¯¦æƒ…: /xxgkbm/bhstsglhgyqglwyh/tzgg_24/t{id}.shtml
      meta ArticleTitle / PubDate / ContentSource
      æ­£æ–‡ div.article-con > div.trs_editor_view.TRS_UEDITOR
      é™„ä»¶ div.article-file
      (æœ¬æ �ç›®æ˜¯çŸ³åŒ–/ä¸´æµ·å·¥ä¸šåŒºå…¬ç¤ºï¼šè§„åˆ’çŽ¯è¯„ã€�è¯¢ä»·å…¬å‘Šã€�èŠ‚èƒ½å®¡æŸ¥ç­‰)
ç”¨æ³•:
  python3 crawl_beihai_tsg_tzgg.py --pages=1
  python3 crawl_beihai_tsg_tzgg.py --pages=5
é    N)Úurljoin)ÚBeautifulSoup)Úpush_to_searchdbzhttp://www.beihai.gov.cnz /xxgkbm/bhstsglhgyqglwyh/tzgg_24ú/u7   åŒ—æµ·å¸‚-é“�å±±æ¸¯ä¸´æµ·å·¥ä¸šåŒºç®¡å§”ä¼šé€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šu   å¹¿è¥¿z
2023-09-18zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36é-   )z1div.article-con > div.trs_editor_view.TRS_UEDITORz#div.article-con div.trs_editor_viewzdiv.article-conzdiv.trs_editor_viewzdiv#zoomzzh-CN,zh;q=0.9)z
User-AgentzAccept-Languagec                  ó–  — d} t         j                  dd  D ]°  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|dk(  sŒ8t        t         j                  «      t         j                  j                  |«      dz   kD  sŒut        t         j                  t         j                  j                  |«      dz      «      } Œ² | S )Nr   é   z--pages=ú=z--pages)ÚsysÚargvÚ
startswithÚintÚsplitÚlenÚindex)ÚpagesÚas     úcrawl_beihai_tsg_tzgg.pyÚ
parse_argsr   9   s–   € Ø€EÜ�X‰X�a�bˆ\ò 9ˆØ�<‰<˜
Ô#Ü˜Ÿ™ › Q™Ó(‰EØ�)‹^¤¤C§H¡H£´·±·±¸qÓ0AÀAÑ0EÓ EÜœŸ™¤§¡§¡°Ó!2°QÑ!6Ñ7Ó8‰Eð	9ð
 €Ló    c                 óÞ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )NÚ z[\u200b\u200e\u200f\ufeff\xa0]z\s+ú u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r   Úclean_titler    C   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr   c           
      ó`  — t        d«      D ]³  }	 t        j                  | d|xs t        it        d¬«      }|j
                  dk(  rK|j                  r|j                  j                  «       dv r|j                  xs d|_        |j                  c S t        d|j
                  ›d	| d d
 ›�t        j                  ¬«        y  y # t        $ ra}|dk(  r6t        d| d d ›dt        |«      d d ›�t        j                  ¬«       Y d }~ y t        j                   d|dz   z  «       Y d }~�Œd }~ww xY w)Né   ÚRefererF)ÚheadersÚtimeoutÚverifyéÈ   )z
iso-8859-1zlatin-1ÚasciiÚcp1252zutf-8z  [WARN] HTTP r   éZ   )Úfileé   z  [WARN] GET failed éP   z: g      ð?r	   )ÚrangeÚSESSIONÚgetÚLIST_URLÚTIMEOUTÚstatus_codeÚencodingÚlowerÚapparent_encodingÚtextÚprintr   ÚstderrÚ	ExceptionÚstrÚtimeÚsleep)ÚurlÚrefererÚattemptÚrÚes        r   Úhttp_getrC   K   s  € Ü˜“8ò ,ˆð	,Ü—‘˜C¨)°WÒ5HÄÐ)IÜ$+°Eð ó ;ˆAà�}‰} Ò#Ø—z’z Q§Z¡Z×%5Ñ%5Ó%7Ð;gÑ%gØ!"×!4Ñ!4Ò!?¸�A”JØ—v‘v’Ý¨1¯=«=¸#¸c¸r¹(ÐCÌ#Ï*É*ÕUÙð,ð øô ò 	,Ø˜!Š|Ý°c¸#¸2²hÄÀAÃÀsÈÁÐLÔSV×S]ÑS]Õ^ÝÜ�J‰J�s˜g¨™kÑ*×+Ò+ûð		,ús$   �A>CÂ.CÃ	D-Ã5D(ÄD(Ä(D-c                 óÎ  — t        | d«      }g }t        «       }|j                  d«      D �]7  }|j                  dd¬«      }|sŒ|d   j	                  «       }t        j                  d|«      sŒDt        ||«      }||v rŒU|j                  |«       t        |j                  d«      xs |j                  d	d¬
«      «      }	d}
|j                  d«      }|r:t        j                  d|j                  d	d¬
«      «      }|r|j                  d«      }
|
s:t        j                  d|j                  d	d¬
«      «      }|r|j                  d«      }
|	s�Œ$|j                  ||	|
f«       �Œ: |S )Núhtml.parserÚlir   T©ÚhrefrH   zt\d{6,}\.shtml$Útitler   ©r   r   Úspanz(\d{4}-\d{2}-\d{2})r	   )r   ÚsetÚfind_allÚfindr   r   Úsearchr   Úaddr    r0   Úget_textÚgroupÚappend)Ú	html_textÚlist_page_urlÚsoupÚoutÚseenrF   r   rH   ÚurI   ÚdateÚspÚms                r   Ú
parse_listr]   ^   sB  € Ü˜ MÓ2€DØ
€CÜ‹5€DØ�m‰m˜DÓ!ó )ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆÜ�y‰yÐ+¨TÔ2ØÜ�M 4Ó(ˆØ�‰9ØØ�‰�ŒÜ˜AŸE™E '›NÒI¨a¯j©j¸ÀD¨jÓ.IÓJˆØˆØ�W‰W�V‹_ˆÙÜ—	‘	Ð0°"·+±+¸cÈ°+Ó2NÓOˆAÙØ—w‘w˜q“z�ÙÜ—	‘	Ð0°"·+±+¸cÈ°+Ó2NÓOˆAÙØ—w‘w˜q“z�ÛØ�J‰J˜˜5 $Ð'Ö(ð/)ð0 €Jr   c                 ój   — t        j                  d| «      }|rt        |j                  d«      «      S dS )NzcreatePageHTML\(\s*(\d+)r	   r   )r   rO   r   rR   )rT   r\   s     r   Útotal_pagesr_   }   s,   € Ü
�	‰	Ð-¨yÓ9€AÙŒ3ˆq�w‰w�q‹z‹?Ð& QÐ&r   c                 ó(  — dD ]�  \  }}| j                  |«      D ]t  }|j                  |«      xs dj                  «       }|r|j                  d«      rŒ:|j                  d«      r	d|z   ||<   ŒT|j                  d«      rŒft	        ||«      ||<   Œv Œ� y )N))r   rH   )ÚimgÚsrcr   )újavascript:úmailto:ztel:ú#zdata:ú//úhttps:Úhttp)rM   r0   r   r   r   )rV   Úpage_urlÚtagÚattrr   Úvs         r   Ú
absolutizerm   ‚   s�   € Ø4ò /‰	ˆˆTØ—‘˜sÓ#ò 	/ˆAØ—‘�t“Ò" ×)Ñ)Ó+ˆAÙ˜Ÿ™Ð%UÔVØØ�|‰|˜DÔ!Ø" Q™,��$’Ø—\‘\ &Õ)Ü! (¨AÓ.��$’ñ	/ñ/r   c                 ó2  — | €y| j                  g d¢«      D ]  }|j                  «        Œ | j                  d«      D ]  }|j                  «        Œ t        | |«       g }| j                  g d¢d¬«      D ]M  }|j                  dk(  rt        |«      }nt        |j                  dd¬	«      «      }|sŒ=|j                  |«       ŒO |s!t        | j                  d
d¬	«      «      }|r|g}d
j                  d„ |D «       «      }t        j                  dd|«      }|S )Nr   )ÚscriptÚstyleÚiframeÚnoscriptzWdiv.article-share-group, div.article-share-more, div.favoriteContainer, div.article-inf)ÚpÚtableÚh1Úh2Úh3Úh4T)Ú	recursivert   r   rJ   ú
c              3   óh   K  — | ]*  }|j                  «       j                  d «      r|nd|z  –— Œ, y­w)z<tableú	<p>%s</p>N)r   r   )Ú.0rs   s     r   ú	<genexpr>z clean_content.<locals>.<genexpr>¤   s-   è ø€ Ò]ÐRS˜!Ÿ'™'›)×.Ñ.¨xÔ8‘Q¸kÈA¹oÓMÑ]ùs   ‚02z
<p>\s*</p>)rM   Ú	decomposeÚselectrm   Únamer;   r    rQ   rS   Újoinr   r   )	Únoderi   ÚbadÚbÚpartsÚelÚtxtr   Úbodys	            r   Úclean_contentrŠ   Ž   s  € Ø€|ØØ�}‰}ÒFÓGò ˆØ�‰�ðà�[‰[ÐrÓsò ˆØ	�‰�ðäˆt�XÔà€EØ�m‰mÒBÈdˆmÓSò ˆØ�7‰7�gÒÜ�b“'‰Cä˜bŸk™k¨#°T˜kÓ:Ó;ˆCÚØ�L‰L˜Õðñ Ü˜Ÿ™ d°$˜Ó7Ó8ˆÙØ�CˆEà�9‰9Ñ]ÐW\Ô]Ó]€DÜ�6‰6�-  TÓ*€DØ€Kr   c           
      óî  — g }t        «       }t        | d«      }|j                  d«      D ]ï  }|j                  dd¬«      D ]×  }|d   j	                  «       }|r|j                  d«      rŒ*|j                  d«      rd	|z   }n|j                  d
«      st        ||«      }||v rŒc|j                  |«       |j                  t        |j                  dd¬«      «      xs4 t        j                  j                  |j                  d«      d   «      dd |dœ«       ŒÙ Œñ t        j                   d| t        j"                  «      D ]±  }|j%                  d«      j	                  «       }|j                  d«      rd	|z   }n|j                  d
«      st        ||«      }||v rŒ[|j                  |«       |j                  t        j                  j                  |j                  d«      d   «      dd |dœ«       Œ³ |S )uF   ä¼˜å…ˆè§£æž� div.article-file åŒºï¼ˆTRS é™„ä»¶åŒºåœ¨æ­£æ–‡å®¹å™¨å¤–ï¼‰rE   zKdiv.article-file, div#downloadfile, div#article-file, div#relfile, div.fjxzr   TrG   rH   )rc   re   rd   rf   rg   rh   r   rJ   ú?r   Néx   )r�   r>   z6href="([^"]+\.(?:pdf|docx?|xlsx?|zip|rar|wps|7z|txt))"r	   )rL   r   r€   rM   r   r   r   rP   rS   r    rQ   ÚosÚpathÚbasenamer   r   ÚfinditerÚIrR   )	rT   ri   ÚattsrX   rV   Úcontr   rY   r\   s	            r   Úextract_attsr•   ©   sÆ  € à€DÜ‹5€DÜ˜ MÓ2€DØ—‘ÐiÓjò $ˆØ—‘˜s¨�Ó.ò 	$ˆAØ�&‘	—‘Ó!ˆAÙ˜Ÿ™Ð%DÔEØØ�|‰|˜DÔ!Ø˜q‘L‘Ø—\‘\ &Ô)Ü˜H aÓ(�Ø�D‰yØØ�H‰H�QŒKØ�K‰K¤¨Q¯Z©Z¸À4¨ZÓ-HÓ!IÒ!tÌRÏWÉW×M]ÑM]Ð^_×^eÑ^eÐfiÓ^jÐklÑ^mÓMnÐosÐpsÐMtØ !ñ#õ $ñ	$ð$ô �[‰[ÐRÐT]Ô_a×_cÑ_cÓdò 	QˆØ�G‰G�A‹J×ÑÓˆØ�<‰<˜ÔØ˜1‘‰AØ—‘˜fÔ%Ü˜ !Ó$ˆAØ�‰9ØØ�‰�ŒØ�‰œRŸW™W×-Ñ-¨a¯g©g°c«l¸1©oÓ>¸tÀÐDÈQÑOÕPð	Qð €Kr   c                 óž  — t        | «      }|s||dg fS t        |d«      }|}|j                  dddi«      }|r#|j                  d«      rt	        |d   «      xs |}|}|j                  dddi«      }|r||j                  d«      rkt        j                  d|d   «      }	|	rPd	t        |	j                  d
«      «      t        |	j                  d«      «      t        |	j                  d«      «      fz  }d }
t        D ]9  }|j                  |«      }|sŒt        |j                  dd¬«      «      dkD  sŒ7|}
 n t        |
| «      }|||t        || «      fS )Nr   rE   Úmetar�   ÚArticleTitleÚcontentÚPubDatez(\d{4})-(\d{1,2})-(\d{1,2})z%04d-%02d-%02dr	   r,   r"   r   TrJ   é   )rC   r   rN   r0   r    r   rO   r   rR   ÚCONTENT_SELECTORSÚ
select_oner   rQ   rŠ   r•   )r>   Ú
list_titleÚ	list_daterT   rV   rI   ÚmtrZ   Úmpr\   rƒ   ÚselÚcandr‰   s                 r   Úfetch_detailr¤   Ê   sD  € Ü˜“€IÙØ˜9 b¨"Ð,Ð,Ü˜ MÓ2€Dà€EØ	�‰�6˜F NÐ3Ó	4€BÙ	ˆb�f‰f�YÔÜ˜B˜y™MÓ*Ò3¨eˆà€DØ	�‰�6˜F IÐ.Ó	/€BÙ	ˆb�f‰f�YÔÜ�I‰IÐ4°b¸±mÓDˆÙØ#¤s¨1¯7©7°1«:£¼¸A¿G¹GÀA»J»ÌÈQÏWÉWÐUVËZËÐ&YÑYˆDà€DÜ ò ˆØ�‰˜sÓ#ˆÚ”C˜Ÿ™ c°˜Ó6Ó7¸"Ó<ØˆDÙð	ô
 ˜˜sÓ#€DØ�$˜œl¨9°cÓ:Ð:Ð:r   c                  óD  — t        «       } | sd} g }t        «       }t        d| dz   «      D �]µ  }|dk(  r
t        dz   }ndt        t
        |dz
  fz  }t        |t        ¬«      }|st        d|z  «        �no|dk(  rt        |«      }|rt        d|z  «       t        ||«      }|st        d|z  «        �n0d	}|D �]  \  }	}
}|	|v rŒ|j                  |	«       |r
|t        k  rŒ*t        |	|
|«      \  }}}}|}|r2d
j                  d„ |D «       «      }|r|d
z   |z   j                  «       n|}|r1t        t!        j"                  dd|«      j                  «       «      dk  r	d|xs |
z  }|j%                  t&        |xs |
|xs |||	|	|rt)        j*                  |d¬«      ndt,        ddœ	«       |dz  }t/        j0                  d«       �Œ t        d||t        |«      fz  «       �Œ¸ t        dt        |«      z  «       t3        |t4        «       t        dt        |«      z  «       y )Né   r	   zindex.shtmlz%s%s/index_%d.shtml)r?   z [PAGE %d] fetch failed, stoppingu   [INFO] æ �ç›®å…± %d é¡µu*   [PAGE %d] 0 items (åˆ†é¡µè¾¹ç•Œ), stoppingr   rz   c              3   ó:   K  — | ]  }d |d   ›d|d   ›d�–— Œ y­w)z<p><a href="r>   z">r�   z</a></p>N© )r}   r   s     r   r~   zmain.<locals>.<genexpr>  s   è ø€ ÒcÑYZÀÀ%ÃÈ!ÈFË)Ô TÑcùs   ‚z<[^>]*>?r   é
   r|   F)Úensure_asciiz[])	Ú	site_namerI   Úpub_dater™   Ú
source_urlr>   ÚattachmentsÚ
group_nameÚindustryg      Ð?z[PAGE %d] +%d items (total %d)u   
æœ‰æ•ˆ %d æ�¡, å…¥åº“...u   å®Œæˆ�! æ–°å¢ž/æ›´æ–° %d æ�¡)r   rL   r.   r1   ÚBASE_URLÚLIST_DIRrC   r8   r_   r]   rP   ÚCUTOFFr¤   r‚   r   r   r   r   rS   Ú	SITE_NAMEÚjsonÚdumpsÚGROUPr<   r=   r   ÚCATEGORY)r   Ú	all_itemsrX   ÚpgrU   rT   ÚtpÚitemsÚn_newÚ
detail_urlrI   rZ   Úd_titleÚd_dater‰   r“   r™   Úsegs                     r   ÚmainrÂ   æ   s-  € Ü‹L€EÙØˆà€IÜ‹5€DÜ�A�u˜q‘yÓ!ó ,NˆØ�Š7Ü$ }Ñ4‰Mà1´X¼xÈÈaÉÐ4PÑPˆMÜ˜]´HÔ=ˆ	ÙÜÐ4°rÑ9Ô:ÚØ�Š7Ü˜YÓ'ˆBÙÜÐ/°"Ñ4Ô5Ü˜9 mÓ4ˆÙÜÐ>ÀÑCÔDÚØˆØ',ó 	Ñ#ˆJ˜˜tØ˜TÑ!ØØ�H‰H�ZÔ Ù˜œvšØÜ*6°zÀ5È$Ó*OÑ'ˆG�V˜T 4ØˆGÙØ—i‘iÑcÐ^bÔcÓc�Ù<C˜7 T™>¨CÑ/×6Ñ6Ô8È�Ùœc¤"§&¡&¨°b¸'Ó"B×"HÑ"HÓ"JÓKÈbÒPØ%¨Ò)9°EÑ:�Ø×ÑÜ&Ø Ò) EØ"šN dØ"Ø(Ø!ÙGKœtŸz™z¨$¸UÕCÐQUÜ#Øñ
ô 
ð �Q‰JˆEÜ�J‰J�tÖð3	ô4 	Ð.°"°e¼SÀ»^Ð1LÑLÖMðY,Nô\ 
Ð
&¬¨Y«Ñ
7Ô8Ü�Y¤Ô)Ü	Ð
(¬3¨y«>Ñ
9Õ:r   Ú__main__)N)-Ú__doc__rŽ   r   r   r<   rµ   Úhtmlr   Úurllib.parser   ÚrequestsÚbs4r   r�   ÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r±   r²   r1   r´   r¸   r·   r³   ÚUAr2   rœ   ÚSessionr/   r$   Úupdater   r    rC   r]   r_   rm   rŠ   r•   r¤   rÂ   Ú__name__r¨   r   r   ú<module>rÒ      s	  ðñó  
Û 	Û 
Û Û Û Ý  ã Ý à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à%€Ø-€Ø�hÑ Ñ$€ØE€	Ø€Ø€Ø	€ð;€à
€òÐ ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ  bÐ=MÑNÔ Oòòóò&ò>'ò
	/òò6òB;ò87;ðt ˆzÒÙ…Fð r   