Ë
    ¸¬uj²$  ã                   ó¸   — 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edk(  r e«        yy)uB  
ç�µæ­¦å¸‚äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
URL: http://www.nxlw.gov.cn/zwgk/zfbmzsjgxxgk/lwszfb/gyhtlm/gsgg_29021/
CMS: å®�å¤�ç»Ÿä¸€å¹³å�° (TRS UEDITOR)
åˆ—è¡¨: ul.la_right_1 > li > span: a + date
åˆ†é¡µ: ä»…1é¡µ (countPage=1)
è¯¦æƒ…: /zwgk/.../YYYYMM/tYYYYMMDD_XXXXXXX.html
æ­£æ–‡: div.view.TRS_UEDITOR æˆ– div.article
é    N)ÚBeautifulSoup)Úurljoin)ÚdatetimezBhttp://www.nxlw.gov.cn/zwgk/zfbmzsjgxxgk/lwszfb/gyhtlm/gsgg_29021/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.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 }~Œxd }~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                  ó&  — t        t        «      } | sg S g }| j                  dd¬«      }|s|S |j                  dd¬«      D ]Î  }|j                  d«      }t	        |«      dk  rŒ#|d	   j                  d
«      }|r|j                  d«      sŒKt        t        |d   «      }|j                  dd«      xs |j                  j                  «       }|d   j                  j                  «       }|sŒ¬|j                  |j                  «       ||dœ«       ŒÐ |S )NÚulÚ
la_right_1©Úclass_ÚliF©Ú	recursiveÚspanr   r   ÚaÚhrefÚtitler   r
   )r5   r%   Údate)
r)   ÚBASE_URLÚfindÚfind_allÚlenr   r   r   ÚstripÚappend)	ÚsoupÚitemsr+   r/   Úspansr3   r4   r5   Údate_strs	            r   Úfetch_list_pagerA   .   sÿ   € Ü”HÓ€DÙØˆ	à€EØ	�‰�4 ˆÓ	-€BÙØˆà�k‰k˜$¨%ˆkÓ0ò ˆØ—‘˜FÓ#ˆÜˆu‹:˜Š>ØØ�!‰H�M‰M˜#ÓˆÙ˜Ÿ™˜fœØä”x  6¡Ó+ˆØ—‘�g˜rÓ"Ò4 a§f¡f§l¡l£nˆØ˜‘8—=‘=×&Ñ&Ó(ˆÙØà�‰Ø—[‘[“]ØØñ
õ 	ðð( €Lr   c           
      ó	  — d}| j                  d«      }|r|j                  j                  «       }|sR| j                  d«      }|r?|j                  j                  «       }t        j                  dd|«      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 ]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   Úh1r5   zT--[\u5b81\u590f\u7075\u6b66\u5e02\u4eba\u6c11\u653f\u5e9c\u95e8\u6237\u7f51\u7ad9]*$)ÚdivÚpr2   u   å�‘å¸ƒæ—¶é—´ï¼šrD   c                 ó   — | xr d| v S )NÚTRS_UEDITOR© )Úcs    r   ú<lambda>z!extract_content.<locals>.<lambda>h   s   € °AÒ4L¸-È1Ð:L€ r   r-   ÚarticleÚconc              3   ó$   K  — | ]  }|d v –— Œ
 y­w©u	    
	ã€€Â NrH   ©Ú.0rI   s     r   ú	<genexpr>z"extract_content.<locals>.<genexpr>r   s   è ø€ Ò#KÀ AÐ)<Ô$<Ñ#Kùó   ‚)rE   rD   c              3   ó8   K  — | ]  }|j                   d v –— Œ y­w))ÚtablerD   r+   ÚolN)ÚnamerO   s     r   rQ   z"extract_content.<locals>.<genexpr>y   s   è ø€ ÒpÈ1 §¡Ð*FÔ FÑpùó   ‚Fr0   c              3   ó$   K  — | ]  }|d v –— Œ
 y­wrN   rH   rO   s     r   rQ   z"extract_content.<locals>.<genexpr>~   s   è ø€ Ò,QÈ!¨QÐ2EÔ-EÑ,QùrR   rT   T)r;   c              3   ó$   K  — | ]  }|d v –— Œ
 y­wrN   rH   rO   s     r   rQ   z"extract_content.<locals>.<genexpr>�   s   è ø€ Ò&MÀA qÐ,?Ô'?Ñ&MùrR   ÚimgÚsrcÚaltz![z](ú))r+   rU   Úbrr3   )r4   r4   z3\.(pdf|doc|docx|xls|xlsx|zip|rar|ceb|ofd|ppt|pptx)$ú[éd   ú

)r8   r   r;   r   Úsubr9   r   ÚchildrenrV   ÚstrÚallr<   ÚlowerÚanyÚget_textr   r   r7   r   ÚsetÚaddÚjoin)r=   r5   rC   ÚtÚpub_dateÚtagr(   ÚtxtÚpartsÚattachmentsÚcontent_divÚchildr   Ú	has_blockrb   Úsub_txtr[   r\   r3   r4   Úfull_urlÚseenÚunique_partsrE   ÚkeyÚcontents                             r   Úextract_contentr{   N   s  € Ø€EØ	�‰�4‹€BÙ	Ø—‘—‘“ˆÙØ�I‰I�gÓˆÙØ—F‘F—L‘L“NˆEÜ—F‘FÐrÐtvÐx}Ó~÷  Eñ  Eó  GˆEà€HØ#ò ˆØ—‘˜sÓ#ò 	ˆAØ—&‘&—,‘,“.ˆCØ/°3Ò6Ü% c›?�ÚÙð	ò Ùðð €EØ€Kð —)‘)˜EÑ*L�)ÓM€KÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i ¨e�iÓ4ˆâØ ×)Ñ)ó 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°Ð%Ó5ò 	<ˆ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}   ÚconnrI   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   rz   r   r   z´INSERT OR REPLACE INTO gov_raw 
                (page_url, title, content, publish_date, site_name, summary, attachments, date_rank)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)r%   r5   rm   rq   ú
z
0000-00-00r   )
r}   r~   r   r€   r�   Ú	SITE_NAMErk   r"   r‚   rƒ   )r>   r}   r„   rI   Ú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        «       }|st        d	«       y t        |«      }|j                  dkD  rt        |j                  |«      n|}t        d
|› d|› �«       g }t        |d | «      D ]â  \  }}t        d|dz   › d|› d|d   d d › d�«       t        |d   «      }	|	s|j                  |«       t        d«       ŒQt        |	«      \  }
}}}|
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&        «       Œä t        |«      }t)        d„ |D «       «      }t)        d„ |D «       «      }t)        d„ |D «       «      t+        |d«      z  }t        d «       t        d!|› �«       t        |rd"|› d#||z  d$z  d%›d&�nd'«       t        d(|d%›�«       t        d)|› �«       |j,                  st/        |«      }t        d*|› �«       y y )+Nr   z--pages)ÚtypeÚdefaultz	--skip-dbÚ
store_true)Úactionz===== u    çˆ¬å�– =====zNo items foundzTotal items: z, will fetch: z  [r   ú/z] r5   é(   z...r%   z    FAIL detailr6   )r5   r%   rz   rm   rq   ra   z    seg=z
 | attach=ÚYESÚnoz    WARN emptyc              3   ó,   K  — | ]  }|d    sŒ	d–— Œ y­w)rz   r   NrH   ©rP   Úis     r   rQ   zmain.<locals>.<genexpr>  s   è ø€ Ò2�1 Q y£\ŒQÑ2ùs   ‚
�c              3   ó8   K  — | ]  }t        |d    «      –— Œ y­w)rq   N)r:   r—   s     r   rQ   zmain.<locals>.<genexpr>  s   è ø€ Ò6 qŒS��=Ñ!×"Ñ6ùrW   c              3   ób   K  — | ]'  }|d    sŒ	t        |d    j                  d«      «      –— Œ) y­w)rz   ra   N)r:   Úsplitr—   s     r   rQ   zmain.<locals>.<genexpr>  s*   è ø€ ÒQ°!ÀAÀiÃLŒc�!�I‘,×$Ñ$ VÓ,×-ÑQùs   ‚
/�"/z
===== DONE =====zTotal: zWith body: z (r`   z.1fz%)zWith body: 0z	Avg seg: zAttachments: z
Imported: )ÚargparseÚArgumentParserÚadd_argumentr   Ú
parse_argsr…   Úprintrˆ   rA   r:   ÚpagesÚminÚ	enumerater)   r<   r{   r›   r#   r$   ÚDELAYÚsumÚmaxÚskip_dbrŒ   )rœ   ÚparserÚargsr>   ÚtotalÚpages_fetchÚ	all_itemsÚidxrŠ   Údetail_soupr5   rz   rm   rq   Úfinal_titleÚ
final_dateÚsegÚtotal_fetchedÚwbÚtaÚavgÚimps                         r   Úmainr·   å   s–  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐÔ7Ø
×Ñ˜¨LÐÔ9Ø×ÑÓ€Dä„Iä	ˆF”9�+˜]Ð
+Ô,ÜÓ€EÙÜÐÔØä�‹J€EØ,0¯J©J¸ªN”#�d—j‘j %Ô(À€KÜ	ˆM˜%˜ ¨{¨mÐ
<Ô=à€Iä˜u \ kÐ2Ó3ò ‰	ˆˆTÜ��C˜‘E�7˜!˜K˜=¨¨4°©=¸¸"Ð+=Ð*>¸cÐBÔCä˜t E™{Ó+ˆÙØ×Ñ˜TÔ"Ü�OÔ%Øä0?ÀÓ0LÑ-ˆˆw˜ +ØÒ,˜t G™}ˆØÒ-  f¡ˆ
à×ÑØ Ø˜‘;ØØ"Ø&ñ
ô 	ñ Ü�g—m‘m FÓ+Ó,ˆCÜ�H˜S˜E ±[©EÀdÐ+KÐLÕMä�NÔ$ä�
‰
”5Õð7ô: ˜	“N€MÜ	Ñ2˜	Ô2Ó	2€BÜ	Ñ6¨IÔ6Ó	6€BÜ
ÑQ°yÔQÓ
QÔTWÐXZÐ\]ÓT^Ñ
^€Cä	ÐÔ Ü	ˆG�M�?Ð
#Ô$Ü	¹mˆK˜�t˜2˜b Ñ.¨sÑ2°3Ð7°rÑ
:ÐQ_Ô`Ü	ˆI�c˜#�YÐ
Ô Ü	ˆM˜"˜Ð
Ôà�<Š<Ü˜Ó#ˆÜ�
˜3˜%Ð Õ!ð r   Ú__main__)Ú__doc__r   Úsysr#   Úosr   Úbs4r   Úurllib.parser   r   r7   rˆ   ÚGROUPr   r   r¤   r   r   r)   rA   r{   r…   rŒ   r·   Ú__name__rH   r   r   ú<module>rÀ      s†   ðñ÷ × Û Ý Ý  Ý àO€Ø$€	Ø€àÐPð€ð €Ø€à
€òò	òò@e1òNò*ò6?"ðB ˆzÒÙ…Fð r   