Ë
    }…jP   ã                   óD  — 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ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ dZdZdd„Zd„ Zd„ Zd	„ Zed
k(  r ej,                   e«       «       yy)už   æœ¬åœ° Mac æŠ“å�– yanshou100 (ç»•è¿‡æœ�åŠ¡å™¨ IP é™�æµ�) â†’ JSONL
ç”¨æ³•: python3 crawl_yanshou100_local.py --pages 5 --type yanshou|qita --out /tmp/x.jsonl
é    N)Úpush_to_searchdbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36zhttps://www.yanshou100.comc              ƒ   ó  K  — d|rdnd› dt        j                  |«      › dt        j                  |«      › dt        › d|› d�}	 | j                  |«      ƒ d {  –—† S 7 Œ# t        $ r}d	t        |«      d d
 dœcY d }~S d }~ww xY w­w)NzÕ
    async () => {
        const opts = {
            method: 'POST',
            headers: {'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json, text/javascript, */*; q=0.01'}
        };
        if (ÚtrueÚfalsez€) {
            opts.headers['Content-Type'] = 'application/x-www-form-urlencoded';
            opts.body = new URLSearchParams(z…).toString();
        } else {
            opts.headers['Content-Type'] = 'application/json';
            opts.body = JSON.stringify(z,);
        }
        const r = await fetch('z' + 'zó', opts);
        const ct = r.headers.get('content-type') || '';
        if (ct.includes('application/json')) {
            return await r.json();
        }
        return {'code': 'notjson', 'msg': (await r.text()).slice(0, 120)};
    }
    Úerréd   )ÚcodeÚmsg)ÚjsonÚdumpsÚBASEÚevaluateÚ	ExceptionÚstr)ÚpageÚurlÚpayloadÚformÚjsÚes         ú+/root/gov_crawler/crawl_yanshou100_local.pyÚapi_postr      sœ   è ø€ ðñ ‰V Ð)ð *-ä-1¯Z©Z¸Ó-@Ð,Að B(ô )-¯
©
°7Ó(;Ð'<ð = ä $˜v U¨3¨%ð 0ð
€Bð*4Ø—]‘] 2Ó&×&Ð&Ð&ùÜò 4Ø¤c¨!£f¨T¨c lÑ3Õ3ûð4üsH   ‚ABÁA ÁAÁA ÁBÁA Á	BÁ(A>Á8BÁ9BÁ>BÂBc                 ó  — ddl m} ddlm}  || d«      } |g d¢«      D ]  }|j	                  «        Œ |j                  d«      D ]ˆ  }|j                  d«      xs |j                  d«      xs d	}|rL|j                  d
«      r|n |t        |«      }|j                  d|¬«      }d|_
        |j                  |«       Œy|j	                  «        ŒŠ |j                  ddi¬«      D ]  }|d= Œ |j                  g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]p  }|j                  dd	«      }	|	r5|	j                  d«      s$|	j                  d
«      r|	n |t        |	«      |d<   ŒL|	sŒO|	j                  d«      sŒa|j	                  «        Œr |j                  d«      D ]I  }
|
j                  d¬«      rŒ|
j                  d«      rŒ(|
j                  d«      rŒ:|
j	                  «        ŒK t        |«      S )uM   ç™½å��å�•æ¸…æ´—: ä¿�ç•™ <p>/<table>/<a>, unwrap è£…é¥°æ ‡ç­¾, é“¾æŽ¥ç»�å¯¹åŒ–r   )ÚBeautifulSoup)Úurljoinzhtml.parser)ÚscriptÚstyleÚiframeÚobjectÚimgÚsrczdata-srcÚ ÚhttpÚa)Úhrefu   æŸ¥çœ‹å›¾ç‰‡ÚhiddenT)Úattrs)ÚdivÚspanÚfontÚcenterÚbÚstrongÚemÚiÚuÚsÚlabelr%   Ú
javascriptÚp)ÚstripÚtable)Úbs4r   Úurllib.parser   Ú	decomposeÚfind_allÚgetÚ
startswithr   Únew_tagÚstringÚreplace_withÚunwrapÚget_textÚfindr   )Úhtmlr   r   ÚsoupÚtr    r!   Úabs_srcr$   r%   r4   s              r   Ú
clean_htmlrG   (   s»  € å!Ý$Ù˜˜}Ó-€DÙÒ9Ó:ò ˆØ	�‰�ðà�}‰}˜UÓ#ò ˆØ�g‰g�e‹nÒ9 §¡¨
Ó 3Ò9°rˆÙØ Ÿ^™^¨FÔ3‘c¹ÄÀsÓ9KˆGØ—‘˜S w�Ó/ˆAØ%ˆAŒHØ×Ñ˜QÕà�M‰M�Oðð �]‰] (¨DÐ!1ˆ]Ó2ò ˆØˆh‰Kðà�]‰]ÒiÓjò ˆØ	�‰�
ðà�]‰]˜3Óò ˆØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô5Ø $§¡°Ô 7™¹WÄTÈ4Ó=PˆAˆfŠIÚ�d—o‘o lÕ3Ø�K‰K�Mðð �]‰]˜3Óò ˆØ�z‰z ˆzÕ%¨a¯f©f°W­oÀaÇfÁfÈUÅmØ�K‰K�Mðô ˆt‹9Ðó    c           	   ƒ   óT  ‡K  — t         › d|› �}t        d«      D �]>  }	 | j                  |dd¬«      ƒ d {  –—†  | j	                  d«      ƒ d {  –—†  | j                  «       ƒ d {  –—† Št        j                  d‰«      }|r@|j                  d«      j                  «       r!|j                  d«      j                  «       d	v rt        j                  d
‰«      }|r4t        j                  dd|j                  d«      «      j                  «       nd}|j                  dd«      j                  «       }|r n&t        j                  d|dz   z  «      ƒ d {  –—†  �ŒA s|dxx   dz  cc<   y t        j                  d‰«      }|r"|j                  d«      j                  «       d d nd}	ˆfd„}
 |
d«      }d}	 | j                  d«      ƒ d {  –—† }|s+t        j                  d‰«      }|r|j                  d«      nd}|rt        |«      nd}g }t        j                   d‰«      D ]D  }|j                  d«      |j                  d«      }}|j#                  |t         › d|› d|› �dœ«       ŒF t%        «       }g }|D ]/  }|d   |vsŒ|j'                  |d   «       |j#                  |«       Œ1 d}|D ]  }|d|d   › d|d   › d �z  }Œ |r|d!z   |z   j                  «       }||||	||||d"œ}|d#xx   dz  cc<   |S 7 �ŒÃ# t        $ r Y �ŒÍw xY w7 �Œ½7 �Œ¨7 �Œ¾7 �ŒI# t        $ r Y �ŒSw xY w­w)$Nz/item_detail.html?id=é   Údomcontentloadedé0u  ©Ú
wait_untilÚtimeouti˜  z#id="itemName1"[^>]*>\s*([^<]+?)\s*<é   )ú&nbsp;z&nbsp;&nbsp;z#id="itemName2"[^>]*>\s*([^<]+?)\s*<ú\s+ú r"   rQ   g       @Údetail_failu3   id="createDate"[^>]*>\s*æ—¶é—´[ï¼š:]\s*([^<]+?)\s*<é
   c                 ó¬   •— t        j                  d| z   dz   ‰«      }|r4t        j                  dd|j                  d«      «      j	                  «       S dS )Nzid="z"[^>]*>\s*([^<]+?)\s*<rR   rS   rP   r"   )ÚreÚsearchÚsubÚgroupr5   )ÚfidÚmÚcs     €r   Úfieldz fetch_detail_page.<locals>.field^   sH   ø€ Ü�I‰I�g ‘mÐ&?Ñ?ÀÓCˆÙ:;Œr�v‰v�f˜c 1§7¡7¨1£:Ó.×4Ñ4Ó6ÐCÀÐCrH   ÚcompanyNamea_  
        (() => {
            const info = document.getElementById('itemInfo');
            if (!info) return '';
            let tbl = info.closest('table');
            if (!tbl) return '';
            const attTr = tbl.querySelector('tr#tr_attachment');
            if (attTr) attTr.remove();
            return tbl.outerHTML;
        })()
        z#id="itemInfo"[^>]*>([\s\S]*?)</div>z!jumpToFile\('([^']+)','([^']+)'\)é   z/item/showFile?fileId=z
&fileName=)ÚfileNameÚfileUrlrb   z<p><a href="z">ra   z</a></p>ú
)Útitler   Úpage_urlÚpublish_dateÚcontentÚauthorÚ	site_nameÚattachmentsÚok)r   ÚrangeÚgotor   Úwait_for_timeoutrg   rW   rX   rZ   r5   rY   ÚreplaceÚasyncioÚsleepr   rG   ÚfinditerÚappendÚsetÚadd)r   Úitem_idÚstatsri   r   ÚattemptrE   rd   ÚdmÚpubr^   ÚcompanyÚbodyÚimÚattsr\   ÚfaÚfnÚseenÚatts2r$   Úatt_pÚitemr]   s                          @r   Úfetch_detail_pager…   H   s?  øè ø€ ÜˆFÐ'¨ yÐ
1€CÜ˜“8ó 1ˆð	Ø—)‘)˜CÐ,>È�)ÓN×NÐNð ×#Ñ# DÓ)×)Ð)Ø—,‘,“.× ˆÜ�I‰IÐ<¸aÓ@ˆÙ˜Ÿ™ ›
×(Ñ(Ô*¨a¯g©g°a«j×.>Ñ.>Ó.@ÐD^Ñ.^Ü—	‘	Ð@À!ÓDˆAÙ;<”—‘�v˜s A§G¡G¨A£JÓ/×5Ñ5Ô7À"ˆØ—‘˜h¨Ó+×1Ñ1Ó3ˆÙÙÜ�m‰m˜C 7¨Q¡;Ñ/Ó0×0Ò0ð1ñ ØˆmÓ Ñ!ÓØÜ	�‰ÐIÈ1Ó	M€BÙ&(ˆ"�(‰(�1‹+×
Ñ
Ó
˜c˜rÑ
"¨b€CôDñ �MÓ"€Gð €DðØ—]‘]ð 
$ó 
÷ 
ˆñ Ü�Y‰YÐ=¸qÓAˆÙ ˆr�x‰x˜Œ{ bˆÙ#Œ:�dÔ¨€DØ€DÜ�[‰[Ð=¸qÓAò dˆØ—‘˜“˜QŸW™W Q›ZˆBˆØ�‰ ´4°&Ð8NÈrÈdÐR\Ð]_Ð\`Ð0aÑbÕcðdô ‹5€DØ€EØò ˆØˆY‰<˜tÒ#Ø�H‰H�Q�y‘\Ô"Ø�L‰L˜�Oðð €EØò HˆØ�<  )¡˜~¨R°°*±¨¸hÐGÑG‰ðHáØ�t‘˜eÑ#×*Ñ*Ó,ˆàØØØØØØØñ	€Dð 
ˆ$ƒK�1ÑƒKØ€KðM OúÜò 	Úð	úà)ùØ ùð 	1ùð
úô ò Úðüs§   ƒL(ŸK<¶K9·K<»L(ÁLÁL(Á'LÁ(C,L(ÅLÅA"L(Æ8L ÇLÇL ÇB3L(ÊA4L(Ë9K<Ë<	L	ÌL(ÌL	Ì	L(ÌL(ÌL(ÌL Ì	L%Ì!L(Ì$L%Ì%L(c               ƒ   óØ  K  — t        j                  «       } | j                  dt        d¬«       | j                  dd¬«       | j                  dd¬«       | j	                  «       }d	|j
                  z   }d
d
dœ}t        |j                  dd¬«      }	 d
dlm	}  |«       4 ƒd {  –—† }|j                  j                  d¬«      ƒ d {  –—† }|j                  t        d¬«      ƒ d {  –—† }|j                  «       ƒ d {  –—† }	|	j                  t         dz   dd¬«      ƒ d {  –—†  |	j#                  d«      ƒ d {  –—†  g }
t%        d|j&                  dz   «      D �]	  }|d|j
                  ddddddddœ
}t)        |	d|«      ƒ d {  –—† }|rt+        |j-                  d«      «      dvr!t/        d|› d t+        |«      d d! › �d¬"«        nž|j-                  d#«      xs g }|D ]*  }|j-                  d$«      |
vsŒ|
j1                  |d$   «       Œ, t/        d|› d%t3        |«      › d&t3        |
«      › d'|j-                  d(«      › �d¬"«       t5        j6                  d«      ƒ d {  –—†  �Œ t/        d)t3        |
«      › d*�d¬"«       t9        |
«      D ]¾  \  }}t;        |	|||«      ƒ d {  –—† }|r9|j=                  t?        j@                  |d+¬,«      d-z   «       |jC                  «        t5        j6                  tE        jF                  d.d/«      «      ƒ d {  –—†  |dz   d0z  d
k(  sŒ”t/        d1|dz   › dt3        |
«      › d2|d3   › d4|d5   › �d¬"«       ŒÀ |jI                  «       ƒ d {  –—†  d d d «      ƒd {  –—†  |jI                  «        t/        d6|d3   › d4|d5   › �d¬"«       y 7 �Œü7 �ŒÛ7 �Œ¿7 �Œª7 �ŒŠ7 �Œt7 �Œ,7 �ŒU7 �Œ7 Œª7 Œ[7 ŒM# 1 ƒd {  –—†7  sw Y   Œ]xY w# |jI                  «        w xY w­w)7Nz--pagesé   )ÚtypeÚdefaultz--typeÚyanshou)r‰   z--outz/tmp/ys100_local.jsonlÚyanshou100_r   )rk   rT   Úwzutf-8)Úencoding)Úasync_playwrightT)Úheadless)Ú
user_agentÚignore_https_errorsú/rK   rL   rM   iÐ  rP   é   r"   )
r   ÚlimitÚ
publicTypeÚitemNameÚstartÚendÚcityÚareaÚparTypeÚsunTypez/item/searchr	   )Ú0Ú200u   é¡µu   : APIå¤±è´¥ éÈ   )ÚflushÚdataÚitemIdz: u    æ�¡, ç´¯è®¡ z, total=Úcountu   å…± u    ä¸ª itemIdF)Úensure_asciirc   g      ð?gÍÌÌÌÌÌü?rU   u   è¯¦æƒ… z: ok=rk   z fail=rT   u   å®Œæˆ�: ok=)%ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsrˆ   ÚopenÚoutÚplaywright.async_apirŽ   ÚchromiumÚlaunchÚnew_contextÚUAÚnew_pagerm   r   rn   rl   Úpagesr   r   r;   Úprintrs   Úlenrp   rq   Ú	enumerater…   Úwriter   r   r    ÚrandomÚuniformÚclose)ÚapÚargsri   rw   Úout_fprŽ   r4   ÚbrowserÚctxr   Úall_idsÚpgr   ÚdÚitemsÚitr/   Úiidr„   s                      r   ÚmainrÅ   ”   s£  è ø€ Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ3Ø‡O�O�H i€OÔ0Ø‡O�O�GÐ%=€OÔ>Ø�=‰=‹?€DØ §	¡	Ñ)€IØ QÑ'€EÜ�$—(‘(˜C¨'Ô2€Fð"Ý9Ù#Ó%÷ 	"ð 	"¨ØŸJ™J×-Ñ-°tÐ-Ó<×<ˆGØ×+Ñ+´rÈtÐ+ÓT×TˆCØŸ™›×'ˆDØ—)‘)œD 3™JÐ3EÈu�)ÓU×UÐUØ×'Ñ'¨Ó-×-Ð-ØˆGÜ˜A˜tŸz™z¨A™~Ó.ó '�Ø#%°À$Ç)Á)Ø')°B¸rÈ2Ø#%°"ÀñE�ô # 4¨¸ÓA×A�ÙœS §¡ v£Ó/°|ÑCÜ˜C ˜t <´°A³°t¸°¨~Ð>ÀdÕKÙØŸ™˜f›Ò+¨�Øò 5�BØ—v‘v˜hÓ'¨wÒ6ØŸ™ r¨(¡|Õ4ð5ô ˜˜B˜4˜r¤# e£* ¨]¼3¸w»<¸.ÈÐQR×QVÑQVÐW^ÓQ_ÐP`ÐaÐimÕnÜ—m‘m AÓ&×&Ò&ð'ô �Dœ˜W›˜ kÐ2¸$Õ?Ü# GÓ,ò t‘��3Ü.¨t°S¸%ÀÓK×K�ÙØ—L‘L¤§¡¨D¸uÔ!EÈÑ!LÔMØ—L‘L”NÜ—m‘m¤F§N¡N°3¸Ó$<Ó=×=Ð=Ø˜‘E˜R‘< 1Ó$Ü˜G A a¡C 5¨¬#¨g«,¨°u¸UÀ4¹[¸MÈÐPUÐVcÑPdÐOeÐfÐnrÖsðtð —-‘-“/×!Ð!÷=	"÷ 	"ð@ 	�‰ŒÜ	ˆK˜˜d™�} F¨5°Ñ+?Ð*@Ð
AÈÖNðC	"ùØ<ùØTùØ'ùØUùØ-ùð Bùð 'ùð Lùð >øð "øð=	"ø÷ 	"÷ 	"ñ 	"ûð@ 	�‰�üs,  ‚BO*ÂO Â#NÂ$O Â' O ÃN"ÃO Ã&N%Ã'O Ã>N(Ã?"O Ä!N+Ä"O Ä:N.Ä;A
O ÆN1ÆA0O Ç7A(O ÉN4É AO Ê#N7Ê$A+O ÌN:ÌO Ì A O Í N<Í!O Í%O Í0N>Í1O Í5*O*ÎO Î"O Î%O Î(O Î+O Î.O Î1O Î4O Î7O Î:O Î<O Î>O Ï OÏO	ÏOÏO ÏO'Ï'O*Ú__main__)F)Ú__doc__r¥   rp   r   rW   Úsysr·   ÚosÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r°   r   r   rG   r…   rÅ   Ú__name__Úrun© rH   r   ú<module>rÓ      s‰   ðñ÷ 4× 3× 3Ó 3à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (àv€Ø#€ó4ò6ò@JòX,Oð\ ˆzÒØ€G‡K�K‘“Õð rH   