Ë
    %&˜j  ã                   óR  — 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Z
 ee
j                  «      dkD  r2e
j                  d   j                  «       r ee
j                  d   «      ndZe� ed ee«      z   «       dZdZd	Zd
ZddiZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uø   


ä¹Œæ‹‰ç‰¹ä¸­æ——-é€šçŸ¥å…¬å‘Š çˆ¬è™«
http://www.wltzq.gov.cn/ywdt/tzgg/
CMS: Custom TRS, static HTML pages
åˆ†é¡µ: index.html + index_N.html (N=1~23, 24é¡µ)
åˆ—è¡¨: æ¯�ä¸ªliåœ¨ç‹¬ç«‹ulä¸­, a[href^="./202"]
è¯¦æƒ…: div.trs_editor_view.TRS_UEDITOR
é    N)ÚBeautifulSoup)Úurljoiné   z[AutoPg] max_pages=z/mnt/data/search.dbz"http://www.wltzq.gov.cn/ywdt/tzgg/u   ä¹Œæ‹‰ç‰¹ä¸­æ——-é€šçŸ¥å…¬å‘Šé   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c           
      óÌ  — | dk(  r
t         dz   }nt         › d| › d�}t        j                  |t        d¬«      }d|_        |j
                  dk7  rt        d	|j
                  › d
�«       yt        |j                  d«      }g }|j                  d«      D �]O  }|j                  dd¬«      }|sŒ|d   j                  «       }|j                  d«      sŒ?|j                  d¬«      }t        |«      dk  rŒ`|j                  d«      }	|	r|	j                  d¬«      nd}
|
�r@|j                  dd¬«      }|j                  dd¬«      }|j                  dd¬«      }|r¢|r |rž|j                  d¬«      j                  d«      }|j                  d¬«      j                  d«      j                  d«      }|j                  d¬«      }|j!                  «       rŽ|j!                  «       r~|j!                  «       rn|› d|› d|› �}
nct#        j$                  d|
«      }|rK|j'                  d«      › dt)        |j'                  d«      «      d›dt)        |j'                  d «      «      d›�}
t#        j*                  d!|
«      sOt#        j$                  d"|«      }|r7|j'                  d«      › d|j'                  d«      › d|j'                  d «      › �}
t-        ||«      }|j/                  |||
d#œ«       �ŒR |S )$zFParse list page. page_num=0 -> index.html, page_num>=1 -> index_N.htmlr   z
index.htmlÚindex_z.htmlé   ©ÚheadersÚtimeoutúutf-8éÈ   z  HTTP z
, stoppingNúhtml.parserÚliÚaT)Úhrefr   z./202©Ústripé   ÚspanÚ Úday©Úclass_ÚmonthÚyearé   ú-u)   (\d{4})[-/å¹´]?(\d{1,2})[-/æœˆ]?(\d{1,2})r   Ú02dé   z^\d{4}-\d{2}-\d{2}zt(\d{4})(\d{2})(\d{2})_)ÚtitleÚurlÚdate)ÚBASE_URLÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚprintr   ÚtextÚfind_allÚfindr   Ú
startswithÚget_textÚlenÚzfillÚisdigitÚreÚsearchÚgroupÚintÚmatchr   Úappend)Úpage_numr"   ÚrÚsoupÚitemsr   r   r   r!   r   r#   Úday_elÚmon_elÚyr_elÚddÚmmÚyyyyÚmÚumÚfull_urls                       ú /root/gov_crawler/crawl_wltzq.pyÚ
crawl_pagerG   "   s™  € à�1‚}Ü˜Ñ%‰ä�
˜&  
¨%Ð0ˆä�‰�S¤'°2Ô6€AØ€A„JØ‡}�}˜ÒÜ�˜Ÿ™� jÐ1Ô2Øä˜Ÿ™ Ó/€Dð €EØ�m‰m˜DÓ!ó (FˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆØ�‰˜wÔ'Øà—
‘
 �
Ó&ˆÜˆu‹:˜Š>Øà�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆò Ø—W‘W˜V¨E�WÓ2ˆFØ—W‘W˜V¨G�WÓ4ˆFØ—G‘G˜F¨6�GÓ2ˆEÙ™&¡UØ—_‘_¨4�_Ó0×6Ñ6°qÓ9�Ø—_‘_¨4�_Ó0×6Ñ6°sÓ;×AÑAÀ!ÓD�Ø—~‘~¨D�~Ó1�Ø—:‘:”< B§J¡J¤L°T·\±\´^Ø"˜V 1 R D¨¨"¨Ð.‘Dô —I‘IÐJÈDÓQ�ÙØŸg™g a›j˜\¨¬3¨q¯w©w°q«z«?¸3Ð*?¸qÄÀQÇWÁWÈQÃZÃÐQTÐ@UÐV�Dô �x‰xÐ-¨tÔ4Ü—‘Ð5°tÓ<ˆBÙØŸ(™( 1›+˜ a¨¯©°« }°A°b·h±h¸q³k°]ÐC�ä˜3 Ó%ˆØ�‰˜u¨X¸tÑDÖEðQ(FðT €Ló    c                 ó,  ‡— t        j                  | d   t        d¬«      }d|_        t	        |j
                  d«      }|j                  d«      }|s|j                  d«      }|s|j                  dd	„ ¬
«      }|st        d| d   › �«       y|j                  g d¢«      D ]  }|j                  «        Œ ˆfd„Š ‰|«      }|rt        |«      dk  r$|j                  dd¬«      }|rt        |«      dk  ry|rt        |«      dk  rt        d| d   › �«       y|j                  d«      }|r|j                  d¬«      nd}t        j                  dd|«      j                  «       }|rt        |«      t        | d   «      k  r| d   }||| d   | d   t         dœS )zParse detail pager"   r	   r
   r   r   zdiv.trs_editor_view.TRS_UEDITORzdiv.art-conÚdivc                 ó   — | xr d| xs dv S )NÚ
TRS_Editorr   © )Úxs    rF   ú<lambda>zfetch_detail.<locals>.<lambda>k   s   € ¸Ò8W¸lÈqÊwÐTVÐ>W€ rH   r   z  No content for N)ÚscriptÚstyleÚiframec                 óÚ  •— g }| j                   D ]Å  }t        |dd«      }|dk(  r(|j                  dd¬«      }|sŒ+|j                  |«       Œ=|dk(  r|j                  t	        |«      «       Œ]|dk(  r ‰|«      }|sŒm|j                  |«       Œ|�Œ‚t        |t        «      sŒ“|j                  «       }|sŒ¦t        |«      d	kD  sŒµ|j                  |«       ŒÇ |rd
j                  |«      S dS )zFRecursively extract content preserving paragraph breaks and table HTMLÚnameNÚpr   T©Ú	separatorr   ÚtablerJ   r    z

)	ÚchildrenÚgetattrr/   r8   ÚstrÚ
isinstancer   r0   Újoin)ÚnodeÚpartsÚchildÚtagÚtxtÚsubÚextract_contents         €rF   rd   z%fetch_detail.<locals>.extract_contentu   sÒ   ø€ àˆØ—]‘]ò 	&ˆEÜ˜% ¨Ó.ˆCØ�cŠzØ—n‘n¨r¸�nÓ>�ÚØ—L‘L Õ%Ø˜’Ø—‘œS ›ZÕ(Ø˜’Ù% eÓ,�ÚØ—L‘L Õ%Ø‘¤¨E´3Õ!7Ø—k‘k“m�Úœ3˜s›8 a›<Ø—L‘L Õ%ð	&ñ  &+ˆv�{‰{˜5Ó!Ð2°Ð2rH   é   r   TrV   z  Content too short for r!   r   u*   \s*[-_â€•]\s*ä¹Œæ‹‰ç‰¹ä¸­æ——äººæ°‘æ”¿åºœ.*r#   )r!   Úcontentr#   r"   Ú	site_name)r%   r&   r'   r(   r   r+   Ú
select_oner-   r*   r,   Ú	decomposer0   r/   r3   rc   r   Ú	SITE_NAME)	Úitemr:   r;   Úcontent_divra   rf   Ú	title_tagÚ
full_titlerd   s	           @rF   Úfetch_detailro   `   s–  ø€ ä�‰�T˜%‘[¬'¸2Ô>€AØ€A„JÜ˜Ÿ™ Ó/€Dð —/‘/Ð"CÓD€KÙØ—o‘o mÓ4ˆÙØ—i‘i Ñ.W�iÓXˆáÜÐ! $ u¡+ Ð/Ô0Øà×#Ñ#Ò$AÓBò ˆØ�‰�ðô3ñ* ˜kÓ*€GÙ”c˜'“l RÒ'Ø×&Ñ&°¸4Ð&Ó@ˆÙœ#˜g›,¨Ò+Øá”c˜'“l RÒ'ÜÐ(¨¨e©¨Ð6Ô7Øð —	‘	˜'Ó"€IÙ3<�×#Ñ#¨$Ð#Ô/À"€JÜ—‘ÐEÀrÈ:ÓV×\Ñ\Ó^€JÙœ˜Z›¬3¨t°G©}Ó+=Ò=Ø˜'‘]ˆ
ð ØØ�V‘Ø�E‰{Üñð rH   c           
      ó’  — | syt        j                  t        d¬«      }|j                  «       }d}| D ]=  }	 |j	                  d|d   |d   |d   |d   |d	   f«       |j
                  dkD  r|d
z  }Œ? |j                  «        |j                  «        |j                  «        |S # t        $ r}t        d|› �«       Y d }~ŒŽd }~ww xY w)Nr   é<   )r   zhINSERT OR IGNORE INTO gov_raw (title, content, page_url, publish_date, site_name) VALUES (?, ?, ?, ?, ?)r!   rf   r"   r#   rg   r   z  DB error: )
Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚrowcountÚ	Exceptionr*   ÚcommitÚclose)ÚrecordsÚconnÚcÚinsertedÚrecÚes         rF   Ú
save_to_dbr�   ¤   sÍ   € ÙØÜ�?‰?œ7¨BÔ/€DØ�‰‹€AØ€HØò 
&ˆð		&Ø�I‰Ið)à�W‘˜s 9™~¨s°5©z¸3¸v¹;ÈÈKÑHXÐYôð
 �z‰z˜AŠ~Ø˜A‘�øð
&ð 	‡K�K„MØ‡K�K„MØ‡J�J„LØ€Oøô ò 	&Ü�L  Ð$×%Ñ%ûð	&ús   ·:B%Â%	CÂ.CÃCc            	      óH  — dd l } dt        «       v rAt        �;dd l}|j                  d   gdt        t        «      gz   |j                  dd  z   |_        | j                  «       }|j                  dt        dd¬«       |j                  dt        t        d¬«       |j                  «       }t        d	t        › d
�«       t        d|j                  dz   › d|j                  |j                  z   › �«       d}t        |j                  |j                  |j                  z   «      D ]å  }t        d|dz   › dt        › d�«       t!        |«      }|€t        d|dz   › �«        n¬|st        d|dz   › �«       ŒPt        dt#        |«      › d�«       g }|D ]5  }t%        |«      }	|	r|j'                  |	«       t)        j*                  d«       Œ7 |r+t-        |«      }
||
z  }t        d|
› dt#        |«      › d�«       t)        j*                  d«       Œç t        dd› �«       t        d|› �«       y )Nr   Ú_MAX_PGz--pagesr   z--startzStart page (0-indexed))ÚtypeÚdefaultÚhelpzMax pages to crawlz=== z ===zPages: r   z to z
Page ú/z...z  Stopped at page z  Empty page z  Found z itemsgš™™™™™É?z  Inserted z newg      à?ú
z(========================================zTotal inserted: )ÚargparseÚglobalsrƒ   ÚsysÚargvr[   ÚArgumentParserÚadd_argumentr6   Ú	MAX_PAGESÚ
parse_argsr*   rj   ÚstartÚpagesÚrangerG   r0   ro   r8   ÚtimeÚsleepr�   )r‰   r‹   ÚparserÚargsÚtotal_insertedÚpager<   Úbatchrk   Údetailr~   s              rF   Úmainrœ   »   s   € Ûà”G“IÑ¤'Ð"5ÛØ—H‘H˜Q‘K�= I¬s´7«|Ð#<Ñ<¸s¿x¹xÈÈ¸|ÑKˆŒà×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐ=UÐÔVØ
×Ñ˜	¬´YÐEYÐÔZØ×ÑÓ€Dä	ˆD”�˜4Ð
 Ô!Ü	ˆG�D—J‘J˜q‘L�>  d§j¡j°·±Ñ&;Ð%<Ð
=Ô>à€Nä�d—j‘j $§*¡*¨t¯z©zÑ"9Ó:ò ˆÜ�˜˜Q™�x˜q¤ ¨3Ð/Ô0Ü˜4Ó ˆàˆ=ÜÐ& t¨A¡v hÐ/Ô0ÙáÜ�M $ q¡& Ð*Ô+Øä�œ˜U›˜ FÐ+Ô,àˆØò 	ˆDÜ! $Ó'ˆFÙØ—‘˜VÔ$Ü�J‰J�s�Oð		ñ Ü! %Ó(ˆHØ˜hÑ&ˆNÜ�K ˜z¨¬3¨u«:¨,°dÐ;Ô<ä�
‰
�3�ð5ô8 
ˆBˆvˆhˆ-ÔÜ	Ð˜^Ð,Ð
-Õ.rH   Ú__main__)Ú__doc__r‹   r”   r3   r%   rr   Úbs4r   Úurllib.parser   Ú_SYSr0   rŒ   r2   r6   rƒ   r*   r[   rt   r$   rj   r�   r'   rG   ro   r�   rœ   Ú__name__rM   rH   rF   ú<module>r£      sÅ   ðñ	ó Û Û 	Û Û Ý Ý  ã Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/à
€Ø/€Ø*€	Ø€	ð ð  Dð€ò;ò|AòHò../ðb ˆzÒÙ…Fð rH   