Ë
    è‡zj�+  ã                   ó  — 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ZdZdZdZed	z   Zed
z   ZdZdZdZ ej*                  «       Zde_        ej0                  e_        ddddœZdd„Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)uÎ  å®‰å®�å¸‚äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š (gsgg) çˆ¬è™«
ç«™ç‚¹: www.kman.gov.cn (å®‰å®�å¸‚, äº‘å�—æ˜†æ˜Ž)
åˆ—è¡¨: /zfxxgk/fdzdgknr/gsgg/ (index.shtml) 
  åˆ†é¡µ: 2-10é¡µ index_{N}.shtml, >10é¡µ zcms/catalog/36648/pc/index_{N}.shtml, æ€»133é¡µÃ—25æ�¡â‰ˆ3325æ�¡
  æ�¡ç›®: div.data-table-item > p.w659 > a[href=/c/{date}/{id}.shtml] æ ‡é¢˜ + p.w80 > a[title=æ—¥æœŸ]
è¯¦æƒ…: /c/{YYYY-MM-DD}/{id}.shtml
  meta ArticleTitle/PubDate + div.content > h1 + div.activity æ­£æ–‡
é    N©Úurljoin)ÚBeautifulSoupu   å®‰å®�å¸‚-å…¬ç¤ºå…¬å‘Šzcrawl_kman_gsgg.pyu   äº‘å�—zhttp://www.kman.gov.cnz/zfxxgk/fdzdgknr/gsgg/z&/zcms/catalog/36648/pc/index_{N}.shtmlé…   z/mnt/data/search.dbz(/root/gov_crawler/kman_gsgg_output.jsonlFzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 ó´  — t        |«      D ]p  }	 t        j                  j                  | t        ¬«      }t        j                  j                  ||t        ¬«      }|j                  «       j                  dd¬«      c S  y
# t        $ rN}||dz
  k(  r't        d| › d|› �t        j                  ¬	«       Y d }~ y
t        j                  d«       Y d }~ŒÆd }~ww xY w)N)Úheaders)ÚtimeoutÚcontextzutf-8Úreplace)Úerrorsé   u     [WARN] è¯·æ±‚å¤±è´¥ ú: ©ÚfileÚ g      ø?)ÚrangeÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)Úurlr
   ÚretriesÚiÚreqÚrespÚes          ú$/root/gov_crawler/crawl_kman_gsgg.pyÚhttp_getr)   $   s¹   € Ü�7‹^ò 	ˆð	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°wÌÐ)ÓLˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ð		ð øô ò 	Ø�G˜a‘KÒÜÐ.¨s¨e°2°a°SÐ9ÄÇ
Á
ÕKÝÜ�J‰J�s�O‰Oûð		ús   �A+B Â 	CÂ	)CÂ8CÃCc                 ó  — | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )u?   strip &middot;&nbsp;&#32; å®žä½“å‰�ç¼€ å’Œçœ�ç•¥å�·æˆªæ–­å�Žç¼€z&middot;r   z&nbsp;z&#32;õ   Â·u   ^[\s\xa0Â·\u00b7]+z\s*\.{3,}\s*$)r   ÚreÚsubÚstrip©Útitles    r(   Úclean_titler1   2   sn   € à�M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐQSÓT×\Ñ\Ð]eÐgiÓj€EÜ�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó  — g }t        | d«      }|j                  dd¬«      D ]æ  }|j                  dt        j                  d«      ¬«      }|sŒ,|d   }t        t        |«      }t        |j                  d	d
¬«      «      }d}t        j                  d|«      }	|	r|	j                  d«      }|sF|j                  dd
¬«      D ]0  }
t        j                  d|
d   «      }|sŒ|j                  d«      } n |sŒÓ|j                  |||f«       Œè |S )u%   ä»Žåˆ—è¡¨é¡µæ��å�– (url, title, date)úhtml.parserÚdivzdata-table-item©Úclass_Úaz/c/\d{4}-\d{2}-\d{2}/\d+\.shtml©Úhrefr:   ú T©r.   r   z /(\d{4}-\d{2}-\d{2})/\d+\.shtml$r   r/   z(\d{4}-\d{2}-\d{2})r0   )r   Úfind_allÚfindr,   Úcompiler   ÚBASE_URLr1   Úget_textÚsearchÚgroupÚappend)ÚhtmlÚitemsÚsoupÚitemr8   r:   r"   r0   ÚdateÚdmÚspÚtms               r(   Ú
parse_listrM   :   s
  € à€EÜ˜˜}Ó-€DØ—‘˜eÐ,=�Ó>ò -ˆØ�I‰I�c¤§
¡
Ð+MÓ NˆIÓOˆÙØØ�‰yˆÜ”h Ó%ˆÜ˜AŸJ™J s°$˜JÓ7Ó8ˆàˆÜ�Y‰YÐ:¸DÓAˆÙØ—8‘8˜A“;ˆDÙØ—m‘m C¨t�mÓ4ò �Ü—Y‘YÐ5°r¸'±{ÓC�ÚØŸ8™8 A›;�DÙð	ò
 Ø�L‰L˜#˜u dÐ+Õ,ð'-ð( €Lr2   c           
      ó
  ‡‡— t        | d«      }d}t        j                  d| «      }|rt        |j	                  d«      «      }|s.|j                  d«      }|rt        |j                  d¬«      «      }d}t        j                  d| «      }|r|j	                  d«      }|s)t        j                  d	| «      }|r|j	                  d«      }|j                  d
d¬«      }	|	s||dg fS |	j                  d«      D ]  }
|
j                  «        Œ |	j                  d«      D ]  }|j                  «        Œ |	j                  t        j                  dt        j                  «      ¬«      D ]  }|j                  «        Œ g }t        «       }|	j                  dd¬«      D ]›  }|d   }|j                  d¬«      }t        j                  d|«      s6d|j                  «       v s$d|j                  «       v s|j                  d«      sŒft        ‰|«      }||v rŒw|j                  |«       |j!                  |||f«       Œ� |D ]ê  \  }}}|j#                  d|d¬«      }|r|n|j%                  d«      d   |_        |j(                  �–|j(                  j                  dt        j                  d«      ¬«      D ]c  }|t+        |j(                  j,                  «      dt+        |j(                  j,                  «      j/                  |«       v sŒT|j                  «        Œe |j1                  |«       Œì |D ��ch c]  \  }}}|’Œ
 c}}Šg }|	j                  d ¬!«      D ]ß  }|j2                  d"k(  r|j!                  t5        |«      «       Œ-|j2                  d#v r~|j                  dd¬«      }|sŒQ|j                  d"«      }t7        ˆˆfd$„|j                  dd¬«      D «       «      }|s|r|j!                  t5        |«      «       Œ§|j!                  |«       Œ¹|j                  dd¬«      }|sŒÏ|j!                  |«       Œá t        «       }g }|D ]X  }t        j8                  d%dt        j8                  d&d|«      «      }|sŒ2||vsŒ7|j                  |«       |j!                  |«       ŒZ d'j;                  |«      }|D ]  \  }}}||vsŒ|d(|› d)|› d*�z  }Œ t        j8                  d+d|«      }t        j8                  d,d'|«      j=                  «       }||||fS c c}}w )-u/   æ��å�– (title, date, content_html, attachments)r4   r   z/<meta\s+name="ArticleTitle"\s+content="([^"]+)"r   Úh1Tr<   z5<meta\s+name="PubDate"\s+content="(\d{4}-\d{2}-\d{2})u3   å�‘å¸ƒ(?:æ—¶é—´|æ—¥æœŸ)[:ï¼š]\s*(\d{4}-\d{2}-\d{2})r5   Úactivityr6   ÚscriptÚstylezdisplay\s*:\s*none)rR   r8   r9   r:   z6(?i)\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|ofd)(\?|$)ÚdownloadÚattachu   é™„ä»¶Ú_blank)r:   Útargetú/éÿÿÿÿNÚimgz(?i)\.(gif|png|jpg|jpeg))ÚsrcF)Ú	recursiveÚtable)Úpr5   rO   Úh2Úh3ÚulÚolÚlic              3   óR   •K  — | ]  }t        ‰|d    «      ‰v s|d    ‰v r|–— Œ  y­w)r:   Nr   )Ú.0r8   Úattached_hrefsÚpage_urls     €€r(   ú	<genexpr>z!extract_detail.<locals>.<genexpr>š   s8   øè ø€ ò  ØÜ˜8 Q v¡YÓ/°>ÑAØ�V‘9 Ñ.ô ñ ùs   ƒ$'ú\s+ú<[^>]+>z

z

<p><a href="z" target="_blank">z</a></p>u   æ‰“å�°æœ¬é¡µ[^\n]*z\n{3,})r   r,   rB   r1   rC   r>   rA   r=   Ú	decomposer?   ÚIÚsetÚlowerÚ
startswithr   ÚaddrD   Únew_tagÚsplitÚstringÚparentÚlistÚcontentsÚindexÚreplace_withÚnameÚstrÚanyr-   Újoinr.   ) rE   rf   rG   r0   ÚmtrO   rI   ÚmprJ   ÚcmÚsÚstÚhÚattachmentsÚseen_attr8   r:   ÚtxtÚabs_urlÚnew_aÚsibÚ_ÚpartsÚelÚinner_tablesÚel_has_attachÚseenÚfinal_partsr]   ÚkeyÚcontentre   s     `                             @r(   Úextract_detailr‘   U   sà  ù€ ä˜˜}Ó-€Dð €EÜ	�‰ÐEÀtÓ	L€BÙ	Ü˜BŸH™H Q›KÓ(ˆÙØ�Y‰Y�t‹_ˆÙÜ §¡°$ Ó 7Ó8ˆEð €DÜ	�‰ÐKÈTÓ	R€BÙ	Ø�x‰x˜‹{ˆÙÜ�Y‰YÐMÈtÓTˆÙØ—8‘8˜A“;ˆDð 
�‰�5 ˆÓ	,€BÙØ�d˜B Ð"Ð"ð �[‰[˜Ó"ò ˆØ	�‰�ðà�k‰k˜'Ó"ò ˆØ
�‰�ðà�[‰[œrŸz™zÐ*?ÄÇÁÓFˆ[ÓGò ˆØ	�‰�ðð €KÜ‹u€HØ�[‰[˜ 4ˆ[Ó(ò 2ˆØ�‰yˆØ�j‰j˜tˆjÓ$ˆÜ�9‰9ÐNÐPTÔUÐYcÐgk×gqÑgqÓgsÑYsÐwð  DH÷  DNñ  DNó  DPñ  xPð  TW÷  Tbñ  Tbð  ckõ  TlÜ˜h¨Ó-ˆGØ˜(Ñ"ØØ�L‰L˜Ô!Ø×Ñ  3¨Ð0Õ1ð2ð 'ò ‰ˆˆ3�Ø—‘˜S w°x�Ó@ˆÙ!‘s w§}¡}°SÓ'9¸"Ñ'=ˆŒØ�8‰8ÐØ—x‘x×(Ñ(¨´B·J±JÐ?ZÓ4[Ð(Ó\ò $�Øœ$˜qŸx™x×0Ñ0Ó1Ð2S´4¸¿¹×8IÑ8IÓ3J×3PÑ3PÐQRÓ3SÐTÒTØ—M‘M•Oð$ð 	
�‰�uÕðð 4?×?¡- ! Q¨’gÓ?€Nð €EØ�k‰k EˆkÓ*ò "ˆØ�7‰7�gÒØ�L‰Lœ˜R›Õ!Ø�W‰WÐHÑHØ—+‘+˜b¨�+Ó-ˆCÙØØŸ;™; wÓ/ˆLÜô  ØŸ;™; s°˜;Ó6ô ó ˆMñ
 ™}Ø—‘œS ›WÔ%ØØ�L‰L˜Õà—+‘+˜b¨�+Ó-ˆCÚØ—‘˜SÕ!ð)"ô. ‹5€DØ€KØò "ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÚ�3˜d’?Ø�H‰H�SŒMØ×Ñ˜qÕ!ð	"ð �k‰k˜+Ó&€GØ&ò S‰ˆˆ3�Ø˜'Ò!ØÐ)¨'¨Ð2DÀSÀEÈÐRÑR‰GðSô
 �f‰fÐ*¨B°Ó8€GÜ�f‰f�Y ¨Ó0×6Ñ6Ó8€GØ�$˜ Ð,Ð,ùóY @s   Ì*T	c                  ó<	  — d} t         j                  dd  }d}|t        |«      k  ru||   }|j                  d«      rt	        |j                  dd«      d   «      } n,|dk(  r'|dz   t        |«      k  rt	        ||dz      «      } |dz  }|dz  }|t        |«      k  rŒut        j                  t        d¬«      }|j                  d«       |j                  d	«       |j                  «       }d}d}d}t        d| dz   «      D �]  }	|	dk(  rt        }
n2|	d
k  rt        d|	› d�z   }
nt        j                  dt!        |	«      «      }
t#        |
«      }|s t%        d|	› d�t         j&                  ¬«       Œot)        |«      }t%        d|	› dt        |«      › d�«       |D �]j  \  }}}|j                  d|f«       |j+                  «       r|dz  }Œ1t#        |«      }|s|dz  }ŒDt-        ||«      \  }}}}|r1t        t/        j0                  dd|«      j3                  «       «      d
k  r|dz  }ŒŽ|s|}|s|}t/        j0                  dd|«      d d }t/        j0                  dd|«      j3                  «       }d|v rdnd}	 |j                  d||||||t4        t6        t8        |df«      }|j:                  }|j                  d||t4        |f«       |j=                  «        |dz  }t%        d|› d|d d › �«       tC        jD                  d+«       �Œm �Œ |jK                  «        t%        d,|› d-|› d.|› d/||z   |z   › �«       y # t        j>                  $ �r:}d t!        |«      jA                  «       v rût        d!«      D ]ì  }tC        jD                  d"|d#z  z   «       	 |jG                  «        |j                  d||||||t4        t6        t8        |df«      }|j:                  }|j                  d||t4        |f«       |j=                  «        |dz  }t%        d|› d|d d › d$|dz   › d%�«        nY# t        j>                  $ r(}|d&k(  r|dz  }t%        d'|d d( › d)|› �«       Y d }~Œæd }~ww xY w n|dz  }t%        d*|d d( › d)|› �«       Y d }~�Œ’d }~wt        jH                  $ r	 |dz  }Y �Œ°w xY w)0Nr   r   z--pages=ú=z--pagesé<   )r
   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALé
   z/zfxxgk/fdzdgknr/gsgg/index_z.shtmlz{N}u     [WARN] ç¬¬u   é¡µèŽ·å�–å¤±è´¥, è·³è¿‡r   u     ç¬¬u   é¡µ: æ‰¾åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?ri   r   éÈ   rh   r;   z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z    [z] é-   Úlockedé   é   é   u    (é‡�è¯•ú)é   u       [SKIP-é”�] é(   r   z    [SKIP] gš™™™™™Ù?u	   
æ–°å¢ž: u
     é‡�å¤�: u     è¿‡çŸ­/404: u
     æ€»è®¡: )&r   ÚargvÚlenrn   Úintrq   Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorr   Ú
LIST_FIRSTr@   ÚCATALOG_URLr   ry   r)   r   r   rM   Úfetchoner‘   r,   r-   r.   Ú	SITE_NAMEÚSCRIPT_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚOperationalErrorrm   r    r!   ÚrollbackÚIntegrityErrorÚclose)Ú	max_pagesÚargsr$   r8   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚpageÚlist_urlrE   rF   r"   r0   rI   ÚdhtmlÚd_titleÚd_dater�   r‚   ÚsummaryÚ	has_tableÚcurÚridr'   ÚattemptÚe2s                               r(   ÚmainrÅ   ½   sÃ  € Ø€IÜ�8‰8�A�Bˆ<€DØ	€AØ
Œc�$‹iŠ-Ø�‰GˆØ�<‰<˜
Ô#Ü˜AŸG™G C¨›O¨AÑ.Ó/‰IØ�)Š^  A¡¬¨D«	Ò 1Ü˜D  Q¡™KÓ(ˆIØ�‰FˆAØ	ˆQ‰ˆð Œc�$‹i‹-ô �?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+Ø�‰‹€AØ€IØ€IØ€Jä�a˜ Q™Ó'ó EˆØ�1Š9Ü!‰HØ�RŠZÜÐ$@ÀÀÀfÐ"MÑM‰Hä"×*Ñ*¨5´#°d³)Ó<ˆHÜ˜Ó!ˆÙÜ�L  Ð&=Ð>ÄSÇZÁZÕPØÜ˜4Ó ˆÜ��d�V˜<¬¨E«
 |°4Ð8Ô9Ø %ó 8	ÑˆC�˜Ø�I‰IÐ?À#ÀÔHØ�z‰zŒ|Ø˜Q‘�	ØÜ˜S“MˆEÙØ˜a‘�
ØÜ4BÀ5È#Ó4NÑ1ˆG�V˜W kÙœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOØ˜a‘�
ØÙØ�ÙØ�Ü—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGØ%¨Ñ0™°aˆIð#Ø—i‘ið AØ˜g w°°S¸&Ä)Ì[ÔZdÐfoÐqrÐsóu�ð —m‘m�Ø—	‘	ÐpØ ¬°GÐ<ô>à—‘”Ø˜Q‘�	Ü˜˜f˜X R¨°°¨ ~Ð6Ô7ô6 �J‰J�sŽOòq8	ðEðN 	‡J�J„LÜ	ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øô; ×+Ñ+ó =Øœs 1›vŸ|™|›~Ñ-ä#(¨£8ò N˜ÜŸ
™
 1 w°¡{¡?Ô3ðNØ ŸM™MœOØ"#§)¡)ð !MØ!(¨'°7¸CÀÀfÌiÔYdÔfpÐr{Ð}~Ð ó#A˜Cð #&§-¡-˜CØŸI™IÐ&|Ø'*¨G´YÀÐ&HôJà ŸK™KœMØ%¨™N˜IÜ! E¨&¨°°G¸C¸R°L°>ÀÈ'ÐRSÉ)ÈÐTUÐ"VÔWÙ!øÜ&×7Ñ7ò NØ&¨!š|Ø *¨a¡ 
Ü %¨¸ÀÀ¸°~ÀRÈÀtÐ&LÔ MÿøðNúñNð&  !‘O�JÜ˜K¨°°¨ ~°R¸°sÐ;Ô<ÿùÜ×)Ñ)ò Ø˜Q‘“	ðúsK   É2A8L3Ì3RÍAQ<ÎBPÐQ<ÐQÐ0QÑQ<ÑQÑQ<Ñ<RÒRÚ__main__)é   r™   )!Ú__doc__r   r,   r    r¢   ÚsslÚurllib.requestr   Úurllib.parser   Úbs4r   rª   r«   r¬   r@   r§   r¨   ÚTOTAL_PAGESr¤   ÚOUTPUT_FILEÚcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder   r)   r1   rM   r‘   rÅ   Ú__name__© r2   r(   ú<module>rÕ      s¼   ðñ÷ 3× 2× 2Ý  Ý à$€	Ø"€Ø€
Ø#€ØÐ0Ñ0€
ØÐAÑA€Ø€Ø
€Ø8€à €c× Ñ Ó"€Ø€Ô Ø—-‘-€„ð @ØOØ0ñ€óòòò6e-òP]}ð@ ˆzÒÙ…Fð r2   