Ë
    ¸¬ujj)  ã                   ó¾   — 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dl
m
Z
 dZdZdZd	d
iZdZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u)  
å®�å¤�çŸ³æ²¹åŒ–å·¥çŽ¯å¢ƒç§‘å­¦é™¢è‚¡ä»½æœ‰é™�å…¬å�¸ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
URL: http://www.nxshhky.com/news/class/?86.html
CMS: è‡ªå®šä¹‰PHP CMS (PDV)
åˆ—è¡¨: div.title > a + div (date sibling)
åˆ†é¡µ: index.php?page=N&catid=86&myord=dtime&myshownums=9
è¯¦æƒ…: /news/html/?ID.html
æ­£æ–‡: div.con
é    N)ÚBeautifulSoup)Úurljoin)Údatetimez*http://www.nxshhky.com/news/class/?86.htmlu.   å®�å¤�çŸ³æ²¹åŒ–å·¥çŽ¯å¢ƒç§‘å­¦é™¢-å…¬ç¤ºå…¬å‘Šu   ä¼�ä¸š-å®�å¤�z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é   g      ð?z/root/search.dbc           	      óÊ   — t        j                  d| «      }|rK|j                  d«      › dt        |j                  d«      «      d›dt        |j                  d«      «      d›�S y)Nz(\d{4})-(\d{1,2})-(\d{1,2})é   ú-é   Ú02dé   Ú )ÚreÚsearchÚgroupÚint)ÚtextÚms     ú"/root/gov_crawler/crawl_nxshhky.pyÚ
parse_dater      sV   € Ü
�	‰	Ð0°$Ó7€AÙØ—'‘'˜!“*�˜Qœs 1§7¡7¨1£:›¨sÐ3°1´S¸¿¹À»³_ÀSÐ4IÐJÐJØó    c                 ó  — t        d«      D ]Q  }	 t        j                  | t        t        ¬«      }d|_        |j                  dk(  rt        |j                  d«      c S ŒS y # t        $ r }	 t        j                  d«       Y d }~Œyd }~ww xY w)Nr   )ÚheadersÚtimeoutzutf-8éÈ   zhtml.parserr
   )ÚrangeÚrequestsÚgetÚHEADERSÚTIMEOUTÚencodingÚstatus_coder   r   Ú	ExceptionÚtimeÚsleep)ÚurlÚretryÚrespÚes       r   Úget_soupr)   #   s~   € Ü�q“ò ˆð	Ü—<‘< ¬W¼gÔFˆDØ#ˆDŒMØ×Ñ 3Ò&Ü$ T§Y¡Y°Ó>Ò>ð 'ð	ð øô ò 	ØÜ�J‰J�q�M‰Mûð	ús   �AA!Á!	B
Á*BÂB
c                 ó^  — | dk(  rt         }nd| › d�}t        |«      }|sg S g }|j                  dd¬«      D ]ó  }|d   }d|v sd	|v sŒt        t         |«      }|j                  j                  «       }|sŒ>|j                  }d
}	|j                  «       D ]€  }
|
j                  dk(  r,|
j                  j                  «       }t        |«      }|sŒ:|}	 nE|
j                  sŒK|
j                  d¬«      sŒ^|
j                  d¬«      }t        |«      }|sŒ~|}	 n |j                  |||	dœ«       Œõ |S )Nr   z1http://www.nxshhky.com/news/class/index.php?page=zA&catid=86&myord=dtime&myshownums=9&showtj=&showdate=&author=&key=ÚaT©Úhrefr-   z../news/html/z/news/html/?r   Údiv©Ústrip)Útitler%   Údate)ÚBASE_URLr)   Úfind_allr   r   r0   ÚparentÚfind_next_siblingsÚnamer   Úget_textÚappend)Úpage_numr%   ÚsoupÚitemsr+   r-   Úlinkr1   ÚpÚdate_strÚsÚtxtÚds                r   Úfetch_list_pagerC   /   s@  € Ø�1‚}Ü‰àAÀ(Àð  LMð  NˆÜ�C‹=€DÙØˆ	à€EØ�]‰]˜3 Tˆ]Ó*ò ˆØ�‰yˆØ˜dÑ" n¸Ò&<Üœ8 TÓ*ˆDØ—F‘F—L‘L“NˆEÙØð —‘ˆAØˆHØ×)Ñ)Ó+ò �Ø—6‘6˜U’?ØŸ&™&Ÿ,™,›.�CÜ" 3›�AÚØ#$˜ÙØ—V“V §
¡
° 
Õ 6ØŸ*™*¨4˜*Ó0�CÜ" 3›�AÚØ#$˜Ùðð �L‰LØØØ ñõ ð3ð> €Lr   c                 óº   — d}| j                  d«      D ]@  }|j                  j                  «       }|j                  «       sŒ.t	        |«      }||kD  sŒ?|}ŒB |xs dS )Nr   r+   é
   )r4   r   r0   Úisdigitr   )r;   Úmax_pager+   rA   Úns        r   Úget_total_pagesrI   Z   sX   € Ø€HØ�]‰]˜3Óò ˆØ�f‰f�l‰l‹nˆØ�;‰;�=Ü�C“ˆAØ�8‹|Ø‘ðð Š>�rÐr   c           
      ó”  — d}| j                  d«      }|r?|j                  j                  «       }t        j                  dd|«      j                  «       }d}| j                  dd¬«      }|rC|j                  j                  «       }t        j
                  d|«      }|r|j                  d«      }g }g }| j                  dd	¬«      }	|	s| j                  dd	¬
«      }	|	�r|	j                  D �]‚  }
|
j                  s?t        |
«      j                  «       }|r#t        d„ |D «       «      s|j                  |«       ŒO|
j                  j                  «       }|dv �rDt        d„ |
j                  d¬«      D «       «      }|rã|
j                  D ]Ò  }|j                  s?t        |«      j                  «       }|r#t        d„ |D «       «      s|j                  |«       ŒN|j                  dk(  r|j                  t        |«      «       Œx|j                  dv r'|j                  d¬«      }|sŒ›|j                  |«       Œ­|j                  d¬«      }|sŒÂ|j                  |«       ŒÔ �Œu|
j                  d¬«      }|s�Œ‹t        d„ |D «       «      r�ŒŸ|j                  |«       �Œ²|dk(  r|j                  t        |
«      «       �ŒÓ|dk(  rP|
j!                  dd«      }|
j!                  dd«      }|s�Œ |j                  d|› dt#        t$        |«      › d�«       �Œ(|dv r)|
j                  d¬«      }|s�ŒB|j                  |«       �ŒU|dk(  r�Œ\|
j                  d¬«      }|s�Œr|j                  |«       �Œ… |	j                  dd¬«      D ]n  }|d   }|j                  j                  «       }t        j
                  d |j                  «       «      sŒGt#        t$        |«      }|j                  d!|› d|› d�«       Œp t'        «       }g }|D ].  }|d d" }||vsŒ|j)                  |«       |j                  |«       Œ0 d#j+                  |«      }||||fS )$Nr   r1   zh-\u5b81\u590f\u77f3\u6cb9\u5316\u5de5\u73af\u5883\u79d1\u5b66\u9662\u80a1\u4efd\u6709\u9650\u516c\u53f8$r.   Úpdv_content)Úclass_z-(\d{4}-\d{1,2}-\d{1,2})\s+\d{1,2}:\d{2}:\d{2}r   Úcon)Úidc              3   ó$   K  — | ]  }|d v –— Œ
 y­w©u	    
	ã€€Â N© ©Ú.0Úcs     r   ú	<genexpr>z"extract_content.<locals>.<genexpr>~   s   è ø€ Ò#KÀ AÐ)<Ô$<Ñ#Kùó   ‚)r>   r.   c              3   ó8   K  — | ]  }|j                   d v –— Œ y­w))Útabler.   ÚulÚolN)r7   rR   s     r   rU   z"extract_content.<locals>.<genexpr>…   s   è ø€ ÒpÈ1 §¡Ð*FÔ FÑpùó   ‚F)Ú	recursivec              3   ó$   K  — | ]  }|d v –— Œ
 y­wrP   rQ   rR   s     r   rU   z"extract_content.<locals>.<genexpr>Š   s   è ø€ Ò,QÈ!¨QÐ2EÔ-EÑ,QùrV   rX   Tr/   c              3   ó$   K  — | ]  }|d v –— Œ
 y­wrP   rQ   rR   s     r   rU   z"extract_content.<locals>.<genexpr>™   s   è ø€ Ò&MÀA qÐ,?Ô'?Ñ&MùrV   ÚimgÚsrcÚaltz![z](ú))rY   rZ   Úbrr+   r,   r-   z3\.(pdf|doc|docx|xls|xlsx|zip|rar|ceb|ofd|ppt|pptx)$ú[éd   ú

)Úfindr   r0   r   Úsubr   r   Úchildrenr7   ÚstrÚallr9   ÚlowerÚanyr4   r8   r   r   r3   ÚsetÚaddÚjoin)r;   r1   ÚtÚpub_dateÚpdvrA   r   ÚpartsÚattachmentsrM   Úchildr   ÚtagÚ	has_blockrh   Úsub_txtr`   ra   r+   r-   Úfull_urlÚseenÚunique_partsr>   ÚkeyÚcontents                             r   Úextract_contentr   d   sÓ  € Ø€EØ�	‰	�'Ó€AÙØ—‘—‘“ˆÜ—‘ð  Cð  EGð  INó  O÷  Uñ  Uó  Wˆà€HØ
�)‰)�E -ˆ)Ó
0€CÙ
Ø�h‰h�n‰nÓˆÜ�I‰IÐFÈÓLˆÙØ—w‘w˜q“zˆHà€EØ€Kà
�)‰)�E %ˆ)Ó
(€CÙØ�i‰i˜ %ˆiÓ(ˆâ
Ø—\‘\ó 1	&ˆEØ—:’:Ü˜5“z×'Ñ'Ó)�Ù¤Ñ#KÀdÔ#KÔ KØ—L‘L Ô&Øà—*‘*×"Ñ"Ó$ˆCà�lÒ"ÜÑpÐPU×P^ÑP^ÐinÐP^ÓPoÔpÓp�	ÙØ$Ÿ~™~ò 0˜Ø"ŸxšxÜ # C£§¡Ó 0˜AÙ ¬Ñ,QÈqÔ,QÔ)QØ %§¡¨Q¤Ø$ØŸ8™8 wÒ.Ø!ŸL™L¬¨S«Õ2Ø ŸX™X¨Ñ5Ø&)§l¡l¸ lÓ&>˜GÚ&Ø %§¡¨WÕ 5à #§¡°4 Ó 8˜AÚ Ø %§¡¨Q¥ò0ð"  Ÿ.™.¨t˜.Ó4�CÛ¤3Ñ&MÈÔ&MÖ#MØŸ™ SÖ)à˜’Ø—‘œS ›ZÖ(Ø˜’Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÛØ—L‘L 2 c U¨"¬W´X¸sÓ-CÐ,DÀAÐ!FÖGØ˜Ñ$Ø—n‘n¨4�nÓ0�ÛØ—L‘L Ö%Ø˜’Ùà—n‘n¨4�nÓ0�ÛØ—L‘L Ö%ðc1	&ðh —‘˜c¨�Ó-ò 	<ˆAØ�V‘9ˆDØ—6‘6—<‘<“>ˆDÜ�y‰yÐOÐQU×Q[ÑQ[ÓQ]Õ^Ü"¤8¨TÓ2�Ø×"Ñ" Q t f¨B¨x¨j¸Ð#:Õ;ð	<ô ‹5€DØ€LØò #ˆØ��ˆgˆØ�dŠ?Ø�H‰H�SŒMØ×Ñ Õ"ð	#ð �k‰k˜,Ó'€GØ�'˜8 [Ð0Ð0r   c                  óÚ   — dd l } | j                  t        «      }|j                  «       }|j	                  d«       |j	                  d«       |j                  «        |j                  «        y )Nr   aK  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        page_url TEXT,
        title TEXT,
        content TEXT,
        publish_date TEXT,
        site_name TEXT,
        summary TEXT,
        attachments TEXT,
        date_rank TEXT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )zSCREATE INDEX IF NOT EXISTS idx_gov_raw_url 
        ON gov_raw(page_url, site_name))Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚclose)r�   ÚconnrT   s      r   Úinit_dbr‰   Á   sT   € ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð ‡I�Ið +ô ,à‡K�K„MØ‡J�J…Lr   c                 ó”  — dd l }|j                  t        «      }|j                  «       }d}| D ]a  }|d   r|d   d d nd}	 |j	                  d|d   |d   |d   |d   t
        ||d	   rd
j                  |d	   «      nd|d   xs df«       |dz  }Œc |j                  «        |j                  «        |S # t        $ r
}Y d }~Œ”d }~ww xY w)Nr   r~   r   r   z´INSERT OR REPLACE INTO gov_raw 
                (page_url, title, content, publish_date, site_name, summary, attachments, date_rank)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)r%   r1   rr   ru   ú
z
0000-00-00r   )
r�   r‚   rƒ   r„   r…   Ú	SITE_NAMErp   r"   r†   r‡   )r<   r�   rˆ   rT   ÚimportedÚitemÚsummaryr(   s           r   Ú
save_to_dbr�   Ö   sê   € ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ€HØò ˆØ+/°	ª?�$�y‘/ $ 3Ñ'Àˆð	Ø�I‰Ið 3ð �U‘Ø�W‘Ø�Y‘Ø�ZÑ ÜØØ26°}Ò2E�—	‘	˜$˜}Ñ-Ô.È2Ø�ZÑ Ò0 Lð	5ôð ˜‰M‰Hðð$ 	‡K�K„MØ‡J�J„LØ€Oøô	 ò 	Üûð	ús   ÁAB4Â4	CÃCc            
      ó„  — dd l } | j                  «       }|j                  dt        d¬«       |j                  dd¬«       |j	                  «       }t        «        t        dt        › d�«       t        t        «      }|st        d	«       y t        |«      }t        d
|› �«       |j                  dk(  r|nt        |j                  |«      }t        d|› d�«       g }g }t        d|dz   «      D �]d  }t        d|› d|› d�«       t        |«      }	|	st        d«       Œ/|j                  t!        |	«      «       t        dt!        |	«      › �«       t#        |	«      D ]÷  \  }
}t        dt!        |«      dz   › d|d   d d › d�«       t        |d   «      }|s,t        d«       |j                  |d   |d   d|d   g dœ«       Œft%        |«      \  }}}}|xs |d   }|xs |d   }|j                  ||d   |||dœ«       |r0t!        |j'                  d«      «      }t        d|› d|rd nd!› �«       nt        d"«       t)        j*                  t,        «       Œù �Œg t!        |«      }t/        d#„ |D «       «      }t/        d$„ |D «       «      }t/        d%„ |D «       «      t1        |d«      z  }t        d&«       t        d'|› �«       t        |rd(|› d)||z  d*z  d+›d,�nd-«       t        d.|d+›�«       t        d/|› �«       |r$t        d0t/        |«      t!        |«      z  d+›�«       |j2                  st5        |«      }t        d1|› �«       y y )2Nr   z--pages)ÚtypeÚdefaultz	--skip-dbÚ
store_true)Úactionz===== u    çˆ¬å�– =====ÚFAILzPages: zWill fetch: z pagesr   z

--- Page ú/z ---z
  No itemsz	  Items: z  [z] r1   é(   z...r%   z    FAIL detailr   r2   )r1   r%   r~   rr   ru   rf   z    seg=z
 | attach=ÚYESÚnoz    WARN emptyc              3   ó,   K  — | ]  }|d    sŒ	d–— Œ y­w)r~   r   NrQ   ©rS   Úis     r   rU   zmain.<locals>.<genexpr>7  s   è ø€ Ò2�1 Q y£\ŒQÑ2ùs   ‚
�c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)ru   N)Úlenrœ   s     r   rU   zmain.<locals>.<genexpr>8  s   è ø€ Ò6 qŒS��=Ñ!×"Ñ6ùr[   c              3   ób   K  — | ]'  }|d    sŒ	t        |d    j                  d«      «      –— Œ) y­w)r~   rf   N)rŸ   Úsplitrœ   s     r   rU   zmain.<locals>.<genexpr>9  s*   è ø€ ÒQ°!ÀAÀiÃLŒc�!�I‘,×$Ñ$ VÓ,×-ÑQùs   ‚
/�"/z
===== DONE =====zTotal: zWith body: z (re   z.1fz%)zWith body: 0z	Avg seg: zAttachments: zPer page avg: z
Imported: )ÚargparseÚArgumentParserÚadd_argumentr   Ú
parse_argsr‰   ÚprintrŒ   r)   r3   rI   ÚpagesÚminr   rC   r9   rŸ   Ú	enumerater   r¡   r#   r$   ÚDELAYÚsumÚmaxÚskip_dbr�   )r¢   ÚparserÚargsr;   Útotal_pagesÚpages_to_fetchÚ	all_itemsÚpage_countsÚpager<   ÚidxrŽ   Údetail_soupr1   r~   rr   ru   Úfinal_titleÚ
final_dateÚsegÚtotalÚwbÚtaÚavgÚimps                            r   Úmainr¿   ñ   sV  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐÔ7Ø
×Ñ˜¨LÐÔ9Ø×ÑÓ€Dä„Iä	ˆF”9�+˜]Ð
+Ô,Ü”HÓ€DÙÜˆfŒØä! $Ó'€KÜ	ˆG�K�=Ð
!Ô"à$(§J¡J°!¢O‘[¼¸T¿Z¹ZÈÓ9U€NÜ	ˆL˜Ð(¨Ð
/Ô0à€IØ€Kä�a˜¨!Ñ+Ó,ó +ˆÜ�˜D˜6  >Ð"2°$Ð7Ô8Ü Ó%ˆÙÜ�,ÔØà×Ñœ3˜u›:Ô&Ü�	œ#˜e›*˜Ð&Ô'ä" 5Ó)ò !	‰IˆC�Ü�Cœ˜I› qÑ(Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDä" 4¨¡;Ó/ˆKÙÜ˜Ô)Ø× Ñ Ø! '™]Ø ™;Ø!Ø $ V¡Ø#%ñ"ô ð ä4CÀKÓ4PÑ1ˆE�7˜H kØÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJà×ÑØ$Ø˜E‘{Ø"Ø&Ø*ñô ñ Ü˜'Ÿ-™-¨Ó/Ó0�Ü˜   Z¹±È$Ð/OÐPÕQä˜Ô(ä�J‰J”uÕòC!	ð+ôZ �	‹N€EÜ	Ñ2˜	Ô2Ó	2€BÜ	Ñ6¨IÔ6Ó	6€BÜ
ÑQ°yÔQÓ
QÔTWÐXZÐ\]ÓT^Ñ
^€Cä	ÐÔ Ü	ˆG�E�7Ð
ÔÜ	±eˆK˜�t˜2˜b ™h s™l¨3Ð/¨rÑ
2À<ÔQÜ	ˆI�c˜#�YÐ
Ô Ü	ˆM˜"˜Ð
ÔÙÜ�œs ;Ó/´°KÓ0@Ñ@ÀÐEÐFÔGà�<Š<Ü˜Ó#ˆÜ�
˜3˜%Ð Õ!ð r   Ú__main__)Ú__doc__r   Úsysr#   Úosr   Úbs4r   Úurllib.parser   r   r3   rŒ   ÚGROUPr   r   rª   rƒ   r   r)   rC   rI   r   r‰   r�   r¿   Ú__name__rQ   r   r   ú<module>rÈ      sŒ   ðñ÷ × Û Ý Ý  Ý à7€Ø<€	Ø€àÐPð€ð €Ø€à
€òò
ò)òVò[1òzò*ò6T"ðl ˆzÒÙ…Fð r   