Ë
    J}j·  ã                   ó  — 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	m
Z
 ddlmZ  ej                  «       Zde_        ej                  e_        dZdZdZd	Zd
Zdej,                  v Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uå   Crawler for ç§‘å°”æ²�åŒº-ç”Ÿæ€�çŽ¯å¢ƒ (keerqin.gov.cn /zwgk/zfxxgk/fdzdgknr/zdlyxx/sthj/)
   CMS: TRS ä¿¡æ�¯å…¬å¼€, pagination: index_{N}.html (50 pages, ~509 records)
   Detail: div.lis_list_part2_content or div.trs_editor_view
é    N)ÚBeautifulSoup)ÚdatetimeFzhttp://www.keerqin.gov.cnz"/zwgk/zfxxgk/fdzdgknr/zdlyxx/sthj/z/root/search.dbÚkeerqin_sthjé3   z--incrementalc                 ó.   — t        dt        › d| › �«       y )Nú[z] )ÚprintÚ	SITE_NAME)Úmsgs    ú"/root/gov_crawler/crawl_keerqin.pyÚlogr      s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 Õ!ó    c                 óØ   — t         j                  j                  | dddœ¬«      }t         j                  j                  |t        d¬«      }|j                  «       j                  dd¬	«      S )
Nz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)z
User-AgentÚAccept)Úheadersé   )ÚcontextÚtimeoutzutf-8Úreplace)Úerrors)ÚurllibÚrequestÚRequestÚurlopenÚssl_ctxÚreadÚdecode)ÚurlÚreqÚrs      r   Úfetchr!      s\   € Ü
�.‰.×
 Ñ
  ØTØSñ/Ð
 ó €Cô 	�‰×Ñ˜s¬G¸RÐÓ@€AØ�6‰6‹8�?‰?˜7¨9ˆ?Ó5Ð5r   c                 óx  — g }t        j                  d| t         j                  «      }|st        d|› d�«       |S |j	                  d«      }t        j
                  d|t         j                  «      D ]Æ  }|j	                  d«      }t        j                  d|«      }|sŒ-|j	                  d«      j                  «       }|j	                  d«      j                  «       }	t        j                  d|«      }
|
r|
d	   j                  «       nd
}|j                  d«      s	t        |z   }|j                  |	||dœ«       ŒÈ |S )u*   è§£æž� tbody > tr > td > a[href] + td datez<tbody>(.*?)</tbody>õ   ç¬¬u   é¡µæœªæ‰¾åˆ° tbodyé   z<tr>(.*?)</tr>zhref="([^"]+)"[^>]*>([^<]+)é   z<td[^>]*>([^<]*)</td>éÿÿÿÿÚ Úhttp)Útitler   Údate)ÚreÚsearchÚDOTALLr   ÚgroupÚfinditerÚstripÚfindallÚ
startswithÚBASEÚappend)ÚhtmlÚpage_numÚitemsÚtbody_matchÚ
tbody_htmlÚtr_matchÚtrÚa_matchÚhrefr)   ÚtdsÚdate_strs               r   Ú
parse_listr@   $   s  € à€EÜ—)‘)Ð3°T¼2¿9¹9ÓE€KÙÜˆc�(�Ð-Ð.Ô/ØˆØ×"Ñ" 1Ó%€JÜ—K‘KÐ 1°:¼r¿y¹yÓIò ˆØ�^‰^˜AÓˆÜ—)‘)Ð:¸BÓ?ˆÙØØ�}‰}˜QÓ×%Ñ%Ó'ˆØ—‘˜aÓ ×&Ñ&Ó(ˆä�j‰jÐ1°2Ó6ˆÙ&)�3�r‘7—=‘=”?¨rˆØ�‰˜vÔ&Ü˜$‘;ˆDØ�‰ØØØñ
õ 	ðð" €Lr   c                 óN   — | dk(  rt         › t        › d�S t         › t        › d| › d�S )z.page 0 = index.html, page 1..50 = index_N.htmlr   z
index.htmlÚindex_z.html)r3   ÚLIST_DIR)r6   s    r   Úget_page_urlrD   @   s1   € à�1‚}Ü�œ�z Ð,Ð,ÜˆV”H�:˜V H :¨UÐ3Ð3r   c                 óè  ‡ ‡
— t        ‰ «      }t        |d«      }|j                  d«      xs$ |j                  d«      xs |j                  d«      }|st        d‰ › �«       yˆ fd„Š
ˆ
fd„}g }|j	                  d	¬
«      D �]-  }|j
                  dv r¶ ||j                  «       «      }t        j                  dd|«      j                  «       }|j                  «       j                  d«      r?|j                  «       j                  d«      r |j                  |j                  «       «       Œ«|sd|v sŒ²|j                  d|› d�«       ŒÈ|j
                  dk(  r+|j                  d ||j                  «       «      › d�«       �Œ|j                  dd¬«      }|s�Œ|j                  d|› d�«       �Œ0 dj                  |«      }	|	s|j                  dd¬«      }|rd|› d�}	|	st        d‰ › �«       yd|	iS )uh   æ­£æ–‡ï¼šdiv.lis_list_part2_content æˆ– div.trs_editor_viewï¼ŒHTML è¾“å‡ºï¼ˆè¡¨æ ¼ä¿�ç•™+é™„ä»¶å†…åµŒï¼‰úhtml.parserzdiv.lis_list_part2_contentzdiv.trs_editor_viewzdiv.cont_contu   æœªæ‰¾åˆ°æ­£æ–‡: Nc                 óÄ   •— | xs dj                  «       } | sy| j                  d«      rd| z   S | j                  d«      r| S t        j                  j	                  ‰| «      S )Nr'   z//zhttp:r(   )r0   r2   r   ÚparseÚurljoin)Úur   s    €r   Úto_abszfetch_detail.<locals>.to_absT   sW   ø€ ØŠW�"�O‰OÓˆÙØØ�<‰<˜ÔØ˜Q‘;ÐØ�<‰<˜ÔØˆHÜ�|‰|×#Ñ# C¨Ó+Ð+r   c                 ó6  •— t        | d«      }|j                  d«      D ]  }|j                  «        Œ |j                  d«      D ]P  }|j                  d«      xs |j                  d«      xs d}d|v s|j	                  d«      sŒA|j                  «        ŒR |j                  d«      D ]7  }|j                  d	¬
«      rŒ|j                  d«      rŒ(|j                  «        Œ9 |j                  d«      D ]I  }|j                  d	¬
«      rŒ|j                  d«      rŒ(|j                  d«      rŒ:|j                  «        ŒK |j                  g d¢«      D ]  }|j                  «        Œ |j                  g d¢«      D ]  }|j                  d«      sŒ|d= Œ |j                  dd	¬«      D ]  } ‰	|d   «      |d<   Œ |j                  dd	¬«      D ]?  }|j                  dd«      }d|v sd|v sd|v r|j                  «        Œ2 ‰	|d   «      |d<   ŒA t        |«      S )uS   unwrap æ ·å¼�åŒ…è£… + æ¸…å†…è�” style + ç»�å¯¹åŒ–é“¾æŽ¥ + åˆ ç©ºé”šç‚¹/style æ ‡ç­¾rF   ÚstyleÚaÚidÚnamer'   ÚOLE_LINKÚmsT©r0   ÚimgÚp)ÚspanÚfontÚdiv)rU   Útdr;   ÚthÚtbodyÚtableÚbÚstrongrJ   ÚiÚemÚh1Úh2Úh3rN   ÚbrÚsupÚsubrT   )r=   r=   )Úsrcrg   Úicon_z
/sysimage/z/filetypeimages/)
r   Úfind_allÚ	decomposeÚgetr2   ÚunwrapÚget_textÚfindÚhas_attrÚstr)
ÚfragmentÚfsoupÚstrN   ÚaidrU   ÚtagrT   rg   rK   s
            €r   Úcleanzfetch_detail.<locals>.clean^   s÷  ø€ ä˜h¨Ó6ˆà—.‘. Ó)ò 	ˆBØ�L‰L�Nð	ð —‘ Ó$ò 	ˆAØ—%‘%˜“+Ò4 §¡ v£Ò4°"ˆCØ˜SÑ  C§N¡N°4Õ$8Ø—‘•
ð	ð
 —‘ Ó$ò 	ˆAØ—:‘: D�:Õ)°!·&±&¸µ-Ø—‘•ð	ð —‘ Ó$ò 	ˆAØ—:‘: D�:Õ)°!·&±&¸µ-ÈÏÉÈsÍØ—‘•ð	ð —>‘>Ò"9Ó:ò 	ˆCØ�J‰J�Lð	à—>‘>ò  #]ó  ^ò 	!ˆCØ�|‰|˜GÕ$Ø˜‘Lð	!ð —‘ ¨$�Ó/ò 	*ˆAÙ˜q ™yÓ)ˆAˆfŠIð	*à—>‘> %¨T�>Ó2ò 	,ˆCØ—'‘'˜% Ó$ˆCØ˜#‰~ °Ñ!4Ð8JÈcÑ8QØ—‘”ØÙ  E¡
Ó+ˆC�ŠJð	,ô �5‹zÐr   F)Ú	recursive)rU   rX   z<[^>]+>r'   z<p>z</p>z<a r\   z<table>z</table>ú TrS   ú
u   æ­£æ–‡ä¸ºç©º: Úcontent)r!   r   Ú
select_oner   ri   rP   Údecode_contentsr+   rf   r0   r2   Úendswithr4   rm   Újoin)r   r5   ÚsoupÚcontent_divrv   ÚpartsÚelÚinnerÚtxtrz   rK   s   `         @r   Úfetch_detailr…   G   sÖ  ù€ ä�‹:€DÜ˜˜}Ó-€Dà�‰Ð4Ó5ò 	,Ø�?‰?Ð0Ó1ò	,à�?‰?˜?Ó+ð ñ
 ÜÐ ˜uÐ%Ô&Øô,ô ðD €EØ×"Ñ"¨UÐ"Ó3ó .ˆØ�7‰7�lÑ"Ù˜"×,Ñ,Ó.Ó/ˆEÜ—&‘&˜ R¨Ó/×5Ñ5Ó7ˆCà�{‰{‹}×'Ñ'¨Ô.°5·;±;³=×3IÑ3IÈ&Ô3QØ—‘˜UŸ[™[›]Õ+Ù˜ šØ—‘˜s 5 '¨Ð.Õ/Ø�W‰W˜ÒØ�L‰L˜7¡5¨×);Ñ);Ó)=Ó#>Ð"?¸xÐHÖIà—+‘+˜c¨�+Ó.ˆCÛØ—‘˜s 3 % t˜_Ö-ð.ð  �i‰i˜Ó€GÙØ×"Ñ" 3¨dÐ"Ó3ˆÙØ˜C˜5 �oˆGÙÜˆn˜S˜EÐ"Ô#ØØ�wÐÐr   c                  ó„  — t        j                  t        «      } | j                  «       }d}t        rt        t        dz
  d«      nt        dz
  }t        d|dz   «      D �]™  }t        |«      }t        d|dz   › d|dz   › d|› �«       	 t        |«      }t        ||«      }t        d	t        |«      › d
�«       |D �]  }	|j                  d|	d   f«       |j                  «       r4t        r-t        d«       | j!                  «        t        d|› d�«         y Œ^t#        |	d   «      }
|
€Œo|
d   }t%        j&                  «       j)                  d«      }|j                  dt*        |	d   |	d   |	d   |	d   |d d |ddf	«       |j,                  dkD  sŒÕ|dz  }|dz  dk(  sŒã| j/                  «        t        d|› d�«       �Œ | j/                  «        t        d|dz   › d|› d
�«       t1        j2                  d«       �Œœ | j!                  «        t        d|› d
�«       y # t        $ r}t        d|› d|› �«       Y d }~�ŒÝd }~ww xY w)Nr   r$   é   u   æŠ“å�–åˆ—è¡¨é¡µ ú/z: u
   åˆ—è¡¨é¡µ u	    å¤±è´¥: u     è§£æž�åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?r   u     å·²æœ‰è®°å½•ï¼Œå¢žé‡�ç»“æ�Ÿu   å¢žé‡�å®Œæˆ�ï¼Œå…± u
    æ�¡æ–°å¢žrz   z%Y-%m-%d %H:%M:%Sz¼INSERT OR IGNORE INTO gov_raw 
                (site_name, source_url, page_url, title, publish_date, summary, content, status, category)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)r)   r*   éÈ   Ú	publishedu   ç”Ÿæ€�çŽ¯å¢ƒé
   u     å·²å…¥åº“ u    æ�¡...r#   u   é¡µå®Œæˆ�ï¼Œç´¯è®¡ g333333Ó?u   å…¨é‡�çˆ¬å�–å®Œæˆ�ï¼Œå…±æ–°å¢ž )Úsqlite3ÚconnectÚDBÚcursorÚINCREMENTALÚminÚ	MAX_PAGESÚrangerD   r   r!   Ú	Exceptionr@   ÚlenÚexecuteÚfetchoneÚcloser…   r   ÚnowÚstrftimer
   ÚrowcountÚcommitÚtimeÚsleep)ÚconnÚcurÚ	total_newÚpage_endr6   r   r5   Úer7   ÚitemÚdetailrz   r™   s                r   Úmainr¦   œ   sF  € Ü�?‰?œ2Ó€DØ
�+‰+‹-€CØ€Iå(3Œs”9˜q‘= !Ô$¼ÀQ¹€Hä˜!˜X¨™\Ó*ó 3ˆÜ˜8Ó$ˆÜÐ˜x¨!™|˜n¨A¨h¸©l¨^¸2¸c¸UÐCÔDð	Ü˜“:ˆDô ˜4 Ó*ˆÜˆlœ3˜u›:˜, dÐ+Ô,àó $	;ˆDØ�K‰KÐAÀDÈÁKÀ>ÔRØ�|‰|Œ~ÝÜÐ7Ô9Ø—J‘J”LÜÐ-¨i¨[¸
ÐCÔDÚØä! $ u¡+Ó.ˆFØˆ~Øà˜YÑ'ˆGÜ—,‘,“.×)Ñ)Ð*=Ó>ˆCØ�K‰Kð6ô Ø˜‘KØ˜‘KØ˜‘MØ˜‘LØ˜D˜S�MØØØ"ð
ô	ð  �|‰|˜aÓØ˜Q‘�	Ø˜r‘> QÓ&Ø—K‘K”MÜ˜, y k°Ð9Ö:ðI$	;ðL 	�‰ŒÜˆc�(˜Q‘,�Ð2°9°+¸TÐBÔCÜ�
‰
�3Žðg3ðj 	‡J�J„LÜÐ
)¨)¨°DÐ9Õ:øôc ò 	Ü�*˜X˜J i°¨sÐ3Ô4Ýûð	ús   ÂHÈ	H?È#H:È:H?Ú__main__)Ú__doc__Úurllib.requestr   Úurllib.parseÚsslr+   rŒ   Úsysr�   Úbs4r   r   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder3   rC   rŽ   r
   r’   Úargvr�   r   r!   r@   rD   r…   r¦   Ú__name__© r   r   ú<module>rµ      sŸ   ðñ÷ A× @× @Ó @Ý Ý à
$ˆ#×
$Ñ
$Ó
&€Ø€Ô Ø—m‘m€Ô à"€Ø/€Ø€à€	Ø€	Ø §¡Ð)€ò"ò6òò84òR òj=;ð@ ˆzÒÙ…Fð r   