Ë
    cœ…j­-  ã                   ór  — 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
Z
	 ddlmZ dZej                  j!                  dd«      Zer
de› �Zdd	iZneZi Zed
z   ZdZdZdZej                  j!                  dd«      ZdZdZdZdZdddddœZej=                  e«       dD ]I  Zej@                  jC                  e«      sŒeej@                  vsŒ.ej@                  jE                  de«       ŒK dZ# e$ejJ                  «      D ]k  \  Z&Z'e'jQ                  d«      r	  e)e'jU                  dd«      d   «      Z#Œ4e'dk(  sŒ:e&dz    e,ejJ                  «      k  sŒS	  e)ejJ                  e&dz      «      Z#Œm e#dk\  re#ndZ-d„ Z.d„ Z/d „ Z0d!„ Z1d"„ Z2e3d#k(  r e2«        yy# e$ r dZY �Œuw xY w# e+$ r Y Œ©w xY w# e+$ r Y Œ´w xY w)$uû  
æ±Ÿè¥¿çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ… - æ‰¹å‡†é¡¹ç›®å…¬å‘Š
http://sthjt.jiangxi.gov.cn/jxssthjt/col/col42171/index.html

ç«™ç‚¹: TRS jpage åŠ¨æ€�åˆ—è¡¨ (é¡µé�¢ HTML æ— æ–‡ç« é“¾æŽ¥, JS æ¸²æŸ“)
åˆ—è¡¨: POST /queryList (form: current/unitid=380055/webSiteCode=jxssthjt/channelCode=col42171/perPage/pageSize)
      å“�åº” data.total=231 æ�¡, results[].source å�« title/pubDate/content.content(å®Œæ•´HTMLæ­£æ–‡)/urls.pc(è¯¦æƒ…é¡µ)
      æ¯�é¡µ 15 æ�¡ (perPage=15)
è¯¦æƒ…: æ— éœ€äºŒæ¬¡è¯·æ±‚â€”â€”åˆ—è¡¨å“�åº”å·²å�«å®Œæ•´æ­£æ–‡ (content.content)
é™„ä»¶: articleFiles å­—æ®µ (æœ¬æ �ç›®ä¸ºç©º [{}])

âš ï¸� æœ�åŠ¡å™¨çŽ¯å¢ƒ HTTPS è®¿é—®å�¯èƒ½è¢«å��ä»£åŠ«æŒ�è¿”å›žèŽ’åŽ¿äººæ°‘æ”¿åºœé¡µé�¢! é»˜è®¤ç”¨ HTTPã€‚
   æœ¬åœ° DNS æŒ‚æ—¶: JXSTHJT_FORCE_IP=59.63.125.18 å¼ºåˆ¶ IP + Host å¤´ã€‚
é    N)ÚBeautifulSoupzhttp://sthjt.jiangxi.gov.cnÚJXSTHJT_FORCE_IPÚ úhttp://ÚHostzsthjt.jiangxi.gov.cnz
/queryListu+   æ±Ÿè¥¿çœ�ç”Ÿæ€�çŽ¯å¢ƒåŽ…-æ‰¹å‡†é¡¹ç›®å…¬å‘Šu   æ±Ÿè¥¿zcrawl_jxsthjt_pzxmgg.pyÚ
JXSTHJT_DBz/mnt/data/search.dbÚ380055ÚjxssthjtÚcol42171é   zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z!application/json, text/plain, */*z!application/x-www-form-urlencodedz<http://sthjt.jiangxi.gov.cn/jxssthjt/col/col42171/index.html)z
User-AgentÚAcceptzContent-TypeÚReferer)ú/root/gov_crawlerr   é   z--pages=ú=z--pagesc                 óR  — | syt        j                  | «      } t        j                  dd| «      } | j	                  dd«      j	                  dd«      j	                  dd«      j	                  dd«      j	                  dd«      } t        j                  d	d| «      } | j                  «       S )
zYunescape entities + strip &middot;&nbsp; prefix + strip zero-width + collapse whitespace.r   u   ^\s*[Â·â€¢]+\s*õ   Â ú u   â€‹u   â€Œu   â€�u   ï»¿ú\s+)Úhtml_libÚunescapeÚreÚsubÚreplaceÚstrip)Úts    ú)/root/gov_crawler/crawl_jxsthjt_pzxmgg.pyÚclean_titler   Q   s‘   € áØÜ×Ñ˜!Ó€AÜ
�‰Ð! 2 qÓ)€AØ	�	‰	�&˜#Ó×&Ñ& x°Ó4×<Ñ<¸XÀrÓJ×RÑRÐS[Ð]_Ó`×hÑhÐiqÐsuÓv€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 ó¬  — ddl }t        | «      t        t        t        t        t
        «      t        t
        «      dœ}d}t        d«      D ]^  }	 |j                  t        |t        d¬«      }|j                  dk(  r|j                  «       c S |}t        j                  d|d	z   z  «       Œ` t        |t        «      r|‚y# t        $ r}|}Y d}~Œ@d}~ww xY w)
z,POST /queryList page N, return results list.r   N)ÚcurrentÚunitidÚwebSiteCodeÚchannelCodeÚperPageÚpageSizeé   é   )ÚdataÚheadersÚtimeoutéÈ   g      ø?r   )ÚrequestsÚstrÚUNITIDÚWEBSITE_CODEÚCHANNEL_CODEÚ	PAGE_SIZEÚrangeÚpostÚAPI_URLÚHEADERSÚstatus_codeÚjsonÚ	ExceptionÚtimeÚsleepÚ
isinstance)Úpager-   r)   ÚlastÚiÚrÚes          r   Úapi_postrB   \   s¼   € ãä�t“9ÜÜ#Ü#Ü”y“>Üœ	“Nñ€Dð €DÜ�1‹Xò "ˆð	Ø—‘œg¨D¼'È2�ÓNˆAØ�}‰} Ò#Ø—v‘v“x’ØˆDô 	�
‰
�3˜!˜a™%‘=Õ!ð"ô �$œ	Ô"Øˆ
Øøô ò 	Ø�Dûð	ús   Á;B>ÂB>Â>	CÃCÃCc           
      ór	  ‡‡‡‡— | sddg fS t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        rQ	 t	        | d«      }|j                  d«      D ]%  }d	D ]  }|j                  j                  |d
«       Œ  Œ' t        |«      } | }g Ši Šˆˆˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }g Šˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }t        j                  d| t         j                  «      rdnd}t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }g }	|j                  d«      D ]ï  }
|
j                  «       }|sŒt        j                  dd|«      }t        j                  |«      }|j                  dd«      j                  dd«      }t        j                  dd|«      }|sŒ~‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ |	j%                  |j                  «       «       Œñ dj'                  |	«      }‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ t        j                  dd|«      }t        j                  dd|«      }t        j                  |«      }t        j                  d d|«      }t        j                  d!d|«      }t        j                  d"d|«      }t)        «       }g }|j                  d«      D ]X  }t        j                  d#dt        j                  dd|«      «      }|sŒ2||v rŒ7|j+                  |«       |j%                  |«       ŒZ dj'                  |«      j                  «       }||‰fS # t        $ r Y �Œ»w xY w)$zEConvert article HTML to stored format (same pipeline as gov scripts).r   r   z
<!--.*?-->)Úflagsz<script[^>]*>.*?</script>z<style[^>]*>.*?</style>zhtml.parserT)ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingNc                 ó:  •— | j                  d«      }| j                  d«      }t        j                  dd|«      }t        j                  |«      j                  «       }t        j                  dd|«      j                  «       }|s5t        j                  j                  |j                  d«      d   «      xs d}t        j                  j                  ‰t        j                  |«      «      }‰j                  ||f«       d	t        ‰«      › d
�}d|› d|› d�‰|<   |S )Nr   é   ú<[^>]+>r   u   ^é™„ä»¶[:ï¼š]\s*ú?r   u   é™„ä»¶Ú__LINK__Ú__z	<a href="ú" target="_blank">z</a>)Úgroupr   r   r   r   r   ÚosÚpathÚbasenameÚsplitÚurllibÚparseÚurljoinÚappendÚlen)	ÚmÚhrefÚinnerÚtxtÚabs_urlÚkeyÚattachmentsÚlink_protectÚpage_urls	         €€€r   Ú
_link_replz html_to_text.<locals>._link_repl‹   só   ø€ Ø�w‰w�q‹zˆØ—‘˜“
ˆÜ�f‰f�Z  UÓ+ˆÜ×Ñ Ó$×*Ñ*Ó,ˆÜ�f‰fÐ(¨"¨cÓ2×8Ñ8Ó:ˆÙÜ—'‘'×"Ñ" 4§:¡:¨c£?°1Ñ#5Ó6ÒB¸(ˆCÜ—,‘,×&Ñ& x´×1BÑ1BÀ4Ó1HÓIˆØ×Ñ˜G S˜>Ô*Øœ˜\Ó*Ð+¨2Ð.ˆØ'¨ yÐ0BÀ3À%ÀtÐLˆ�SÑØˆ
r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r   rU   )r_   rW   r`   )ra   Útable_protects    €r   Ú	_tbl_replzhtml_to_text.<locals>._tbl_replœ   s3   ø€ Ø×Ñ˜QŸW™W Q›ZÔ(Øœ˜]Ó+¨AÑ-Ð.¨bÐ1Ð1r   z<table[^>]*>.*?</table>z<table[^>]*>r   z</p>z</p>

z	<br\s*/?>ú
z(</?(?:span|font|o:p|st1?:[a-z]+)\b[^>]*>z

rR   r   r   z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+rl   rU   z__LINK__\d+__z__TBL__\d+__z[ \t]+\nz\n{3,}z	[ \t]{2,}r   )r   r   ÚSÚIr   Úfind_allÚattrsÚpopr.   r9   Úsearchr[   r   r   r   r   ÚitemsÚ	enumerater_   ÚjoinÚsetÚadd)Úcontentri   Ú_soupÚtagÚattrÚcontent2rj   rn   Ú	has_tableÚpartsÚblockÚbÚplainÚkÚvr?   ÚtblÚoutÚseenÚfinalÚprf   rg   rh   rm   s    `                    @@@r   Úhtml_to_textrŒ   v   s  û€ áØ�1�bˆyÐÜ�f‰f�] B¨´r·t±tÔ<€GÜ�f‰fÐ1°2°wÄbÇdÁdÌRÏTÉTÁkÔR€GÜ�f‰fÐ/°°WÄBÇDÁDÌ2Ï4É4ÁKÔP€GÝð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Lò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGð
 €HØ€KØ€Löô �v‰vÐ?ÀÈXÔ]_×]aÑ]aÔdf×dhÑdhÑ]hÔi€Hð €Mô2ô �v‰vÐ0°)¸XÌRÏTÉTÔTV×TXÑTXÉ[ÔY€HÜ—Y‘Y˜°¼¿¹Ô>‘ÀA€Iä�v‰v�g˜z¨8¼2¿4¹4Ô@€HÜ�v‰v�l D¨(¼"¿$¹$Ô?€HÜ�v‰vÐAÀ2ÀxÔWY×W[ÑW[Ô\€Hà€EØ—‘ Ó'ò  ˆØ�K‰K‹MˆÙØÜ—‘�z 2 qÓ)ˆÜ×!Ñ! %Ó(ˆØ—‘˜f cÓ*×2Ñ2°8¸SÓAˆÜ—‘Ð7¸¸UÓCˆÙØØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	0‰FˆAˆsØ—	‘	˜G A 3 b˜/¨3Ó/‰Að	0à�‰�Q—W‘W“YÕð ð  �+‰+�eÓ
€CØ×"Ñ"Ó$ò  ‰ˆˆ1Ø�k‰k˜!˜QÓ‰ð ä˜MÓ*ò 0‰ˆˆ3Ø�k‰k˜G A 3 b˜/¨3Ó/‰ð0ô �&‰&Ð! 2 sÓ
+€CÜ
�&‰&� " cÓ
*€Cä
×
Ñ
˜CÓ
 €CÜ
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cô ‹5€DØ€EØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cà�	˜;Ð&Ð&øô] ò 	Úð	ús   Â*AR) Ò)	R6Ò5R6c                 ó”  — | j                  d|f«      }|j                  «       ry	 d}	 ddlm}  ||«      }| j                  d|||||t
        t        t        ||f
«      }|j                  dkD  ryt        j                  dd|«      }	t        j                  |	«      }	t        j                  d	d
|	«      j                  «       d d }	| j                  d|j                  |t
        |	f«       yy# t        $ r Y Œ¼w xY w# t        j                   $ r=}
dt#        |
«      v r*t%        j&                  d«       t)        | |||||«      cY d }
~
S ‚ d }
~
ww xY w)Nz'SELECT id FROM gov_raw WHERE page_url=?FÚotherr   )Úclassify_industryz¨INSERT OR IGNORE INTO gov_raw (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, industry) VALUES (?,?,?,?,?,?,?,?,?,?)rR   r   r   r   r,   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedr'   )ÚexecuteÚfetchoneÚcrawler_libr�   r9   Ú	SITE_NAMEÚ
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorr.   r:   r;   Ústore_record)ÚconnÚurlÚtitler{   Údater€   ÚcurÚindustryr�   ÚsummaryrA   s              r   r›   r›   Õ   sF  € Ø
�,‰,Ø1Ø	ˆó€Cð ‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHð �l‰lð+ð �#�u˜g t¬Y¼
ÄKÐQZÐ\dÐeó	
ˆð �<‰<˜!ÒÜ—f‘f˜Z¨¨WÓ5ˆGÜ×'Ñ'¨Ó0ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGØ�L‰LØfØ—‘ ¤y°'Ð:ôð Øøô# ò 	Ùð	ûô$ ×#Ñ#ò Ø”s˜1“vÑÜ�J‰J�qŒMÜ  c¨5°'¸4ÀÓKÕKØûð	úsF   ¦C7 ©C( ·B/C7 Ã(	C4Ã1C7 Ã3C4Ã4C7 Ã7EÄ
1EÄ;EÅEÅEc                  óÚ  — t        j                  t        d¬«      } | j                  d«       | j                  d«       d}d}t	        «       }t        d«      }|rd|vrt        d«       y |d   j                  d	d«      }t        d|t        z   dz
  t        z  «      }t        d
|› d|› dt        t        |«      › �«       t        dt        t        |«      dz   «      D �]­  }|dkD  rt        |«      }|rd|vrŒ|d   j                  dg «      }|sŒ3|D �]u  }	|	j                  di «      }
t        |
j                  dd«      «      }|
j                  d«      xs dd d }	 t        j                  |
j                  d«      xs d«      }|j                  dd«      xs d}|sd|
j                  dd«      › d�}t"        j$                  j'                  t(        |«      }||v rŒÉ|j+                  |«       d}	 |
j                  d«      xs i }t-        |t.        «      r|j                  dd«      nd}	 |
j                  d«      xs d}t-        |t0        «      rt        j                  |«      }t-        |t2        «      rà|D ]Û  }t-        |t.        «      sŒ|j                  d«      xs |j                  d«      xs d}|j                  d«      xs |j                  d«      xs d}|sŒg|j5                  d «      s$t"        j$                  j'                  t(        |«      }|d!|› d"t7        j8                  |xs t:        j<                  j?                  |«      «      › d#�z  }ŒÝ tA        ||«      \  }}}|s|dz  }�ŒZtC        | |||||«      r|dz  }�Œq|dz  }�Œx �Œ° | jE                  «        | jG                  «        t        d$|› �«       y # t         $ r d}Y �Œ1w xY w# t         $ r d}Y �Œµw xY w# t         $ r Y Œ™w xY w)%Né<   )r+   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr   r   r)   u   æ–°å¢ž: 0 (api error)Útotalztotal=z total_pages=u    æœ¬æ¬¡æŠ“å�–é¡µæ•°=ÚresultsÚsourcerž   r   ÚpubDateé
   Úurlsz{}Úpcz'/jxssthjt/col/col42171/content/content_Úidz.htmlr{   ÚarticleFilesz[]ÚnameÚfileNamer�   ÚfileUrl)r   zhttps://z
<p><a href="rV   z</a></p>u   æ–°å¢ž: )$r™   ÚconnectÚDB_PATHr‘   ry   rB   ÚprintÚgetÚmaxr2   ÚminÚ_PAGESr3   r   r8   Úloadsr9   r\   r]   r^   ÚBASE_URLrz   r<   Údictr.   ÚlistÚ
startswithr   ÚescaperX   rY   rZ   rŒ   r›   ÚcommitÚclose)rœ   Ú	new_countÚ
skip_countÚ	seen_urlsÚdr¥   Útotal_pagesr=   r¦   ÚitemÚsrcrž   Úpub_daterª   Údetail_pathr�   Úcontent_htmlÚcÚfilesÚfÚfnameÚfurlr{   r€   rg   s                            r   ÚmainrÏ   ú   sâ  € Ü�?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+à€IØ€JÜ“€Iô 	�‹€AÙ�˜a‘ÜÐ%Ô&ØØˆf‰I�M‰M˜' 1Ó%€EÜ�a˜%¤)Ñ+¨aÑ/´IÑ=Ó>€KÜ	ˆF�5�'˜ { mÐ3GÌÌFÐT_ÓH`ÐGaÐ
bÔcä�aœœV [Ó1°AÑ5Ó6ó 6 ˆØ�!Š8Ü˜“ˆAÙ˜ a™ØØ�F‘)—-‘- 	¨2Ó.ˆÙØØó .	 ˆDØ—(‘(˜8 RÓ(ˆCÜ §¡¨°Ó 4Ó5ˆEØŸ™ 	Ó*Ò0¨b°#°2Ð6ˆHð!Ü—z‘z #§'¡'¨&£/Ò"9°TÓ:�Ø"Ÿh™h t¨RÓ0Ò6°B�ñ Ø GÈÏÉÐPTÐUWÓHXÐGYÐY^Ð_�Ü—,‘,×&Ñ&¤x°Ó=ˆCØ�iÑØØ�M‰M˜#ÔàˆLð"Ø—G‘G˜IÓ&Ò,¨"�Ü7AÀ!ÄTÔ7J˜qŸu™u Y°Ô3ÐPR�ðØŸ™ Ó/Ò7°4�Ü˜e¤SÔ)Ü ŸJ™J uÓ-�EÜ˜e¤TÔ*Ø"ò T˜Ü% a¬Õ.Ø$%§E¡E¨&£MÒ$L°Q·U±U¸:Ó5FÒ$LÈ"˜EØ#$§5¡5¨£<Ò#I°1·5±5¸Ó3CÒ#IÀr˜DÚ#Ø'+§¡Ð7NÔ'OÜ+1¯<©<×+?Ñ+?ÄÈ$Ó+O DØ ,°.ÀÀÐFXÔYa×YhÑYhÐinò  jIÔrt×ryÑry÷  sCñ  sCð  DHó  sIó  ZJð  YKð  KSð  1Tñ  !T¡ðTô /;¸<ÈÓ.MÑ+ˆG�Y ÙØ˜a‘�
ÙÜ˜D # u¨g°xÀÔKØ˜Q‘’	à˜a‘’
ò].	 ð6 ðp 	‡K�K„MØ‡J�J„LÜ	ˆH�Y�KÐ
 Õ!øôU ò !Ø “ð!ûô ò "Ø!“ð"ûô  ò ÙðúsE   Å>N:Ç,9OÈ&AOÊAOËA7OÎ:O	ÏO	ÏOÏOÏ	O*Ï)O*Ú__main__)4Ú__doc__ÚsysrX   r   r:   r8   Úhtmlr   Úurllib.parser\   r™   Úbs4r   ÚImportErrorÚ_BASE_DOMAINÚenvironr´   Ú	_FORCE_IPr¹   Ú_EXTRA_HEADERSr5   r”   r•   r–   r²   r/   r0   r1   r2   r6   ÚupdateÚ_prY   ÚisdirÚinsertÚ
_MAX_PAGESrw   Úargvr?   Úar¼   Úintr[   Ú
ValueErrorr`   r·   r   rB   rŒ   r›   rÏ   Ú__name__© r   r   ú<module>ræ      s  ðñó Û 	Û 	Û Û Û Û Û ðÝ!ð
 -€Ø�J‰J�N‰NÐ-¨rÓ2€	ÙØ˜˜Ð$€HØÐ4Ð5�Nà€HØ€NØ
�\Ñ
!€Ø9€	Ø€
Ø'€Ø
�*‰*�.‰.˜Ð'<Ó
=€Ø	€Ø€Ø€Ø€	ð @Ø1Ø7ØMñ	€ð ‡�ˆ~Ô ð 5ò €BØ	‡w�w‡}�}�RÕ˜R s§x¡xÒ/Ø�‰�‰˜˜2Õðð
 €
Ù�c—h‘hÓò 
�D€A€qØ‡|�|�JÔð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆi‹˜A ™E¡C¨¯©£MÓ1ð	Ù˜SŸX™X a¨!¡e™_Ó-‰Jð
ð " Q’‰¨A€òòò4\'ò~"òJL"ð^ ˆzÒÙ…Fð øð[	 ò ØƒMðûðR ò 	Ùð	ûð
 ò 	Ùð	ús5   ¤F ÄF#ÅF.ÆF ÆF Æ#F+Æ*F+Æ.F6Æ5F6