Ë
    €Ûµj  ã                   ó  — 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Zd dl	m
Z
 d dlZej                  e_         ej                  «       Zde_        ej"                  e_        dZdZdZe j,                  j/                  dd«      Zd	d
iZdZdZ eej:                  «      D ]=  \  ZZedk(  sŒedz    e ej:                  «      k  sŒ% e!ej:                  edz      «      Z n dd„Z"d„ Z#d„ Z$d„ Z%e&dk(  r e%«        yy)é    N)ÚBeautifulSoupFzhttps://www.ccs.cnu   é•¿å¯¿æ–°é—»ç½‘-åŸŽäº‹u   æ–°é—»èµ„è®¯Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z/web/column/col1812972z--pagesé   c                 óÊ  — t         j                  j                  | t        ¬«      }	 |rEt         j                  j	                  |dt
        ¬«      j                  «       j                  dd¬«      S t         j                  j	                  |d¬«      j                  «       j                  dd¬«      S # t        $ r+}t        d| › d	|› �t        j                  ¬
«       Y d }~yd }~ww xY w)N)Úheadersé   )ÚtimeoutÚcontextzutf-8Úreplace)Úerrors©r	   z[WARN] fetch failed: z - ©ÚfileÚ )ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚuse_sslÚreqÚes       ú/root/gov_crawler/crawl_ccs.pyÚfetchr"   "   s½   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÙÜ—>‘>×)Ñ)¨#°rÄ3Ð)ÓG×LÑLÓN×UÑUÐV]ÐfoÐUÓpÐpä—>‘>×)Ñ)¨#°rÐ)Ó:×?Ñ?ÓA×HÑHÈÐYbÐHÓcÐcøÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   §AB. Á.?B. Â.	C"Â7!CÃC"c                 óÔ  — g }t        | d«      }|j                  dd¬«      D ]Ã  }|d   }d|vrŒ|j                  d¬«      }|rt        |«      dk  rŒ0d	}t	        j
                  d
|«      }|r3|j                  d«      }|d|j                  «        j                  «       }n|}|j                  d«      s|j                  d«      rd|z   nt        |z   }|j                  |||dœ«       ŒÅ |S )zExtract items from list pageúhtml.parserÚaT)Úhrefr&   zshareapp.cqliving.com©Ústripé
   r   z(\d{4}-\d{2}-\d{2})$r   NÚhttpú//úhttps:)Útitler   Údate)r   Úfind_allÚget_textÚlenÚreÚsearchÚgroupÚstartr(   Ú
startswithÚBASE_URLÚappend)	ÚhtmlÚitemsÚsoupr%   r&   Útxtr.   Úmr-   s	            r!   Úextract_itemsr>   .   sì   € à€EÜ˜˜}Ó-€DØ�]‰]˜3 Tˆ]Ó*ò BˆØ�‰yˆØ"¨$Ñ.ØØ�j‰j˜tˆjÓ$ˆÙ”c˜#“h ’mØð ˆÜ�I‰IÐ-¨sÓ3ˆÙØ—7‘7˜1“:ˆDØ˜
˜Ÿ™›�O×)Ñ)Ó+‰EàˆEà�‰˜vÔ&Ø&*§o¡o°dÔ&;�8˜d’?ÄÈDÁˆDà�‰˜u¨T¸4Ñ@ÕAð)Bð* €Ló    c           	      ó  — t        | d«      }d}|j                  d«      }|r|j                  d¬«      }d}t        j                  d| «      }|r|j                  d«      }d}g }|j                  d«      }	|	s||dg d	œS g }
|	j                  g d
¢d¬«      D �]/  }|j                  dk(  r|j                  d«      rŒ%|j                  dk(  r|j                  d«      rŒF|j                  dk(  rÁ|j                  dd«      }d|j                  «       v rŒz|j                  d«      rd|z   }nU|j                  d«      r|j                  d«      d   |z   }n,|j                  d«      s|j                  dd«      d   dz   |z   }|j                  dd«      xs d}|
j                  d|› d|› d�«       �Œ|j                  dk(  rãg }|j                  d«      D ]\  }|j                  ddg«      D �cg c]  }|j                  dd¬«      ‘Œ }}|sŒ7|j                  ddj                  |«      z   d z   «       Œ^ |rmt!        |d   j                  d!«      «      d"z
  }ddj                  d#g|z  «      z   d z   }|j#                  d|«       |
j                  d$j                  |«      «       �Œ|j                  dd¬«      }|s�Œ|
j                  |«       �Œ2 d%j                  d&„ |
D «       «      }|j%                  d'd«      j%                  d(d«      }|||g d	œS c c}w ))z*Parse detail page on shareapp.cqliving.comr$   r   Úh1Tr'   z#(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2})r   z[class*=content])r-   r.   ÚcontentÚattachments)ÚpÚtableÚimg)Ú	recursiverD   rE   rF   ÚsrcÚicon_r+   r,   ú/r   r*   Úaltz![z](ú)ÚtrÚtdÚthú z| z | z |ú|é   z---ú
z

c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)Nr'   )Ú.0rD   s     r!   ú	<genexpr>zparse_detail.<locals>.<genexpr>ˆ   s   è ø€ Ò8 ¨a¯g©g­iœ!Ñ8ùs   ‚˜õ   Â z&nbsp;)r   Ú
select_oner0   r2   r3   r4   r/   ÚnameÚfind_parentÚgetÚlowerr6   ÚsplitÚrsplitr8   Újoinr1   Úinsertr   )r9   r   r;   r-   rA   Ú	date_textr=   rB   rC   Úcontent_divÚpartsÚelrH   rK   ÚrowsrM   ÚcÚcellsÚ	col_countÚsepÚtexts                        r!   Úparse_detailrk   J   só  € ä˜˜}Ó-€Dð €EØ	�‰˜Ó	€BÙ	Ø—‘ $�Ó'ˆð €IÜ
�	‰	Ð8¸$Ó?€AÙØ—G‘G˜A“Jˆ	ð €GØ€Kà—/‘/Ð"4Ó5€KÙØ¨	¸bÐQSÑTÐTà€EØ×"Ñ"Ò#8ÀDÐ"ÓIó #ˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9Øà�7‰7�eÒØ—&‘&˜ Ó#ˆCØ˜#Ÿ)™)›+Ñ%ØØ�~‰~˜dÔ#Ø ‘n‘Ø—‘ Ô$Ø—i‘i “n QÑ'¨#Ñ-‘Ø—^‘^ FÔ+Ø—j‘j  aÓ(¨Ñ+¨cÑ1°CÑ7�Ø—&‘&˜ Ó#Ò) rˆCØ�L‰L˜2˜c˜U " S E¨Ð+Ô,Ùà�7‰7�gÒØˆDØ—k‘k $Ó'ò A�Ø>@¿k¹kÈ4ÐQUÈ,Ó>WÖX¸˜Ÿ™ C¨t˜Õ4ÐX�ÐXÚØ—K‘K  u§z¡z°%Ó'8Ñ 8¸4Ñ ?Õ@ðAñ Ü  Q¡§¡¨cÓ 2Ó3°aÑ7�	Ø˜UŸZ™Z¨¨°)Ñ(;Ó<Ñ<¸tÑC�Ø—‘˜A˜sÔ#Ø—‘˜TŸY™Y t›_Ô-Ùà�{‰{˜3 dˆ{Ó+ˆÛØ�L‰L˜ÖðG#ðJ �k‰kÑ8 UÔ8Ó8€GØ�o‰o˜h¨Ó,×4Ñ4°X¸sÓC€Gà I¸'ÐRTÑUÐUùò# Ys   Ç$Lc                  ó>  — t        j                  t        d¬«      } | j                  d«       | j	                  «       }| j                  «        t        dd¬«       g }d}t        rt        |t        «      }t        t        › t        › d�«      }|s0t        d	t        j                  ¬
«       t        j                  d«       t        |«      }t        dt!        |«      › d�d¬«       |j#                  |«       t%        d|dz   «      D ]`  }t        › t        › d|› d�}t        |«      }|s n?t        |«      }|s n0t        d|› dt!        |«      › d�d¬«       |j#                  |«       Œb t        dt!        |«      › �d¬«       d}d}	d}
d}t'        |«      D �]  \  }}|j                  d|d   f«       |j)                  «       r|	dz  }	Œ3|dz  dk(  r6t        d|› dt!        |«      › d|d   d d › d�t        j                  dd¬«       t        |d   «      }|st        dt        j                  ¬
«       Œ�t+        ||d   «      }|d   xs |d   }|d    xs |d    }|d!   }|d"   }|j-                  «       s*|
dz  }
|dz  dk(  rt        d#t        j                  ¬
«       �Œt/        j0                  d$d|«      j-                  «       }|r|d d% n|d d% }|rt3        j4                  |d&¬'«      nd(}d}|rVt/        j6                  d)|«      }|r>t9        |j;                  d«      |j;                  d«      z   |j;                  d*«      z   «      }	 |j                  d+|t<        t>        |d   |||||f	«       |j@                  dkD  r|dz  }|t!        |«      z  }tE        jF                  d-«       �Œ | j                  «        | jI                  «        t        d.t<        › d|› d/|	› d0|
› d1|› d2�d¬«       y # tB        $ r0}|dz  dk(  rt        d,|› �t        j                  ¬
«       Y d }~ŒŽd }~ww xY w)3Né<   r   zPRAGMA busy_timeout=60000u!   [æ¸…ç�†] å·²æ¸…ç�†è¯¥ç«™æ—§æ•°æ�®T)Úflushé   z.htmlz[ERROR] Cannot fetch list pager   r   z[INFO] Page 1: z itemsrR   Ú_z[INFO] Page z: z[INFO] Total items from list: r   z'SELECT id FROM gov_raw WHERE page_url=?r   é   z[INFO] [rJ   z] r-   é(   z...rP   )r   Úendrn   zFETCH FAILEDr.   rB   rC   ÚEMPTYz\s+éÈ   F)Úensure_asciiz[]z(\d{4})-(\d{2})-(\d{2})é   zºINSERT OR IGNORE INTO gov_raw 
                (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank)
                VALUES (?,?,?,?,?,?,?,?,?)z
DB ERROR: gš™™™™™É?z

[RESULT] z new, z skip, z empty, z attachments)%Úsqlite3ÚconnectÚDBÚexecuteÚcursorÚcommitr   Ú_MAX_PGÚminr"   r7   Ú	LIST_PATHr   r   Úexitr>   r1   ÚextendÚrangeÚ	enumerateÚfetchonerk   r(   r2   ÚsubÚjsonÚdumpsr3   Úintr4   Ú	SITE_NAMEÚ
GROUP_NAMEÚrowcountr   ÚtimeÚsleepÚclose)Úconnrf   Ú	all_itemsÚtotal_pagesr9   r:   Úpgr   Ú	new_countÚ
skip_countÚempty_countÚ	total_attÚidxÚitemÚdetailr-   ra   rB   Úattachments_listÚplainÚsummaryÚatt_jsonÚ	date_rankÚm2r    s                            r!   Úmainr¡   Ž   sÿ  € Ü�?‰?œ2 rÔ*€DØ‡L�LÐ,Ô-Ø�‰‹€Að 	‡K�K„MÜ	Ð
-°TÕ:à€IØ€KÝÜ˜+¤wÓ/ˆô ”H�:œi˜[¨Ð.Ó/€DÙÜÐ.´S·Z±ZÕ@Ü�‰�ŒÜ˜$Ó€EÜ	ˆOœC ›J˜< vÐ
.°dÕ;Ø×Ñ�UÔô �A�{ Q‘Ó'ò 	 ˆÜ�
œ9˜+ Q r d¨%Ð0ˆÜ�S‹zˆÙÙÜ˜dÓ#ˆÙÙÜ�˜R˜D ¤3 u£: ,¨fÐ5¸TÕBØ×Ñ˜Õð	 ô 
Ð*¬3¨y«>Ð*:Ð
;À4ÕHà€IØ€JØ€KØ€Iä˜yÓ)ó 2‰	ˆˆTØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<Ø˜!‰OˆJØà�‰7�aŠ<Ü�H˜S˜E ¤3 y£>Ð"2°"°T¸'±]À3ÀBÐ5GÐ4HÈÐLÔSV×S]ÑS]ÐcfÐnrÕsä�T˜%‘[Ó!ˆÙÜ�.¤s§z¡zÕ2Øä˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ! -Ñ0Ðà�}‰}ŒØ˜1ÑˆKØ�Q‰w˜!Š|Ü�g¤C§J¡JÕ/Ùä—‘�v˜s GÓ,×2Ñ2Ó4ˆÙ!&�%˜˜‘+¨E°$°3¨KˆÙGW”4—:‘:Ð.¸UÕCÐ]aˆàˆ	ÙÜ—‘Ð5°yÓAˆBÙÜ §¡¨£¨b¯h©h°q«kÑ 9¸B¿H¹HÀQ»KÑ GÓH�	ð	9Ø�I‰Ið.ð œ	¤:¨t°E©{¸IÀwÐPWÐYaÐclÐmô	ð �z‰z˜AŠ~Ø˜Q‘�	ØœSÐ!1Ó2Ñ2�	ô
 	�
‰
�3Žðe2ðh 	‡K�K„MØ‡J�J„Lä	ˆKœ	�{ " Y K¨v°j°\ÀÈÈÐU]Ð^gÐ]hÐhtÐ
uð  ~Bö  Cøô ò 	9Ø�Q‰w˜!Š|Ü˜
 1 #Ð&¬S¯Z©ZÕ8ÿøð	9ús   ÍAO#Ï#	PÏ,&PÐPÚ__main__)T)'Úosr2   r   r‡   r�   Úurllib.requestr   Úurllib.errorÚsslÚbs4r   rx   Ú_create_unverified_contextÚ_create_default_https_contextÚcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder7   rŠ   r‹   Úenvironr[   rz   r   r€   r~   r„   ÚargvÚir%   r1   r‰   r"   r>   rk   r¡   Ú__name__© r?   r!   ú<module>r³      s  ðã 	ð÷ × Ó ß (Ó (Ý Û à$'×$BÑ$B€Ô !Ø €c× Ñ Ó"€Ø€Ô Ø—-‘-€„à€Ø$€	Ø€
Ø‡Z�Z‡^�^�KÐ!2Ó3€ØÐWÐ
X€à$€	à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó	òò8AVòHbCðJ ˆzÒÙ…Fð r?   