Ë
    ¸¬ujª$  ã                   ó¤   — d 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dd	i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.nxlw.gov.cn/jrlw/tzgg/
CMS: å®�å¤�ç»Ÿä¸€å¹³å�° (TRS UEDITOR)
åˆ—è¡¨: ul.la_right_1 > li > span: a + date
åˆ†é¡µ: index.html (page1) / index_{N-1}.html (page N)
è¯¦æƒ…: ./YYYYMM/tYYYYMMDD_XXXXXXX.html
æ­£æ–‡: div.view.TRS_UEDITOR
é    N)ÚBeautifulSoup)Úurljoinz!http://www.nxlw.gov.cn/jrlw/tzgg/u   ç�µæ­¦å¸‚-é€šçŸ¥å…¬å‘Š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_nxlw_tzgg.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        j                  d«       Y ŒnxY w)Nr   )ÚheadersÚtimeoutzutf-8éÈ   zhtml.parserr	   )ÚrangeÚrequestsÚgetÚHEADERSÚTIMEOUTÚencodingÚstatus_coder   r   ÚtimeÚsleep)ÚurlÚretryÚresps      r   Úget_soupr&      sn   € Ü�q“ò ˆð	Ü—<‘< ¬W¼gÔFˆDØ#ˆDŒMØ×Ñ 3Ò&Ü$ T§Y¡Y°Ó>Ò>ð 'ð	ð øð	Ü�J‰J�qŽMús   �AA!Á!A:c           	      ó:  — | dk(  rt         }nt         › d| dz
  › d�}t        |«      }|sg dfS d}|j                  d«      D ][  }|j                  sŒd|j                  v sŒt	        j
                  d|j                  «      }|sŒBt        |j                  d«      «      }Œ] g }|j                  dd	¬
«      }|s||fS |j                  dd¬«      D ]Ê  }|j                  d«      }	t        |	«      dk  rŒ#|	d   j                  d«      }
|
r|
j                  d«      sŒK|
j                  dd«      xs |
j                  j                  «       }|sŒ||j                  |j                  «       t        t         |
d   «      |	d   j                  j                  «       dœ«       ŒÌ ||fS )Nr   Úindex_z.htmlr   ÚscriptÚ	countPagezcountPage\s*=\s*(\d+)ÚulÚ
la_right_1©Úclass_ÚliF©Ú	recursiveÚspanr   ÚaÚhrefÚtitler   r	   )r5   r#   Údate)ÚBASE_URLr&   Úfind_allÚstringr   r   r   r   ÚfindÚlenr   r   ÚstripÚappendr   )Úpage_numr#   ÚsoupÚtotal_pagesÚsr   Úitemsr+   r/   Úspansr3   r5   s               r   Úfetch_list_pagerD   *   s€  € Ø�1‚}Ü‰ä�
˜& ¨!¡ ¨EÐ2ˆÜ�C‹=€DÙØ�1ˆuˆà€KØ�]‰]˜8Ó$ò .ˆØ�8‹8˜ q§x¡xÒ/Ü—	‘	Ð2°A·H±HÓ=ˆAÚÜ! !§'¡'¨!£*›o‘ð	.ð €EØ	�‰�4 ˆÓ	-€BÙØ�kÐ!Ð!à�k‰k˜$¨%ˆkÓ0ò ˆØ—‘˜FÓ#ˆÜˆu‹:˜Š>ØØ�!‰H�M‰M˜#ÓˆÙ˜Ÿ™˜fœØØ—‘�g˜rÓ"Ò4 a§f¡f§l¡l£nˆÙØØ�‰Ø—[‘[“]Üœ8 Q v¡YÓ/Ø˜!‘H—M‘M×'Ñ'Ó)ñ
õ 	ðð  �+ÐÐr   c           
      óü  — d}| j                  d«      }|r|j                  j                  «       }|sP| j                  d«      }|r=t        j                  dd|j                  j                  «       «      j                  «       }d}dD ]J  }| j                  |«      D ]0  }|j                  j                  «       }d|v sŒ"t        |«      }|sŒ0 n |sŒJ n g }g }	| j                  dd„ ¬	«      }
|
s| 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 ]j  }|d    }t        j$                  d!|j                  «       «      sŒ-|	j                  d"|j                  j                  «       › dt!        t"        |«      › d�«       Œl t'        «       }g }|D ].  }|d d# }||vsŒ|j)                  |«       |j                  |«       Œ0 |d$j+                  |«      ||	fS )%Nr   Úh1r5   z<--[\u5b81\u590f\u7075\u6b66\u5e02\u4eba\u6c11\u653f\u5e9c]*$)ÚdivÚpr2   u   å�‘å¸ƒæ—¶é—´ï¼šrG   c                 ó   — | xr d| v S )NÚTRS_UEDITOR© )Úcs    r   ú<lambda>z!extract_content.<locals>.<lambda>i   s   € ¨1Ò+C°À!Ð1C€ r   r-   ÚarticleÚconc              3   ó$   K  — | ]  }|d v –— Œ
 y­w©u	    
	ã€€Â NrK   ©Ú.0rL   s     r   ú	<genexpr>z"extract_content.<locals>.<genexpr>s   s   è ø€ Ò#KÀ AÐ)<Ô$<Ñ#Kùó   ‚)rH   rG   c              3   ó8   K  — | ]  }|j                   d v –— Œ y­w))ÚtablerG   r+   ÚolN)ÚnamerR   s     r   rT   z"extract_content.<locals>.<genexpr>x   s   è ø€ ÒiÀA˜Ÿ™Ð#?Ô?Ñiùó   ‚Fr0   c              3   ó$   K  — | ]  }|d v –— Œ
 y­wrQ   rK   rR   s     r   rT   z"extract_content.<locals>.<genexpr>}   s   è ø€ Ò,QÈ!¨QÐ2EÔ-EÑ,QùrU   rW   T)r<   c              3   ó$   K  — | ]  }|d v –— Œ
 y­wrQ   rK   rR   s     r   rT   z"extract_content.<locals>.<genexpr>Œ   s   è ø€ Ò&MÀA qÐ,?Ô'?Ñ&MùrU   ÚimgÚsrcÚaltz![z](ú))r+   rX   Úbrr3   )r4   r4   z3\.(pdf|doc|docx|xls|xlsx|zip|rar|ceb|ofd|ppt|pptx)$ú[éd   ú

)r:   r   r<   r   Úsubr8   r   ÚchildrenrY   ÚstrÚallr=   ÚlowerÚanyÚget_textr   r   r7   r   ÚsetÚaddÚjoin)r?   r5   rF   ÚtÚpub_dateÚtagÚeÚtxtÚpartsÚattachmentsÚcdÚchildr   Úhbre   Ústr^   r_   r3   ÚhÚseenÚuprH   Úks                           r   Úextract_contentr~   Q   sò  € Ø€EØ	�‰�4‹€BÙ	Ø—‘—‘“ˆÙØ�I‰I�gÓˆÙÜ—F‘FÐZÐ\^Ð`a×`fÑ`f×`lÑ`lÓ`nÓo×uÑuÓwˆEà€HØ#ò ˆØ—‘˜sÓ#ò 	ˆAØ—&‘&—,‘,“.ˆCØ/°3Ò6Ü% c›?�ÚÙð	ò Ùðð €EØ€Kà	�‰�5Ñ!CˆÓ	D€BÙØ�Y‰Y�u YˆYÓ/ˆÙØ�Y‰Y�u UˆYÓ+ˆâ	Ø—[‘[ó .	&ˆEØ—:’:Ü˜5“z×'Ñ'Ó)�Ù¤Ñ#KÀdÔ#KÔ KØ—L‘L Ô&ØØ—*‘*×"Ñ"Ó$ˆCØ�lÒ"ÜÑiÈÏÉÐbgÈÓIhÔiÓi�ÙØ$Ÿ~™~ò 0˜Ø"ŸxšxÜ # C£§¡Ó 0˜AÙ ¬Ñ,QÈqÔ,QÔ)QØ %§¡¨Q¤Ø$ØŸ8™8 wÒ.Ø!ŸL™L¬¨S«Õ2Ø ŸX™X¨Ñ5Ø!$§¡°D Ó!9˜BÚ!Ø %§¡¨RÕ 0à #§¡°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 Ö%ð].	&ð` —‘˜S t�Ó,ò 	RˆAØ�&‘	ˆAÜ�y‰yÐOÐQR×QXÑQXÓQZÕ[Ø×"Ñ" Q q§v¡v§|¡|£~Ð&6°b¼ÄÈ1Ó9MÐ8NÈaÐ#PÕQð	Rô
 ‹5€DØ	€BØò ˆØˆdˆsˆGˆØ�DŠ=Ø�H‰H�QŒKØ�I‰I�a�Lð	ð �&—+‘+˜b“/ 8¨[Ð8Ð8r   c                  óÚ   — dd l } | j                  t        «      }|j                  «       }|j	                  d«       |j	                  d«       |j                  «        |j                  «        y )Nr   a  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
    )zJCREATE INDEX IF NOT EXISTS idx_gov_raw_url ON gov_raw(page_url, site_name))Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚclose)r€   ÚconnrL   s      r   Úinit_dbrˆ   ¯   sP   € ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð ‡I�IÐ^Ô_Ø‡K�K„MØ‡J�J…Lr   c                 óv  — 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 #  Y ŒŠxY w)Nr   Úcontentr   r   z´INSERT OR REPLACE INTO gov_raw 
                (page_url, title, content, publish_date, site_name, summary, attachments, date_rank)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)r#   r5   rp   ru   ú
z
0000-00-00r   )	r€   r�   r‚   rƒ   r„   Ú	SITE_NAMErn   r…   r†   )rB   r€   r‡   rL   ÚnÚitemÚsummarys          r   Ú
save_to_dbr�   ½   sÛ   € ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ	€AØò ˆØ+/°	ª?�$�y‘/ $ 3Ñ'Àˆð	Ø�I‰Ið 3ð �U‘˜T '™]¨D°©O¸TÀ*Ñ=MÜ˜7Ø26°}Ò2E�—	‘	˜$˜}Ñ-Ô.È2Ø�ZÑ Ò0 Lð	5ôð �‰F‰Aðð 	‡K�K„MØ‡J�J„LØ€Høð		Ùús   ÁAB4Â4B8c                  ó  — dd l } | j                  «       }|j                  dt        d¬«       |j                  dd¬«       |j	                  «       }t        «        t        dt        › d�«       t        d	«      \  }}|st        d
«       y t        d|› �«       |j                  dk(  r|nt        |j                  |«      }t        d|› �«       g }t        d	|d	z   «      D �]c  }|d	k(  r|}nt        |«      \  }}	|st        d|› d|› d�«       Œ/t        d|› d|› dt        |«      › d�«       t        |«      D �]  \  }
}t        dt        |«      d	z   › d|d   d d › d�«       t        |d   «      }|s-|j                  t!        |d|d   g ¬«      «       t        d«       Œht#        |«      \  }}}}|j                  |xs |d   |d   ||xs |d   |dœ«       |rCt        dt        |j%                  t'        d«      t'        d«      z   «      «      › d|rd nd!› �«       nt        d"«       t)        j*                  t,        «       �Œ �Œf t        |«      }t/        d#„ |D «       «      }t/        d$„ |D «       «      }t/        d%„ |D «       «      t1        |d	«      z  }t        d&«       t        d'|› �«       |rt        |rd(|› d||z  d)z  d*›d+�nd,«       t        d-|d*›�«       t        d.|› �«       |j2                  st        d/t5        |«      › �«       y y )0Nr   z--pages)ÚtypeÚdefaultz	--skip-dbÚ
store_true)Úactionz===== z =====r   zNo itemszTotal pages: zWill fetch: z

--- Page ú/z --- no itemsz (z items) ---z  [z] r5   é(   z...r#   r   r6   )rŠ   rp   ru   z    FAIL)r5   r#   rŠ   rp   ru   z    seg=é
   z
 | attach=ÚYESÚnoz    WARN emptyc              3   ó,   K  — | ]  }|d    sŒ	d–— Œ y­w)rŠ   r   NrK   ©rS   Úis     r   rT   zmain.<locals>.<genexpr>  s   è ø€ Ò2�1 Q y£\ŒQÑ2ùs   ‚
�c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)ru   N)r;   rœ   s     r   rT   zmain.<locals>.<genexpr>  s   è ø€ Ò6 qŒS��=Ñ!×"Ñ6ùrZ   c              3   ób   K  — | ]'  }|d    sŒ	t        |d    j                  d«      «      –— Œ) y­w)rŠ   rd   N)r;   Úsplitrœ   s     r   rT   zmain.<locals>.<genexpr>  s*   è ø€ ÒQ°!ÀAÀiÃLŒc�!�I‘,×$Ñ$ VÓ,×-ÑQùs   ‚
/�"/z
===== DONE =====zTotal: zWith body: rc   z.1fz%)zWith body: 0z	Avg seg: zAttachments: z
Imported: )ÚargparseÚArgumentParserÚadd_argumentr   Ú
parse_argsrˆ   ÚprintrŒ   rD   ÚpagesÚminr   r;   Ú	enumerater&   r=   Údictr~   r    Úchrr!   r"   ÚDELAYÚsumÚmaxÚskip_dbr�   )r¡   ÚparserÚargsrB   r@   r¦   Ú	all_itemsÚpageÚ
page_itemsÚ_ÚidxrŽ   Údsr5   rŠ   rp   ru   ro   ÚwbÚtaÚavgs                        r   Úmainrº   Ô   s  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐÔ7Ø
×Ñ˜¨LÐÔ9Ø×ÑÓ€Dä„IÜ	ˆF”9�+˜VÐ
$Ô%ô )¨Ó+Ñ€Eˆ;ÙÜˆjÔØä	ˆM˜+˜Ð
'Ô(ØŸ:™:¨š?‰K´°D·J±JÀÓ0L€EÜ	ˆL˜˜Ð
 Ô!à€IÜ�a˜ ™Ó#ó "ˆØ�1Š9Ø‰Jä+¨DÓ1‰MˆJ˜áÜ�K ˜v Q u g¨]Ð;Ô<Øä�˜D˜6  5 '¨¬C°
«OÐ+<¸KÐHÔIÜ" :Ó.ó 	‰IˆC�Ü�Cœ˜I› qÑ(Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDä˜$˜u™+Ó&ˆBÙØ× Ñ ¤ d°BÀÀfÁÐ[]Ô!^Ô_Ü˜Ô"Øä4CÀBÓ4GÑ1ˆE�7˜H kØ×ÑØÒ/ $ w¡-Ø˜E‘{Ø"Ø$Ò4¨¨V©Ø*ñô ñ Ü˜¤ W§]¡]´3°r³7¼3¸r»7±?Ó%CÓ!DÐ EÀZÑYdÑPUÐjnÐOoÐpÕqä˜Ô(ä�J‰J”uÖò/	ð"ôH 	ˆI‹€AÜ	Ñ2˜	Ô2Ó	2€BÜ	Ñ6¨IÔ6Ó	6€BÜ
ÑQ°yÔQÓ
QÔTWÐXZÐ\]ÓT^Ñ
^€Cä	ÐÔ Ü	ˆG�A�3ˆ-ÔÙÜ±b�˜B˜4˜r " Q¡$ s¡(¨3 ¨rÑ2¸nÔMÜ	ˆI�c˜#�YÐ
Ô Ü	ˆM˜"˜Ð
Ôà�<Š<Ü�
œ: iÓ0Ð1Ð2Õ3ð r   Ú__main__)Ú__doc__r   Úsysr!   r   Úbs4r   Úurllib.parser   r7   rŒ   ÚGROUPr   r   r«   r‚   r   r&   rD   r~   rˆ   r�   rº   Ú__name__rK   r   r   ú<module>rÂ      s€   ðñ÷ Ó Û Ý Ý  à.€Ø$€	Ø€ØÐWÐ
X€Ø
€Ø€Ø
€òò	ò%òN\9ò|òò.F4ðP ˆzÒÙ…Fð r   