Ë
    V_Šjn  ã                   óÔ   — 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mZ ddlm	Z	 dZ
e
dz   ZdZdZd	xZZd
diZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r ej4                   e«       «       yy)uŸ  
å¹¿å·žå¤©èµ�é«˜æ–°æ��æ–™ - å­�å…¬å�¸åŠ¨æ€� (çŽ¯è¯„å…¬ç¤º) çˆ¬è™«
CMS: è‡ªå®šä¹‰PHP
WAF: é¦–è¯·æ±‚403ï¼Œå¸¦session cookieç¬¬äºŒæ¬¡æ”¾è¡Œ
åˆ—è¡¨: /zgsdt/ (ç¬¬1é¡µ), /zgsdt_{n}/ (ç¬¬né¡µ, n=2~7)
åˆ†é¡µ: ~8æ�¡/é¡µ, å…±55æ�¡/7é¡µ
è¯¦æƒ…: /zgsdt/{id}.html
è¯¦æƒ…æ ‡é¢˜: <title>
è¯¦æƒ…æ­£æ–‡: div.newsxqnyb > p
è¯¦æƒ…æ—¥æœŸ: Published Date: YYYY-MM-DD

ç”¨æ³•:
  python3 crawl_tinci.py
  python3 crawl_tinci.py --pages 7
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.tinci.comú/zgsdt/z/root/search.dbu   å¤©èµ�æ��æ–™-å­�å…¬å�¸åŠ¨æ€�u   çŽ¯è¯„z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é   é   c                 óÜ   — t        j                  «       }|j                  j                  t        «       |j                  | t        ¬«       |j                  | t        ¬«      }|j                  S )u/   WAF: é¦–è¯·æ±‚403ï¼Œç¬¬äºŒè¯·æ±‚å¸¦cookieæ”¾è¡Œ©Útimeout)ÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚTIMEOUTÚtext)ÚurlÚsessÚrs      ú /root/gov_crawler/crawl_tinci.pyÚ
bypass_getr   (   sM   € ä×ÑÓ€DØ‡L�L×ÑœÔ Ø‡H�HˆSœ'€HÔ"Ø�‰�œgˆÓ&€AØ�6‰6€Mó    c                 óò   — t        d«      D ]  }	 t        | «      c S  y # t        $ rN}|dk(  r*t        d|dz   | |fz  t        j
                  ¬«       Y d }~ yt        j                  d«       Y d }~Œed }~ww xY w)Né   é   u%     [WARN] èŽ·å�–å¤±è´¥ (%d/3): %s - %sé   ©ÚfileÚ )Úranger   Ú	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)r   ÚattemptÚes      r   Úfetchr)   1   sp   € Ü˜“8ò ˆð	Ü˜c“?Ò"ñøô ò 	Ø˜!Š|ÜÐ=ÀÈ1ÁÈcÐSTÐ@UÑUÔ\_×\fÑ\fÕgÝÜ�J‰J�q�M‰Mûð		ús   �
Ÿ	A6¨)A1ÁA1Á1A6c                 óê  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  dd¬«      D ]·  }|j                  d«      }|s|j                  d«      }|sŒ*|sŒ-|j	                  dd«      }|rd	|vrŒFt        t        |«      }d}d}	|j                  d
«      }
|
r|
j                  d¬«      }	|j                  d«      }|r|j                  d¬«      }|j                  |||	f«       Œ¹ |S )Núhtml.parserÚdivÚnews_nyw©Úclass_ÚnrÚaÚhrefr   r   ÚspanT©ÚstripÚh2)	r   ÚfindÚfind_allÚfind_parentr   r   ÚBASE_URLÚget_textÚappend)ÚhtmlÚitemsÚsoupÚnews_divr0   Úa_tagr2   Úfull_urlÚtitleÚdateÚspan_tagÚh2_tags               r   Úextract_list_itemsrG   <   s  € Ø€EÜ˜˜}Ó-€DØ�y‰y˜ zˆyÓ2€HÙØˆØ×Ñ ¨dÐÓ3ò .ˆØ—‘˜sÓ#ˆÙØ—G‘G˜C“LˆEÙØÙØØ�y‰y˜ Ó$ˆÙ�y¨Ñ,ØÜœ8 TÓ*ˆàˆØˆØ—7‘7˜6“?ˆÙØ×$Ñ$¨4Ð$Ó0ˆDØ—‘˜“ˆÙØ—O‘O¨$�OÓ/ˆEØ�‰�h  tÐ,Õ-ð+.ð, €Lr   c                 óp  — t        | d«      }d}|j                  d«      }|rK|j                  r?|j                  j                  «       }t	        j
                  dd|«      j                  «       }d}|j                  dd¬«      }|r7t	        j                  d|j                  «       «      }|r|j                  d	«      }d}|j                  dd
¬«      }|rdg }	|j                  d«      D ]=  }
|
j                  d¬«      }|sŒt        |«      dkD  sŒ'||k7  sŒ-|	j                  |«       Œ? dj                  |	«      }g }|j                  dd¬«      D ]d  }|d   }d|j                  «       v sŒ|j                  d¬«      xs |j                  d«      d   }|j                  |t        t         |«      dœ«       Œf ||||fS )Nr+   r   rC   u,   _å¹¿å·žå¤©èµ�é«˜æ–°æ��æ–™è‚¡ä»½æœ‰é™�å…¬å�¸$r,   Ú	newsxqnyar.   u*   Published Date[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   Ú	newsxqnybÚpTr4   r   z

r1   )r2   r2   z.pdfú/éÿÿÿÿ)Únamer   )r   r7   Ústringr5   ÚreÚsubÚsearchr;   Úgroupr8   Úlenr<   ÚjoinÚlowerÚsplitr   r:   )r=   r?   rC   Ú	title_tagrD   Úmeta_divÚmÚcontentÚcontent_divÚpartsrK   r   Úattachmentsr1   r2   rN   s                   r   Úextract_detailr_   [   s§  € Ü˜˜}Ó-€Dð €EØ—	‘	˜'Ó"€IÙ�Y×%Ò%Ø× Ñ ×&Ñ&Ó(ˆÜ—‘ÐFÈÈEÓR×XÑXÓZˆð €DØ�y‰y˜ {ˆyÓ3€HÙÜ�I‰IÐCÀX×EVÑEVÓEXÓYˆÙØ—7‘7˜1“:ˆDð €GØ—)‘)˜E¨+�)Ó6€KÙØˆØ×%Ñ% cÓ*ò 	#ˆAØ—:‘: D�:Ó)ˆDÚœ˜D›	 A›¨$°%«-Ø—‘˜TÕ"ð	#ð —+‘+˜eÓ$ˆð €KØ�]‰]˜3 Tˆ]Ó*ò OˆØ�‰yˆØ�T—Z‘Z“\Ò!Ø—:‘: D�:Ó)Ò@¨T¯Z©Z¸«_¸RÑ-@ˆDØ×Ñ¨´W¼XÀtÓ5LÑMÕNð	Oð �$˜ Ð,Ð,r   c                 ó¼  — d}d}|D ]”  \  }}}}}dd l }	|r|	j                  |d¬«      nd}
|r|d d j                  dd«      n|}|s|rdj                  d„ |D «       «      }n|}	 | j	                  d	||t
        |||||
f«      }|j                  dkD  r|d
z  }n|d
z  }Œ– ||fS # t        $ r0}t        d|›d|›�t        j                  ¬«       |d
z  }Y d }~ŒÏd }~ww xY w)Nr   F)Úensure_asciir   éÈ   ú
ú c              3   ó:   K  — | ]  }d |d   ›d|d   ›d�–— Œ y­w)z<p><a href="r   z">rN   z</a></p>N© )Ú.0r1   s     r   ú	<genexpr>zpush_to_db.<locals>.<genexpr>Œ   s   è ø€ Ò#nÑ]^ÀAÀeÃHÈaÐPVËiÔ$XÑ#nùs   ‚z“INSERT OR REPLACE INTO gov_raw (page_url, title, site_name, publish_date, content, date_rank, summary, attachments) VALUES (?, ?, ?, ?, ?, ?, ?, ?)r   z  [ERR] DB: z - r   )ÚjsonÚdumpsÚreplacerU   ÚexecuteÚ	SITE_NAMEÚrowcountr!   r"   r#   r$   )Úconnr>   ÚsavedÚskippedr   rC   rD   r[   r^   ri   Úattachments_jsonÚsummaryÚcurr(   s                 r   Ú
push_to_dbru   ƒ   s  € Ø€EØ€GØ27ò Ñ.ˆˆU�D˜' ;ÛÙJU˜4Ÿ:™: kÀ˜:ÔFÐ[]ÐÙ6=�'˜$˜3�-×'Ñ'¨¨cÔ2À5ˆÙÙØŸ)™)Ñ#nÐbmÔ#nÓn‘à�ð	Ø—,‘,ð2ð �eœY¨¨g°t¸WÐFVÐWó	ˆCð �|‰|˜aÒØ˜‘
‘à˜1‘�øð'ð. �'ˆ>Ðøô ò 	Ýª3±Ð2¼¿¹ÕDØ�q‰L�Gûð	ús   Á$8B"Â"	CÂ+&CÃCc            	      ób  — t         } t        t        j                  «      D ]K  \  }}|dk(  sŒ|dz   t	        t        j                  «      k  sŒ,t        t        j                  |dz      «      }  n t        j                  t        d¬«      }|j                  d«       g }t        d| z  «       t        | «      D �],  }|dk(  rt        }nt        d|dz   z  z   }t        d	|dz   | |fz  «       t        |«      }|sŒAt        |«      }|st        d
«        nÕt        dt	        |«      z  «       |D ]¶  \  }	}
}t!        j"                  d«       t        dt	        |«      dz   |
d d fz  dd¬«       t        |	«      }|st        d«       ŒWt%        |«      \  }}}}|s|
}|s|}|j'                  |	||||f«       |rdnd}d}|rdt	        |«      z  }t        d|t	        |«      |fz  «       Œ¸ �Œ/ |r9t)        ||«      \  }}|j+                  «        t        d||t	        |«      fz  «       |j-                  «        y)Nz--pagesr   é<   r	   zPRAGMA journal_mode=WALu+   å¤©èµ�æ��æ–™-å­�å…¬å�¸åŠ¨æ€�: çˆ¬å�– %d é¡µr   z
/zgsdt_%d/u     [åˆ—è¡¨é¡µ %d/%d] %su       -> æ— æ•°æ�®ï¼Œå�œæ­¢u       -> æ‰¾åˆ° %d æ�¡g      à?z    [%d] %s...é(   rd   T)ÚendÚflushÚfailÚokÚemptyr   z +%dpdfu   (%s, %då­—%s)u+   
å®Œæˆ�! æ–°å¢ž: %d, è·³è¿‡: %d, æ€»å…±: %d)Ú	MAX_PAGESÚ	enumerater#   ÚargvrT   ÚintÚsqlite3ÚconnectÚDB_PATHrl   r"   r    Ú
LIST_PAGE1r:   r)   rG   r%   r&   r_   r<   ru   ÚcommitÚclose)ÚpagesÚir1   ro   Ú	all_itemsÚidxÚlist_urlr=   r>   Úitem_urlÚ
item_titleÚ	item_dateÚdetail_htmlrC   rD   r[   r^   ÚstatusÚ
attach_msgrp   rq   s                        r   Úmainr“       s+  € Ü€EÜœ#Ÿ(™(Ó#ò ‰ˆˆ1Ø�	‹>˜a !™e¤c¬#¯(©(£mÓ3ÜœŸ™  Q¡™Ó(ˆEÙðô
 �?‰?œ7¨BÔ/€DØ‡L�LÐ*Ô+Ø€Iä	Ð
7¸%Ñ
?Ô@ä�U‹|ó %HˆØ�!Š8Ü!‰Hä ,°#¸±'Ñ":Ñ:ˆHäÐ&¨#°©'°5¸(Ð)CÑCÔDÜ�X‹ˆÙØä" 4Ó(ˆÙÜÐ-Ô.ÙäÐ$¤s¨5£zÑ1Ô2à/4ò 	HÑ+ˆH�j )Ü�J‰J�sŒOÜÐ"¤c¨)£n°qÑ&8¸*ÀSÀb¸/Ð%JÑJÐPSÐ[_Õ`Ü ›/ˆKÙÜ�f”Øä0>¸{Ó0KÑ-ˆE�4˜ +ÙØ"�ÙØ �à×Ñ˜h¨¨t°W¸kÐJÔKÙ$‘T¨'ˆFØˆJÙØ&¬¨[Ó)9Ñ9�
Ü�/ V¬S°«\¸:Ð$FÑFÕGò'	Hð%%HñN Ü# D¨)Ó4‰ˆˆwØ�‰ŒÜÐ<ÀÀwÔPSÐT]ÓP^Ð?_Ñ_Ô`à‡J�J„LØr   Ú__main__)Ú__doc__rP   r#   r%   r   r‚   Úbs4r   Úurllib.parser   r:   r…   r„   rm   ÚCATEGORYÚGROUPr   r~   r   r   r)   rG   r_   ru   r“   Ú__name__Úexitrf   r   r   ú<module>rœ      sž   ðñó  
Û 
Û Û Û Ý Ý  à"€Ø˜	Ñ!€
Ø
€Ø*€	ØÐ €ˆ5ð ÐPð€ð €	Ø
€òòòò>%-òPò::ðz ˆzÒØ€C‡H�H‰T‹VÕð r   