Ë
    ¸¬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ZddlmZ ddl	m
Z
 ddlmZ dZdZdd	iZd
ZdZdZd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zedk(  r e«        yy)u{   
èŠ®åŸŽåŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š çˆ¬è™«
http://www.rcx.gov.cn/zfxxgk/gsgg/index.shtml
è‡ªå®šä¹‰CMSï¼Œ4é¡µï¼Œ20æ�¡/é¡µ
é    N)ÚBeautifulSoup)Úurljoin)Údatetimez!http://www.rcx.gov.cn/zfxxgk/gsggu	   èŠ®åŸŽåŽ¿z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é   é   z/mnt/data/search.dbc                  ó˜   — dd l } | j                  t        «      }|j                  d«       |j	                  «        |j                  «        y )Nr   áP  
        CREATE TABLE IF NOT EXISTS gov_raw (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            page_url TEXT UNIQUE,
            title TEXT,
            content TEXT,
            publish_date TEXT,
            site_name TEXT,
            summary TEXT,
            attachments TEXT,
            date_rank TEXT
        )
    )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcommitÚclose)r
   Úconns     ú#/root/gov_crawler/crawl_rcx_gsgg.pyÚ	ensure_dbr      s8   € ÛØ�?‰?œ7Ó#€DØ‡L�Lð ô 	ð 	‡K�K„MØ‡J�J…Ló    c                 ó–  — dd l }|j                  t        «      }|j                  d«       d}| D ]:  }	 |j                  d|d   |d   |d   |d   |d   |d	   |d
   |d   f«       |dz  }Œ< |j                  «        |j                  «        |S # t        $ r1}t        d|d   d d › d|› �t        j                  ¬«       Y d }~Œ”d }~ww xY w)Nr   r	   zÁ
                INSERT OR REPLACE INTO gov_raw (page_url, title, content, publish_date, site_name, summary, attachments, date_rank)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            Úpage_urlÚtitleÚcontentÚpublish_dateÚ	site_nameÚsummaryÚattachmentsÚ	date_ranké   u     å…¥åº“å¤±è´¥: é2   z - )Úfile)
r
   r   r   r   Ú	ExceptionÚprintÚsysÚstderrr   r   )Úitemsr
   r   ÚimportedÚitemÚes         r   Ú
save_to_dbr(   -   sõ   € ÛØ�?‰?œ7Ó#€DØ‡L�Lð ô 	ð €HØò Uˆð
	UØ�L‰Lð ð �ZÑ  $ w¡-°°i±À$À~ÑBVØ�[Ñ! 4¨	¡?°D¸Ñ4GÈÈkÑIZðôð ˜‰M‰HðUð 	‡K�K„MØ‡J�J„LØ€Oøô	 ò 	UÜÐ$ T¨*Ñ%5°c°rÐ%:Ð$;¸3¸q¸cÐBÌÏÉ×TÒTûð	Uús   ³7BÂ	CÂ'CÃCc                 ó,  — t        t        «      D ]H  }	 t        j                  | t        t
        |¬«      }|j                  dk(  r|c S |j                  dk(  r y ŒJ y # t        j                  $ r$ |t        dz
  k  rt        j                  d«       Y Œ‚w xY w)N)ÚheadersÚtimeoutÚstreaméÈ   i”  r   é   )
ÚrangeÚRETRIESÚrequestsÚgetÚHEADERSÚTIMEOUTÚstatus_codeÚRequestExceptionÚtimeÚsleep)Úurlr,   ÚattemptÚrs       r   Ú	fetch_urlr<   O   s‡   € Üœ“>ò 	ˆð	Ü—‘˜S¬'¼7È6ÔRˆAØ�}‰} Ò#Ø’Ø—‘ #Ò%Ùð &ð	ð øô ×(Ñ(ò 	Øœ 1™Ò$Ü—
‘
˜1”ùð	ús   ”1AÁAÁ4BÂBc                 óV   — | syt        j                  dd| «      j                  «       } | S )NÚ u7   [-â€“â€”]\s*èŠ®åŸŽåŽ¿äººæ°‘æ”¿åºœ[é—¨é—¨æˆ·ç½‘ç«™]*\s*$)ÚreÚsubÚstrip)r   s    r   Úclean_titlerB   ]   s*   € ÙØÜ�F‰FÐMÈrÐSXÓY×_Ñ_Óa€EØ€Lr   c                 ó¨   — t        j                  dt        | «      «      }|r1|j                  d«      j	                  dd«      j	                  dd«      S y)Nz(\d{4}[-/.]\d{1,2}[-/.]\d{1,2})r   ú/ú-ú.r>   )r?   ÚsearchÚstrÚgroupÚreplace)ÚtextÚms     r   Úextract_date_from_textrM   d   sE   € Ü
�	‰	Ð4´c¸$³iÓ@€AÙØ�w‰w�q‹z×!Ñ! # sÓ+×3Ñ3°C¸Ó=Ð=Ør   c                 ó   — t        | «      }|sy d|_        t        |j                  d«      }d}|j	                  d«      }|rt        |j                  d¬«      «      }|s;|j	                  ddd	i¬
«      }|r$|j                  d«      r|d   j                  «       }|s(|j	                  dd„ ¬«      }|r|j                  d¬«      }d}|j	                  dddi¬
«      }|r'|j                  d«      r|d   j                  «       d d }|s/|j	                  dd„ ¬«      }	|	rt        |	j                  «       «      }|st        | «      }d}
|j	                  dd¬«      }|r–g }|j                  D ]t  }|j                  dk(  r9|j                  d¬«      }|r|j                  «       dv rŒ9|j                  |«       ŒK|j                  dk(  sŒ[|j                  t        |«      «       Œv dj                  |«      }
g }|rZ|j                  d«      D ]F  }|j                  dd«      }|sŒ|j!                  d«      sŒ*t#        | |«      }|j                  |«       ŒH d}|
rt%        j&                  dd|
«      }|d d }|||
|rt)        j*                  |d¬«      |d œS d|d œS )!Núutf-8úhtml.parserr>   r   T©rA   ÚmetaÚnameÚArticleTitle)Úattrsr   Úh3c                 ó   — | xr d| v S )NÚf36© ©Úcs    r   ú<lambda>zfetch_detail.<locals>.<lambda>|   s   € ¨aÒ.>°E¸Q°J€ r   )Úclass_ÚPubDateé
   Úpc                 ó   — | xr d| v S )NÚdaterY   rZ   s    r   r\   zfetch_detail.<locals>.<lambda>†   s   € °Ò1B°vÀ°{€ r   ÚdivÚZoom)Úid)z&nbsp;r>   Útablez

ÚaÚhref)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarz<[^>]+>r-   F)Úensure_ascii©r   Úpub_dater   r   r   )r<   Úencodingr   rK   ÚfindrB   Úget_textr2   rA   rM   ÚchildrenrS   ÚappendrH   ÚjoinÚfind_allÚendswithr   r?   r@   ÚjsonÚdumps)r9   r;   Úsoupr   Ú	title_tagrR   rV   rk   Ú	meta_dateÚp_dateÚcontent_htmlÚzoomÚpartsÚchildÚinnerr   rg   rh   Úfull_urlr   Ú
clean_texts                        r   Úfetch_detailr�   k   s’  € Ü�#‹€AÙØØ€A„JÜ˜Ÿ™ Ó/€Dð €EØ—	‘	˜'Ó"€IÙÜ˜I×.Ñ.°TÐ.Ó:Ó;ˆÙØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙ�D—H‘H˜YÔ'Ø˜‘O×)Ñ)Ó+ˆEÙØ�Y‰Y�tÑ$>ˆYÓ?ˆÙØ—K‘K d�KÓ+ˆEð €HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜YÑ'×-Ñ-Ó/°°Ð4ˆÙØ—‘˜3Ñ'B�ÓCˆÙÜ-¨f¯o©oÓ.?Ó@ˆHÙÜ)¨#Ó.ˆð €LØ�9‰9�U˜vˆ9Ó&€DÙØˆØ—]‘]ò 	)ˆEØ�z‰z˜SÒ ØŸ™¨T˜Ó2�Ù §¡£°Ñ ?ØØ—‘˜UÕ#Ø—‘˜wÓ&Ø—‘œS ›ZÕ(ð	)ð —{‘{ 5Ó)ˆð €KÙØ—‘˜sÓ#ò 	-ˆAØ—5‘5˜ Ó$ˆDÚ˜Ÿ™Ð&`ÕaÜ" 3¨Ó-�Ø×"Ñ" 8Õ,ð		-ð €GÙÜ—V‘V˜J¨¨LÓ9ˆ
Ø˜T˜cÐ"ˆð ØØÙFQ”t—z‘z +¸EÔBØñð ð XZØñð r   c                 ó.  — | dk(  r
t         › d�}nt         › d| › d�}t        |«      }|sg S d|_        t        |j                  d«      }g }|j                  d«      }|sg S |j                  dd	¬
«      D ]   }|j                  d«      }|sŒ|j                  dd«      }|sŒ,t        t         dz   |«      }	|j                  dd«      xs |j                  d¬«      }
|j                  d«      }|r|j                  d¬«      nd}|j                  |	|
|dœ«       Œ¢ |S )Nr   ú/index.shtmlz/index_z.shtmlrO   rP   z!div.rightCon div.box_list ul.pd20ÚliF)Ú	recursiverg   rh   r>   rD   r   TrQ   Úspan)r9   r   Ú	list_date)ÚBASE_URLr<   rl   r   rK   Ú
select_onerr   rm   r2   r   rn   rp   )Úpage_numr9   r;   rv   r$   Úulr„   rg   rh   Ú
detail_urlr   r†   Údate_strs                r   Úfetch_list_pagerŽ   ³   s"  € Ø�1‚}Ü�
˜,Ð'‰ä�
˜' ( ¨6Ð2ˆä�#‹€AÙØˆ	Ø€A„JÜ˜Ÿ™ Ó/€Dà€EØ	�‰Ð<Ó	=€BÙØˆ	à�k‰k˜$¨%ˆkÓ0ò ˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆÙØÜœX¨™^¨TÓ2ˆ
Ø—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ�w‰w�v‹ˆÙ04�4—=‘= t�=Ô,¸"ˆØ�‰ØØØ!ñ
õ 	ðð  €Lr   c                 ó   — g }t        t        › d�«      }|st        d«       |S d|_        t	        j
                  d|j                  «      }|rt        |j                  d«      «      nd}t        d|› �«       | dk(  r|nt        | |«      }t        d|› d	�«       d}d}d}d}	t        d|dz   «      D �]ñ  }
t        d
|
› d|› d�«       t        |
«      }|st        d«       Œ/t        dt        |«      › d�«       |D �]¥  }|dz  }t        |d   «      }|r|d   s;t        d|› d|d   d d › d�«       t        d«       |dz  }|xs |d   |d   ddddœ}nÃt        t	        j                  d|d   «      «      dz   }||z  }|j                  d«      r!t        t!        j"                  |d   «      «      nd}|dkD  r|	dz  }	|j                  d«      xs |j                  d«      xs d}t        d|› d|d   d d › d�«       t        d|› d|dkD  rd nd!› d"|› �«       |j%                  |d   |j                  d|d   «      |j                  dd«      |j                  d|d   «      t&        |j                  d#d«      |j                  dd«      |j                  d|d   «      d$œ«       �Œ¨ �Œô |rd%||z  d%z  z
  nd}t        d&«       t        d'|› �«       t        d(||z
  › d)|d*›d+�«       ||z
  dkD  rt        d,|||z
  z  d*›�«       t        d-|	› �«       |S ).Nrƒ   u   æ— æ³•è®¿é—®é¦–é¡µrO   z$pageCount["\']\s*:\s*["\'](\d+)["\']r   u   æ€»é¡µæ•°: r   u   å°†çˆ¬å�–: u    é¡µu	   
--- ç¬¬ rD   u    é¡µ ---u     (ç©º)u     åˆ—è¡¨é¡¹: õ    æ�¡r9   r   z  [z] r   é(   z...u       âš ï¸� ç©ºæ­£æ–‡r‡   r>   rj   z\n\nr   rk   z    seg=z
 | attach=ÚYESÚnoz | date=r   )r   r   r   r   r   r   r   r   éd   z
===== DONE =====zTotal: zWith body: z (z.1fz%)z	Avg seg: zAttachments: )r<   rˆ   r!   rl   r?   rG   rK   ÚintrI   Úminr/   rŽ   Úlenr�   Úfindallr2   rt   Úloadsrp   Ú	SITE_NAME)Ú	max_pagesÚ	all_itemsr;   Ú
page_matchÚtotal_pagesÚpages_to_fetchÚfetchedÚ
empty_bodyÚ	total_segÚtotal_attachÚpageÚ
list_itemsr&   ÚdetailÚ	seg_countÚattach_countr�   Úpercs                     r   Úfetch_all_itemsrª   ×   st  € Ø€Iä”X�J˜lÐ+Ó,€AÙÜÐ"Ô#ØÐà€A„JÜ—‘ÐBÀAÇFÁFÓK€JÙ.8”#�j×&Ñ& qÓ)Ô*¸a€KÜ	ˆK˜�}Ð
%Ô&à$-°¢N‘[¼¸IÀ{Ó8S€NÜ	ˆK˜Ð' tÐ
,Ô-à€GØ€JØ€IØ€Lä�a˜¨!Ñ+Ó,ó $ˆÜ�
˜4˜&  .Ð!1°Ð:Ô;Ü$ TÓ*ˆ
ÙÜ�)ÔØÜ�œc *›oÐ.¨dÐ3Ô4àó 	ˆDØ�q‰LˆGÜ! $ u¡+Ó.ˆFÙ ¨	Ò!2Ü˜˜G˜9 B t¨G¡}°S°bÐ'9Ð&:¸#Ð>Ô?ÜÐ,Ô.Ø˜a‘�
Øò U¨T°'©]ÈÈ[ÑHYØ/1À"ÐQSñ$U‘ô  ¤§
¡
¨7°F¸9Ñ4EÓ FÓGÈ!ÑK�	Ø˜YÑ&�	ØIOÏÉÐTaÔIbœs¤4§:¡:¨f°]Ñ.CÓ#DÔEÐhi�Ø !Ò#Ø  AÑ%�LØ!Ÿ:™: jÓ1ÒP°T·X±X¸kÓ5JÒPÈb�Ü˜˜G˜9 B t¨G¡}°S°bÐ'9Ð&:¸#Ð>Ô?Ü˜  ¨:¸|ÈaÒ?O±eÐUYÐ5ZÐZbÐckÐblÐmÔnà×ÑØ  ™KØŸ™ G¨T°'©]Ó;Ø!Ÿ:™: i°Ó4Ø &§
¡
¨:°t¸KÑ7HÓ IÜ&Ø!Ÿ:™: i°Ó4Ø%Ÿz™z¨-¸Ó<Ø#ŸZ™Z¨
°D¸Ñ4EÓFñ	ö 	ò'	ð$ñL 29ˆ3�*˜wÑ&¨Ñ,Ò-¸a€DÜ	ÐÔ Ü	ˆG�G�9Ð
ÔÜ	ˆK˜ *Ñ,Ð-¨R°°S¨z¸Ð
<Ô=Ø�Ñ˜aÒÜ�	˜) W¨ZÑ%7Ñ8¸Ð=Ð>Ô?Ü	ˆM˜,˜Ð
(Ô)àÐr   c                  ó²  — dd l } | j                  d¬«      }|j                  dt        dd¬«       |j                  ddd	¬
«       |j	                  «       }t        dt        › d�«       t        |j                  dkD  r|j                  nd¬«      }|st        d«       y |j                  s%t        «        t        |«      }t        d|› d�«       y t        d	«       y )Nr   u   èŠ®åŸŽåŽ¿å…¬ç¤ºå…¬å‘Š)Údescriptionz--pagesu   çˆ¬å�–é¡µæ•°, 0=å…¨éƒ¨)ÚtypeÚdefaultÚhelpz	--skip-dbÚ
store_trueu   è·³è¿‡å…¥åº“)Úactionr¯   z===== u    çˆ¬å�– =====)r›   u	   æ— æ•°æ�®u   å…¥åº“: r�   )ÚargparseÚArgumentParserÚadd_argumentr•   Ú
parse_argsr!   rš   rª   ÚpagesÚskip_dbr   r(   )r²   ÚparserÚargsrœ   r%   s        r   Úmainrº     s¼   € ÛØ×$Ñ$Ð1HÐ$ÓI€FØ
×Ñ˜	¬°QÐ=UÐÔVØ
×Ñ˜¨L¸~ÐÔNØ×ÑÓ€Dä	ˆF”9�+˜]Ð
+Ô,ä¸¿
¹
ÀQº¨$¯*ª*ÈAÔN€IÙÜˆkÔØà�<Š<ÜŒÜ˜iÓ(ˆÜ�˜˜
 $Ð'Õ(äˆnÕr   Ú__main__)F)r   )Ú__doc__r?   r"   r7   Úosrt   r1   Úbs4r   Úurllib.parser   r   rˆ   rš   r3   r4   r0   r   r   r(   r<   rB   rM   r�   rŽ   rª   rº   Ú__name__rY   r   r   ú<module>rÁ      s�   ðñ÷ × Û Û Ý Ý  Ý à.€Ø€	àÐPð€ð €Ø
€Ø
€òò(óDòòòEòP!óHCòLð, ˆzÒÙ…Fð r   