Ë
    ¸¬ujî"  ã                   ó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mZ ddl	m	Z	 dZ
dZdZedz   Zd	d	d
ddd	ddddœ	ZddddœZddlZ ej"                  «       Zej'                  dedd¬«       ej'                  ddd¬«       ej+                  «       Zej.                  dkD  rej.                  ndZd„ Zd„ Zd„ Zd „ Zg Z e«       Z ed!«        e d"ed"z   «      D ]x  Z! ee!«      \  Z"Z#e"€ nidZ$e"D ]>  Z% ee%«      Z&e&re&d#   ev rŒejO                  e&d#   «       ejQ                  e&«       e$d"z  Z$Œ@  ed$e!› d%e$› d& e)e«      › de#› d'�	«       e$dk(  sŒx n  e*d( e)e«      › d)�«       es e*d*«        ejV                  d«       ejX                  j[                  dejX                  j]                  ejX                  j_                  e0«      «      «       	 dd+l1m2Z2m3Z3  e	jl                  «       jn                  Z8g Z9 e:e«      D �]$  \  Z;Z& ed.e;d"z   › d e)e«      › d/e&d0   dd1 › d2�«        ee&d#   «      \  Z<Z=Z>e<se&d0   Z<e&d3   Z?e?s] ej€                  d4e&d#   «      ZAeArEeAj…                  d"«      › d5 eeAj…                  d6«      «      d7›d5 eeAj…                  d8«      «      d7›�Z?dZCe?r9 e)e?«      d9k\  r.	  e	jˆ                  e?dd9 d:«      ZE eeEj�                  d;«      «      ZCd<e=v r ee=d=«      j�                  d>¬?«      ne=dd@ ZHe9jQ                  e<e&d#   e=e?eCeHe&d#   e>e&d#   dAœ	«       �Œ'  e*dB e)e9«      › dC�«        e2e9e«      \  ZIZJ e*dDeI› dEeJ› �«        e3«       ZKeKj™                  dFef«      j›                  «       d   ZNeKjŸ                  «         e*dGe› dHeN› d)�«       y# e4$ r ddl5Z5d,„ Z2d-„ Z3Y �ŒÖw xY w#  Y ŒÚxY w)IuÂ   
æ±Ÿè‹�çœ�å�‘å±•å’Œæ”¹é�©å§”å‘˜ä¼š - è¡Œæ”¿è®¸å�¯å…¬ç¤º
URL: https://fzggw.jiangsu.gov.cn/col/col59371/index.html
CMS: HanWeb/TRS with jpage dataproxy
Detail: /art/YYYY/M/D/art_59371_ARTID.html
é    N)ÚBeautifulSoup)Údatetimez/root/search.dbu%   æ±Ÿè‹�çœ�å�‘æ”¹å§”-è¡Œæ”¿è®¸å�¯å…¬ç¤ºzhttps://fzggw.jiangsu.gov.cnz/module/web/jpage/dataproxy.jspÚ1Ú3ú/Ú59371Ú394197u!   æ±Ÿè‹�çœ�å�‘å±•å’Œæ”¹é�©å§”å‘˜ä¼šÚ0)	ÚcolÚappidÚwebidÚpathÚcolumnidÚsourceContentTypeÚunitidÚwebnameÚpermissiontypezoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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-Languagez--pageszPages to crawl (0 = all))ÚtypeÚdefaultÚhelpz	--verbosez-vÚ
store_true)Úactionéc   c                 óŠ   — t         j                  r3t        dt        j                  «       j                  d«      › d| › �«       y y )Nú[z%H:%M:%Sú] )ÚargsÚverboseÚprintr   ÚnowÚstrftime)Úmsgs    ú*/root/gov_crawler/crawl_fzggw_js_xzxkgs.pyÚlogr%   -   s5   € Ü‡|‚|Ü�”(—,‘,“.×)Ñ)¨*Ó5Ð6°b¸¸Ð>Õ?ð ó    c                 ó  — t        t        «      }t        | «      |d<   	 t        j                  t
        |t        d¬«      }d|_        |j                  dk7  rt        d| › d|j                  › �«       y|j                  }t        j                  d	|«      }|rt        |j                  d
«      «      nd}t        j                  d|t        j                   «      }||fS # t"        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)NÚpageé   )ÚparamsÚheadersÚtimeoutúutf-8éÈ   z	API page z
 returned )Nr   z<totalrecord>(\d+)é   r   z&<record><!\[CDATA\[(.*?)\]\]></record>zError fetching page ú: )ÚdictÚ
API_PARAMSÚstrÚrequestsÚgetÚAPI_URLÚHEADERSÚencodingÚstatus_coder%   ÚtextÚreÚsearchÚintÚgroupÚfindallÚDOTALLÚ	Exception)Úpage_numr*   ÚrÚdataÚtotal_mÚtotalÚrecordsÚes           r$   Úfetch_list_pagerI   1   sÜ   € Ü”*Ó€FÜ˜“]€Fˆ6�NðÜ�L‰Lœ¨¼È"ÔMˆØˆŒ
Ø�=‰=˜CÒÜ�)˜H˜: Z°·±¨Ð?Ô@ØØ�v‰vˆÜ—)‘)Ð1°4Ó8ˆÙ)0”�G—M‘M !Ó$Ô%°aˆÜ—*‘*ÐFÈÌbÏiÉiÓXˆØ˜ˆ~ÐøÜò ÜÐ" 8 *¨B¨q¨cÐ2Ô3Üûðús   ŸAC Á2A(C Ã	C?Ã$C:Ã:C?c                 óà  — t        | d«      }|j                  d«      }|sy |j                  dd«      }|rd|vry |j                  dd«      xs |j                  d¬«      }|sy t	        j
                  d	d
|«      j                  «       }|j                  d«      r	t        |z   n|}|j                  d«      }d}t        |«      dk\  r%|d   j                  d¬«      j                  dd«      }|||dœS )Núhtml.parserÚaÚhrefÚ z/art/ÚtitleT©Ústripz\s+ú r   Útdé   é   ú-)rO   ÚurlÚdate)r   Úfindr5   Úget_textr;   ÚsubrQ   Ú
startswithÚBASE_URLÚfind_allÚlenÚreplace)Ú	html_fragÚsoupÚa_tagrM   rO   rW   ÚtdsrX   s           r$   Úparse_recordre   C   sá   € Ü˜ MÓ2€DØ�I‰I�c‹N€EÙØØ�9‰9�V˜RÓ €DÙ�7 $Ñ&ØØ�I‰I�g˜rÓ"Ò@ e§n¡n¸4 nÓ&@€EÙØÜ�F‰F�6˜3 Ó&×,Ñ,Ó.€EØ!Ÿ_™_¨SÔ1Œ(�TŠ/°t€CØ
�-‰-˜Ó
€CØ€DÜ
ˆ3ƒx�1‚}Ø�1‰v�‰ TˆÓ*×2Ñ2°3¸Ó<ˆØ 3°Ñ5Ð5r&   c                 ód  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  rt        d| dd  › d|j                  › �«       y	 t        |j                  d
«      }|j                  dddi¬«      }|r|d   j                  «       nd}|ss|j                  rg|j                  j                  d¬«      }t        j                  dd|«      j                  «       }d|v r |j                  dd«      j                  «       }|}d}|j                  dd¬«      }|�rg }	|j                   D ]ß  }
t#        |
d«      sŒ|
j$                  dk(  r}d|
j                  dd«      xs g v re|
j                  d«      }|r|	j'                  t)        |«      «       Œe|
j                  dd¬«      }|sŒ{t+        |«      dkD  sŒŠ|	j'                  |«       Œœ|
j$                  dv sŒ«|
j                  d¬«      }|sŒÀt+        |«      dkD  sŒÏ|	j'                  |«       Œá dj-                  |	«      }n=|j/                  dd „ ¬«      D ]&  }|j                  d¬«      }t+        |«      d!kD  sŒ$|} n t        j                  d"d#|«      j                  «       }g }|j/                  d$d¬%«      D ]Õ  }|d&   }t0        j2                  j5                  |«      d'   j7                  «       }|d(v sŒ=|j9                  d)«      r
t:        |z   }n,|j9                  d*«      st:        d)z   |j=                  d)«      z   }|j                  d¬«      xs t0        j2                  j?                  |«      }|j'                  ||d+œ«       |d,|› d-|› �z  }Œ× ||tA        jB                  |d.¬/«      fS # t        $ r}t        d	|› �«       Y d }~yd }~ww xY w)0Né   )r+   r,   r-   r.   z	  Detail iÎÿÿÿz HTTP )NrN   rN   z  Detail error: rK   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentrN   TrP   u%   ^æ±Ÿè‹�çœ�å�‘å±•å’Œæ”¹é�©å§”å‘˜ä¼š\s*u   è¡Œæ”¿è®¸å�¯å…¬ç¤ºÚdivÚshbt_content)Úclass_ÚatableÚclassÚtableú
)Ú	separatorrQ   rT   )Úprm   z

c                 ó   — | r| xr d| v S dS )Nrl   F© )Úcs    r$   ú<lambda>zfetch_detail.<locals>.<lambda>ƒ   s   € ÑWX¸qÒ?SÀYÐRSÀ^€ Ð^c€ r&   é2   z[ \t]+rR   rL   )rM   rM   r/   )z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarr   Úhttp)ri   rW   u
   
[é™„ä»¶] r0   F)Úensure_ascii)"r4   r5   r7   r8   r9   r%   rA   r   r:   rY   rQ   rO   rZ   r;   r[   r`   ÚchildrenÚhasattrri   Úappendr3   r_   Újoinr^   Úosr   ÚsplitextÚlowerr\   r]   ÚlstripÚbasenameÚjsonÚdumps)rW   rC   rH   rb   rh   rO   Útrl   ÚshbtÚpartsÚchildrr   ÚtxtÚ	candidateÚattachmentsrc   rM   Úextri   s                      r$   Úfetch_detailr�   V   se  € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒÜ�)˜C  ˜I˜; f¨Q¯]©]¨OÐ<Ô=Øð  ô ˜Ÿ™ Ó/€Dà�9‰9�V F¨NÐ#;ˆ9Ó<€DÙ'+ˆD�‰O×!Ñ!Ô#°€Eá�T—Z’ZØ�J‰J×Ñ dÐÓ+ˆÜ�F‰FÐ;¸RÀÓC×IÑIÓKˆØ 1Ñ$Ø—	‘	Ð.°Ó3×9Ñ9Ó;ˆAØˆð €GØ�9‰9�U >ˆ9Ó2€DÚØˆØ—]‘]ò 	&ˆEÜ˜5 &Ô)ØØ�z‰z˜UÒ" x°E·I±I¸gÀrÓ4JÒ4PÈbÑ'QØŸ
™
 7Ó+�ÙØ—L‘L¤ U£Õ,àŸ.™.°4¸t˜.ÓD�CÚœs 3›x¨!›|ØŸ™ SÕ)Ø—‘˜|Ò+Ø—n‘n¨4�nÓ0�Úœ3˜s›8 a›<Ø—L‘L Õ%ð	&ð —+‘+˜eÓ$‰àŸ™ uÑ5c˜Ódò 	ˆIØ×$Ñ$¨4Ð$Ó0ˆCÜ�3‹x˜"‹}Ø�Ùð		ô �f‰f�Y  WÓ-×3Ñ3Ó5€Gà€KØ—‘˜s¨�Ó.ò 
4ˆØ�V‰}ˆÜ�g‰g×Ñ˜tÓ$ QÑ'×-Ñ-Ó/ˆØÐLÒLØ�‰˜sÔ#Ü $‘‘Ø—_‘_ VÔ,Ü #‘~¨¯©°CÓ(8Ñ8�Ø—>‘>¨�>Ó-ÒG´·±×1AÑ1AÀ$Ó1GˆDØ×Ñ¨°TÑ:Ô;Ø˜ T F¨"¨T¨FÐ3Ñ3‰Gð
4ð �'œ4Ÿ:™: kÀÔFÐFÐFøôw ò ÜÐ˜q˜cÐ"Ô#Üûðús   ‚AN Î	N/ÎN*Î*N/zFetching list pages...r/   rW   z  Page z: +z	 (total: ú)u   
åˆ—è¡¨å�ˆè®¡: u    æ�¡zNo items to process.)Úpush_to_searchdbÚget_connectionc                 ó–  — t        j                  t        d¬«      }|j                  d«       |j                  d«       |j	                  «       }dx}}| D ]Ä  }	 |j                  d||j                  dd«      |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      f	«       |j                  r|j                  dkD  r|dz  }n|dz  }ŒÆ |j                  «        |j                  «        ||fS #  |dz  }Y ŒôxY w)Nr)   ©r,   úPRAGMA journal_mode=WALúPRAGMA busy_timeout=30000r   zÂINSERT OR IGNORE INTO gov_raw 
                    (site_name, source_url, page_url, title, publish_date, date_rank, summary, content, attachments)
                    VALUES (?,?,?,?,?,?,?,?,?)rW   rN   rO   Úpub_dateÚ	date_rankÚsummaryrl   rŽ   z[]r/   )	Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorr5   Ú	lastrowidÚcommitÚclose)ÚitemsÚ	site_nameÚconnrx   ÚnewÚskipÚitems          r$   r’   r’   »   s/  € Ü�‰œw°Ô3ˆØ�‰Ð.Ô/Ø�‰Ð0Ô1Ø�K‰K‹MˆØˆˆˆdØò 	ˆDðØ—	‘	ð2ð  §¡¨¨rÓ 2°D·H±H¸UÀ2Ó4FØ—X‘X˜g bÓ)¨4¯8©8°J¸rÓ+BØ—X‘X˜k¨!Ó,¨d¯h©h°yÀÓ.DØ—X‘X˜i¨Ó+¨T¯X©X°mÀDÓ-IðKô	ð —;’; 1§;¡;°¢?Ø˜1‘H‘Cà˜A‘I�Døð	ð" 	�‰ŒØ�
‰
ŒØ�DˆyÐøð	Ø˜‘	’ús   ÁCD?Ä?Ec                  ó€   — t        j                  t        d¬«      } | j                  d«       | j                  d«       | S )Nr)   r•   r–   r—   )r›   rœ   r�   rž   )r¥   s    r$   r“   r“   Õ   s1   € Ü�‰œw°Ô3ˆØ�‰Ð.Ô/Ø�‰Ð0Ô1Øˆr&   z  [r   rO   é(   z...rX   z!/art/(\d{4})/(\d{1,2})/(\d{1,2})/rV   rU   Ú02drT   é
   z%Y-%m-%dz%Y%m%dú<rK   TrP   iô  )	rO   rW   rl   r˜   r™   rš   Ú
source_urlrŽ   Úpage_urlu   
å…¥åº“ä¸­ (u    æ�¡)...u   å…¥åº“å®Œæˆ�: new=z, skip=z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?u   DBä¸­ u    å…± )PÚ__doc__r4   r;   Úsysr�   r†   ÚtimeÚbs4r   r   r�   Ú	SITE_NAMEr]   r6   r2   r7   ÚargparseÚArgumentParserÚparserÚadd_argumentr=   Ú
parse_argsr   ÚpagesÚ	MAX_PAGESr%   rI   re   r�   Ú	all_itemsÚsetÚ	seen_urlsÚrangerB   rG   rF   Ú	new_countÚfragr¨   Úaddr   r_   r    Úexitr   ÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr’   r“   ÚImportErrorr›   r!   ÚyearÚcurrent_yearÚitems_for_dbÚ	enumerateÚidxrO   rl   rŽ   r˜   r<   Údate_mr>   r™   ÚstrptimeÚdtr"   rZ   rš   r¦   r§   r¥   rž   ÚfetchoneÚcountr¢   rw   r&   r$   ú<module>rÔ      sm  ðñ÷ )× (× (Ý Ý à
€Ø3€	Ø)€Ø
Ð6Ñ
6€ð ØØØØØØØ2Øñ
€
ð DØOØ0ñ€ó Ø	 ˆ×	 Ñ	 Ó	"€Ø × Ñ �I C°Ð9SÐ Ô TØ × Ñ �K ¨lÐ Ô ;Ø×ÑÓ€àŸ*™* qš.ˆD�JŠJ¨b€	ò@òò$6ò&BGðJ €	Ù‹E€	á ÐÔ Ù�a˜ Q™Ó'ò €HÙ$ XÓ.�N€GˆUØ€ÙØ€IØò ˆÙ˜DÓ!ˆÙ�t˜E‘{ iÑ/ØØ�‰�d˜5‘kÔ"Ø×Ñ˜ÔØ�Q‰‰	ðñ ˆ'�(�˜3˜y˜k¨±3°y³>Ð2BÀ!ÀEÀ7È!ÐLÔMØ�Aƒ~Ùðñ  Ð™˜Y›Ð(¨Ð-Ô .áÙ	Ð
 Ô!Ø€C‡H�HˆQ„Kð ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ð"ß<ðF ˆx�|‰|‹~×"Ñ"€Ø€á˜9Ó%ó �I€CˆÙˆ#ˆc�!‰eˆW�A‘c˜)“nÐ% R¨¨W©°c°rÐ(:Ð';¸3Ð?Ô@Ù".¨t°E©{Ó";Ñ€Eˆ7�KÙØ�W‘ˆà�F‰|€HÙØ�—‘Ð?ÀÀeÁÓMˆÙØ Ÿ,™, q›/Ð*¨!©C°·±¸Q³Ó,@ÀÐ+EÀQÁsÈ6Ï<É<ÐXYË?ÓG[Ð\_ÐF`ÐaˆHà€IÙ‘C˜“M RÒ'ð	Ø"�×"Ñ" 8¨C¨R =°*Ó=ˆBÙ˜BŸK™K¨Ó1Ó2ˆIð NQÐT[É^‰}˜W mÓ4×=Ñ=ÀDÐ=ÔIÐahÐjnÐknÐo€Gà×ÑØ˜t E™{°wØ¨9Ø¨$¨u©+Ø"°°U±ñ	ö ð-ñ@ ˆ‘c˜,Ó'Ð(¨Ð1Ô 2Ù˜\¨9Ó5�	€€TÙ Ð˜3˜%˜w t fÐ-Ô .áÓ€Ø�‰ÐEÈ	À|ÓT×]Ñ]Ó_Ð`aÑb€Ø ‡
�
„Ù ˆˆyˆk˜˜u˜g TÐ*Õ +øðY ò  Ûòõ4ð9 ûðl	Ùús   ÇN Ê/-N2ÎN/Î.N/Î2N6